00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
#ifndef __DATASET_H
00018
#define __DATASET_H
00019
00020
00021
00032
00033
00034
#include "list.h"
00035
#include "array.h"
00036
00037
00038
00039
00040
#define DS_NOCOPY 0x01
00041
00046 typedef struct
00047
{
00048
void *data;
00049 size_t len;
00050 uint8_t flags;
00051 }
ds_data_t;
00052
00053
00054
00058 struct dataset_node
00059 {
00060
ds_data_t *key;
00061
ds_data_t *value;
00062
00063
union
00064
{
00065
struct dataset_node *hash_next;
00066 size_t array_offs;
00067
List *list_link;
00068 } tdata;
00069 } ;
00070
00071
00072
00076 typedef enum
00077 {
00078
DATASET_LIST,
00079
DATASET_ARRAY,
00080
DATASET_HASH
00081 }
DatasetType;
00082
00083
#define DATASET_DEFAULT DATASET_HASH
00084
00085
struct dataset;
00086
typedef struct dataset Dataset;
00087
00088
struct dataset_node;
00089
typedef struct dataset_node DatasetNode;
00090
00091
00092
00093 #define DS_NOTFOUND 0x00
00094 #define DS_FOUND 0x02
00096 #define DS_CONTINUE 0x01
00097 #define DS_BREAK 0x02
00098 #define DS_REMOVE 0x04
00104 typedef void (*DatasetForeachFn) (ds_data_t *key, ds_data_t *value,
00105
void *udata);
00106
00114 typedef int (*
DatasetForeachExFn) (
ds_data_t *key,
ds_data_t *value,
00115
void *udata);
00116
00120 #define DS_FOREACH(func) ((DatasetForeachFn)func)
00121
#define DS_FOREACH_EX(func) ((DatasetForeachExFn)func)
00122
00123
typedef DatasetForeachExFn DatasetFindFn;
00124
#define DS_FIND(func) ((DatasetFindFn)func)
00125
00126
00127
00128 EXTERN_C_BEGIN
00129
00130
00131
00138 LIBGIFT_EXPORT
00139 Dataset *dataset_new (DatasetType type);
00140
00144 LIBGIFT_EXPORT
00145
void dataset_clear (Dataset *d);
00146
00147
00148
00169 LIBGIFT_EXPORT
00170
void ds_data_init (
ds_data_t *dsdata,
const void *data, size_t len,
00171
int flags);
00172
00173
00174
00178 LIBGIFT_EXPORT
00179 DatasetNode *dataset_insert_ex (Dataset **d,
ds_data_t *key,
00180
ds_data_t *value);
00181
00198 LIBGIFT_EXPORT
00199 DatasetNode *dataset_insert (Dataset **d,
00200
const void *key, size_t key_len,
00201
const void *value, size_t value_len);
00202
00207 LIBGIFT_EXPORT
00208 DatasetNode *dataset_insertstr (Dataset **d,
const char *key,
00209
const char *value);
00210
00211
00212
00216 LIBGIFT_EXPORT
00217
void dataset_remove_ex (Dataset *d,
ds_data_t *key);
00218
00222 LIBGIFT_EXPORT
00223
void dataset_remove (Dataset *d,
const void *key, size_t key_len);
00224
00228 LIBGIFT_EXPORT
00229
void dataset_removestr (Dataset *d,
const char *key);
00230
00235 LIBGIFT_EXPORT
00236
void dataset_remove_node (Dataset *d, DatasetNode *node);
00237
00238
00239
00243 LIBGIFT_EXPORT
00244
ds_data_t *dataset_lookup_ex (Dataset *d,
ds_data_t *key);
00245
00250 LIBGIFT_EXPORT
00251
void *dataset_lookup (Dataset *d,
const void *key, size_t key_len);
00252
00256 LIBGIFT_EXPORT
00257
void *dataset_lookupstr (Dataset *d,
const char *key);
00258
00262 LIBGIFT_EXPORT
00263 DatasetNode *dataset_lookup_node_ex (Dataset *d,
ds_data_t *key);
00264
00269 LIBGIFT_EXPORT
00270 DatasetNode *dataset_lookup_node (Dataset *d,
const void *key,
00271 size_t key_len);
00272
00273
00274
00283 LIBGIFT_EXPORT
00284
void dataset_foreach (Dataset *d,
DatasetForeachFn func,
void *udata);
00285
00291 LIBGIFT_EXPORT
00292
void dataset_foreach_ex (Dataset *d, DatasetForeachExFn func,
void *udata);
00293
00294
00295
00301 LIBGIFT_EXPORT
00302
void *dataset_find (Dataset *d, DatasetFindFn func,
void *udata);
00303
00308 LIBGIFT_EXPORT
00309 DatasetNode *dataset_find_node (Dataset *d, DatasetFindFn func,
void *udata);
00310
00311
00312
00320 LIBGIFT_EXPORT
00321
unsigned int dataset_length (Dataset *d);
00322
00323
00324
00328 LIBGIFT_EXPORT
00329
List *dataset_flatten (Dataset *d);
00330
00331
00332
00342 LIBGIFT_EXPORT
00343 uint32_t dataset_uniq32 (Dataset *d, uint32_t *counter);
00344
00345
00346
00347 EXTERN_C_END
00348
00349
00350
00351
#endif