libdatatypes 0.3.2
Abstract datatypes for C.
Loading...
Searching...
No Matches
assocarray.h
Go to the documentation of this file.
1/***************************************************************************
2 begin........: May 2012
3 copyright....: Sebastian Fedrau
4 email........: sebastian.fedrau@gmail.com
5 ***************************************************************************/
6
7/***************************************************************************
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License v3 as published by
10 the Free Software Foundation.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License v3 for more details.
16 ***************************************************************************/
22#ifndef ASSOCARRAY_H
23#define ASSOCARRAY_H
24
25#include <stdbool.h>
26#include <sys/types.h>
27
28#include "datatypes.h"
29
31#define ASSOC_ARRAY_MAX_SIZE (SSIZE_MAX / sizeof(void *))
32
37typedef struct _AssocArray
38{
42 void **keys;
44 void **values;
50 size_t size;
52 size_t count;
61 {
63 const struct _AssocArray *array;
65 ssize_t offset;
66 } pair;
68
70typedef struct _AssocArrayPair AssocArrayPair;
71
73typedef struct _AssocArrayPair AssocArrayIter;
74
88
97AssocArray *assoc_array_new(CompareFunc compare_keys, FreeFunc free_key, FreeFunc free_value);
98
107void assoc_array_init(AssocArray *array, CompareFunc compare_keys, FreeFunc free_key, FreeFunc free_value);
108
115
121void assoc_array_free(AssocArray *array);
122
128void assoc_array_clear(AssocArray *array);
129
140AssocArrayInsertResult assoc_array_set(AssocArray *array, void *key, void *value, bool overwrite_key);
141
148void assoc_array_remove(AssocArray *array, const void *key);
149
157AssocArrayPair *assoc_array_lookup(AssocArray *array, const void *key);
158
166
168#define assoc_array_pair_key(p) p->array->keys[p->offset]
169
177
179#define assoc_array_pair_value(p) p->array->values[p->offset]
180
187void assoc_array_pair_set_value(AssocArrayPair *pair, void *value);
188
196bool assoc_array_key_exists(const AssocArray *array, const void *key);
197
204size_t assoc_array_count(const AssocArray *array);
205
212size_t assoc_array_size(const AssocArray *array);
213
221void assoc_array_iter_init(const AssocArray *array, AssocArrayIter *iter);
222
230
238
240#define assoc_array_iter_key(iter) iter.array->keys[iter.offset]
241
249
251#define assoc_array_iter_value(iter) iter.array->values[iter.offset]
252
253#endif
254
size_t count
Definition assocarray.h:52
void assoc_array_iter_init(const AssocArray *array, AssocArrayIter *iter)
Definition assocarray.c:453
AssocArrayInsertResult
result of assoc_array_set() method.
Definition assocarray.h:80
@ ASSOCARRAY_INSERT_RESULT_NEW
Definition assocarray.h:82
@ ASSOCARRAY_INSERT_RESULT_REPLACED
Definition assocarray.h:84
@ ASSOCARRAY_INSERT_RESULT_FAILED
Definition assocarray.h:86
void assoc_array_init(AssocArray *array, CompareFunc compare_keys, FreeFunc free_key, FreeFunc free_value)
Definition assocarray.c:97
void ** keys
Definition assocarray.h:42
void assoc_array_pair_set_value(AssocArrayPair *pair, void *value)
Definition assocarray.c:407
void * assoc_array_iter_get_value(const AssocArrayIter *iter)
Definition assocarray.c:481
AssocArray * assoc_array_new(CompareFunc compare_keys, FreeFunc free_key, FreeFunc free_value)
Definition assocarray.c:79
void * assoc_array_iter_get_key(const AssocArrayIter *iter)
Definition assocarray.c:473
AssocArrayPair * assoc_array_lookup(AssocArray *array, const void *key)
Definition assocarray.c:368
void * assoc_array_pair_get_value(const AssocArrayPair *pair)
Definition assocarray.c:398
bool assoc_array_iter_next(AssocArrayIter *iter)
Definition assocarray.c:463
FreeFunc free_key
Definition assocarray.h:46
void assoc_array_remove(AssocArray *array, const void *key)
Definition assocarray.c:335
bool assoc_array_key_exists(const AssocArray *array, const void *key)
Definition assocarray.c:421
void assoc_array_clear(AssocArray *array)
Definition assocarray.c:170
size_t size
Definition assocarray.h:50
size_t assoc_array_size(const AssocArray *array)
Definition assocarray.c:445
void assoc_array_free(AssocArray *array)
Definition assocarray.c:159
struct _AssocArrayPair AssocArrayIter
Definition assocarray.h:73
size_t assoc_array_count(const AssocArray *array)
Definition assocarray.c:437
AssocArrayInsertResult assoc_array_set(AssocArray *array, void *key, void *value, bool overwrite_key)
Definition assocarray.c:288
void assoc_array_destroy(AssocArray *array)
Definition assocarray.c:128
struct _AssocArrayPair AssocArrayPair
Definition assocarray.h:70
CompareFunc compare_keys
Definition assocarray.h:40
void * assoc_array_pair_get_key(const AssocArrayPair *pair)
Definition assocarray.c:389
void ** values
Definition assocarray.h:44
const struct _AssocArray * array
Definition assocarray.h:63
FreeFunc free_value
Definition assocarray.h:48
Array containing associations between keys and values.
Definition assocarray.h:38
A key-value pair.
Definition assocarray.h:61
int32_t(* CompareFunc)(const void *a, const void *b)
Definition compare.h:30
General declarations.
void(* FreeFunc)(void *p)
Definition datatypes.h:33