Main Page | Class List | File List | Class Members | File Members | Related Pages

dataset.h

Go to the documentation of this file.
00001 /* 00002 * $Id: dataset.h,v 1.28 2003/10/30 09:08:42 jasta Exp $ 00003 * 00004 * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net) 00005 * 00006 * This program is free software; you can redistribute it and/or modify it 00007 * under the terms of the GNU General Public License as published by the 00008 * Free Software Foundation; either version 2, or (at your option) any 00009 * later version. 00010 * 00011 * This program is distributed in the hope that it will be useful, but 00012 * WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * General Public License for more details. 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 /* ds_data_t flags */ 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 } /* DatasetNode */; 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 /* __DATASET_H */

Generated on Sun Aug 22 08:07:10 2004 by doxygen 1.3.7