00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00031 #ifndef GWENHYWFAR_DB_H
00032 #define GWENHYWFAR_DB_H
00033
00034 #include <gwenhywfar/gwenhywfarapi.h>
00035 #include <gwenhywfar/path.h>
00036 #include <gwenhywfar/bufferedio.h>
00037 #include <gwenhywfar/types.h>
00038 #include <stdio.h>
00039
00040 #ifdef __cplusplus
00041 extern "C" {
00042 #endif
00043
00044
00105 #define GWEN_DB_LINE_MAXSIZE 1024
00106
00122 #define GWEN_DB_FLAGS_OVERWRITE_VARS 0x00010000
00123
00124 #define GWEN_DB_FLAGS_OVERWRITE_GROUPS 0x00020000
00125
00126 #define GWEN_DB_FLAGS_QUOTE_VARNAMES 0x00040000
00127
00128 #define GWEN_DB_FLAGS_QUOTE_VALUES 0x00080000
00129
00130 #define GWEN_DB_FLAGS_WRITE_SUBGROUPS 0x00100000
00131
00132 #define GWEN_DB_FLAGS_DETAILED_GROUPS 0x00200000
00133
00135 #define GWEN_DB_FLAGS_INDEND 0x00400000
00136
00138 #define GWEN_DB_FLAGS_ADD_GROUP_NEWLINES 0x00800000
00139
00141 #define GWEN_DB_FLAGS_USE_COLON 0x01000000
00142
00143 #define GWEN_DB_FLAGS_STOP_ON_EMPTY_LINE 0x02000000
00144
00146 #define GWEN_DB_FLAGS_OMIT_TYPES 0x04000000
00147
00148 #define GWEN_DB_FLAGS_APPEND_FILE 0x08000000
00149
00150 #define GWEN_DB_FLAGS_ESCAPE_CHARVALUES 0x10000000
00151
00153 #define GWEN_DB_FLAGS_UNESCAPE_CHARVALUES 0x10000000
00154
00156 #define GWEN_DB_FLAGS_LOCKFILE 0x20000000
00157
00161 #define GWEN_DB_FLAGS_INSERT 0x40000000
00162
00164 #define GWEN_DB_FLAGS_DEFAULT \
00165 (\
00166 GWEN_DB_FLAGS_QUOTE_VALUES | \
00167 GWEN_DB_FLAGS_WRITE_SUBGROUPS | \
00168 GWEN_DB_FLAGS_DETAILED_GROUPS | \
00169 GWEN_DB_FLAGS_INDEND | \
00170 GWEN_DB_FLAGS_ADD_GROUP_NEWLINES | \
00171 GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \
00172 GWEN_DB_FLAGS_UNESCAPE_CHARVALUES\
00173 )
00174
00175
00178 #define GWEN_DB_FLAGS_COMPACT \
00179 (\
00180 GWEN_DB_FLAGS_QUOTE_VALUES | \
00181 GWEN_DB_FLAGS_WRITE_SUBGROUPS | \
00182 GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \
00183 GWEN_DB_FLAGS_UNESCAPE_CHARVALUES\
00184 )
00185
00189 #define GWEN_DB_FLAGS_HTTP \
00190 (\
00191 GWEN_DB_FLAGS_USE_COLON |\
00192 GWEN_DB_FLAGS_STOP_ON_EMPTY_LINE\
00193 )
00194
00201 #define GWEN_DB_NODE_FLAGS_DIRTY 0x00000001
00202
00203 #define GWEN_DB_NODE_FLAGS_VOLATILE 0x00000002
00204
00206 #define GWEN_DB_NODE_FLAGS_INHERIT_HASH_MECHANISM 0x00000004
00207
00217 typedef union GWEN_DB_NODE GWEN_DB_NODE;
00218
00222 typedef enum {
00224 GWEN_DB_VALUETYPE_UNKNOWN=0,
00226 GWEN_DB_VALUETYPE_CHAR,
00228 GWEN_DB_VALUETYPE_INT,
00230 GWEN_DB_VALUETYPE_BIN,
00232 GWEN_DB_VALUETYPE_PTR
00233 } GWEN_DB_VALUETYPE;
00234
00235
00240
00247 GWENHYWFAR_API
00248 GWEN_DB_NODE *GWEN_DB_Group_new(const char *name);
00249
00255 GWENHYWFAR_API
00256 void GWEN_DB_Group_free(GWEN_DB_NODE *n);
00257
00258
00265 GWENHYWFAR_API
00266 GWEN_DB_NODE *GWEN_DB_Group_dup(const GWEN_DB_NODE *n);
00267
00285 GWENHYWFAR_API
00286 GWEN_DB_NODE *GWEN_DB_GetFirstGroup(GWEN_DB_NODE *n);
00287
00310 GWENHYWFAR_API
00311 GWEN_DB_NODE *GWEN_DB_GetNextGroup(GWEN_DB_NODE *n);
00312
00313
00325 GWENHYWFAR_API
00326 GWEN_DB_NODE *GWEN_DB_FindFirstGroup(GWEN_DB_NODE *n, const char *name);
00327
00346 GWENHYWFAR_API
00347 GWEN_DB_NODE *GWEN_DB_FindNextGroup(GWEN_DB_NODE *n, const char *name);
00348
00349
00360 typedef void *(*GWEN_DB_NODES_CB)(GWEN_DB_NODE *node, void *user_data);
00361
00378 GWENHYWFAR_API
00379 void *GWEN_DB_Groups_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func,
00380 void *user_data);
00381
00385 GWENHYWFAR_API
00386 unsigned int GWEN_DB_Groups_Count(const GWEN_DB_NODE *node);
00444 GWENHYWFAR_API
00445 const char *GWEN_DB_GetCharValue(GWEN_DB_NODE *n,
00446 const char *path,
00447 int idx,
00448 const char *defVal);
00457 GWENHYWFAR_API
00458 int GWEN_DB_SetCharValue(GWEN_DB_NODE *n,
00459 GWEN_TYPE_UINT32 flags,
00460 const char *path,
00461 const char *val);
00462
00463
00474 GWENHYWFAR_API
00475 int GWEN_DB_AddCharValue(GWEN_DB_NODE *n,
00476 const char *path,
00477 const char *val,
00478 int senseCase,
00479 int check);
00480
00481
00491 GWENHYWFAR_API
00492 int GWEN_DB_RemoveCharValue(GWEN_DB_NODE *n,
00493 const char *path,
00494 const char *val,
00495 int senseCase);
00496
00497
00505 GWENHYWFAR_API
00506 int GWEN_DB_GetIntValue(GWEN_DB_NODE *n,
00507 const char *path,
00508 int idx,
00509 int defVal);
00510
00519 GWENHYWFAR_API
00520 int GWEN_DB_SetIntValue(GWEN_DB_NODE *n,
00521 GWEN_TYPE_UINT32 flags,
00522 const char *path,
00523 int val);
00524
00525
00537 GWENHYWFAR_API
00538 const void *GWEN_DB_GetBinValue(GWEN_DB_NODE *n,
00539 const char *path,
00540 int idx,
00541 const void *defVal,
00542 unsigned int defValSize,
00543 unsigned int *returnValueSize);
00544
00555 GWENHYWFAR_API
00556 int GWEN_DB_SetBinValue(GWEN_DB_NODE *n,
00557 GWEN_TYPE_UINT32 flags,
00558 const char *path,
00559 const void *val,
00560 unsigned int valSize);
00561
00562
00570 GWENHYWFAR_API
00571 void *GWEN_DB_GetPtrValue(GWEN_DB_NODE *n,
00572 const char *path,
00573 int idx,
00574 void *defVal);
00575
00585 GWENHYWFAR_API
00586 int GWEN_DB_SetPtrValue(GWEN_DB_NODE *n,
00587 GWEN_TYPE_UINT32 flags,
00588 const char *path,
00589 void *val);
00598
00608 GWENHYWFAR_API
00609 GWEN_DB_NODE *GWEN_DB_GetGroup(GWEN_DB_NODE *n,
00610 GWEN_TYPE_UINT32 flags,
00611 const char *path);
00612
00616 GWENHYWFAR_API
00617 const char *GWEN_DB_GroupName(GWEN_DB_NODE *n);
00618
00624 GWENHYWFAR_API
00625 void GWEN_DB_GroupRename(GWEN_DB_NODE *n, const char *newname);
00626
00641 GWENHYWFAR_API
00642 int GWEN_DB_AddGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node);
00643
00659 GWENHYWFAR_API
00660 int GWEN_DB_InsertGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node);
00661
00671 GWENHYWFAR_API
00672 int GWEN_DB_AddGroupChildren(GWEN_DB_NODE *n, GWEN_DB_NODE *nn);
00673
00683 GWENHYWFAR_API
00684 void GWEN_DB_UnlinkGroup(GWEN_DB_NODE *n);
00685
00692 GWENHYWFAR_API
00693 int GWEN_DB_DeleteGroup(GWEN_DB_NODE *n,
00694 const char *path);
00702 GWENHYWFAR_API
00703 int GWEN_DB_ClearGroup(GWEN_DB_NODE *n,
00704 const char *path);
00705
00712 GWENHYWFAR_API
00713 int GWEN_DB_IsGroup(const GWEN_DB_NODE *n);
00714
00726 GWENHYWFAR_API
00727 GWEN_TYPE_UINT32 GWEN_DB_GetNodeFlags(const GWEN_DB_NODE *n);
00728
00734 GWENHYWFAR_API
00735 void GWEN_DB_SetNodeFlags(GWEN_DB_NODE *n,
00736 GWEN_TYPE_UINT32 flags);
00737
00746 void GWEN_DB_ModifyBranchFlagsUp(GWEN_DB_NODE *n,
00747 GWEN_TYPE_UINT32 newflags,
00748 GWEN_TYPE_UINT32 mask);
00749
00758 void GWEN_DB_ModifyBranchFlagsDown(GWEN_DB_NODE *n,
00759 GWEN_TYPE_UINT32 newflags,
00760 GWEN_TYPE_UINT32 mask);
00761
00775
00783 GWENHYWFAR_API
00784 int GWEN_DB_ReadFromStream(GWEN_DB_NODE *n,
00785 GWEN_BUFFEREDIO *bio,
00786 GWEN_TYPE_UINT32 dbflags);
00787
00795 GWENHYWFAR_API
00796 int GWEN_DB_ReadFile(GWEN_DB_NODE *n,
00797 const char *fname,
00798 GWEN_TYPE_UINT32 dbflags);
00799
00807 GWENHYWFAR_API
00808 int GWEN_DB_WriteToStream(GWEN_DB_NODE *n,
00809 GWEN_BUFFEREDIO *bio,
00810 GWEN_TYPE_UINT32 dbflags);
00811
00820 GWENHYWFAR_API
00821 int GWEN_DB_WriteFile(GWEN_DB_NODE *n,
00822 const char *fname,
00823 GWEN_TYPE_UINT32 dbflags);
00824
00835 GWENHYWFAR_API
00836 int GWEN_DB_ReadFileAs(GWEN_DB_NODE *n,
00837 const char *fname,
00838 const char *type,
00839 GWEN_DB_NODE *params,
00840 GWEN_TYPE_UINT32 dbflags);
00841
00852 GWENHYWFAR_API
00853 int GWEN_DB_WriteFileAs(GWEN_DB_NODE *n,
00854 const char *fname,
00855 const char *type,
00856 GWEN_DB_NODE *params,
00857 GWEN_TYPE_UINT32 dbflags);
00870 GWENHYWFAR_API
00871 GWEN_DB_NODE *GWEN_DB_GetFirstVar(GWEN_DB_NODE *n);
00872
00873
00895 GWENHYWFAR_API
00896 GWEN_DB_NODE *GWEN_DB_GetNextVar(GWEN_DB_NODE *n);
00897
00902 GWENHYWFAR_API
00903 const char *GWEN_DB_VariableName(GWEN_DB_NODE *n);
00904
00905
00906 GWENHYWFAR_API
00907 void GWEN_DB_VariableRename(GWEN_DB_NODE *n, const char *newname);
00908
00925 GWENHYWFAR_API
00926 void *GWEN_DB_Variables_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func,
00927 void *user_data);
00928
00933 GWENHYWFAR_API
00934 unsigned int GWEN_DB_Variables_Count(const GWEN_DB_NODE *node);
00935
00941 GWENHYWFAR_API
00942 GWEN_DB_VALUETYPE GWEN_DB_GetVariableType(GWEN_DB_NODE *n,
00943 const char *p);
00944
00951 GWENHYWFAR_API
00952 int GWEN_DB_DeleteVar(GWEN_DB_NODE *n,
00953 const char *path);
00954
00961 GWENHYWFAR_API
00962 int GWEN_DB_VariableExists(GWEN_DB_NODE *n,
00963 const char *path);
00964
00972 GWENHYWFAR_API
00973 int GWEN_DB_ValueExists(GWEN_DB_NODE *n,
00974 const char *path,
00975 unsigned int idx);
00976
00983 GWENHYWFAR_API
00984 int GWEN_DB_IsVariable(const GWEN_DB_NODE *n);
00997 GWENHYWFAR_API
00998 GWEN_DB_NODE *GWEN_DB_GetFirstValue(GWEN_DB_NODE *n);
00999
01016 GWENHYWFAR_API
01017 GWEN_DB_NODE *GWEN_DB_GetNextValue(GWEN_DB_NODE *n);
01018
01035 GWENHYWFAR_API
01036 void *GWEN_DB_Values_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func,
01037 void *user_data);
01038
01042 GWENHYWFAR_API
01043 unsigned int GWEN_DB_Values_Count(const GWEN_DB_NODE *node);
01044
01049 GWENHYWFAR_API
01050 GWEN_DB_VALUETYPE GWEN_DB_GetValueType(GWEN_DB_NODE *n);
01051
01052 GWENHYWFAR_API
01053 GWEN_DB_VALUETYPE GWEN_DB_GetValueTypeByPath(GWEN_DB_NODE *n,
01054 const char *p,
01055 unsigned int i);
01056
01061 GWENHYWFAR_API
01062 const char *GWEN_DB_GetCharValueFromNode(const GWEN_DB_NODE *n);
01063
01068 GWENHYWFAR_API
01069 int GWEN_DB_SetCharValueInNode(GWEN_DB_NODE *n, const char *s);
01070
01071 GWENHYWFAR_API
01072 int GWEN_DB_GetIntValueFromNode(const GWEN_DB_NODE *n);
01073
01074 GWENHYWFAR_API
01075 const void *GWEN_DB_GetBinValueFromNode(const GWEN_DB_NODE *n,
01076 unsigned int *size);
01077
01078
01085 GWENHYWFAR_API
01086 int GWEN_DB_IsValue(const GWEN_DB_NODE *n);
01100
01107 GWENHYWFAR_API
01108 void GWEN_DB_Dump(GWEN_DB_NODE *n, FILE *f, int insert);
01121 typedef struct GWEN_DB_HASH_MECHANISM GWEN_DB_HASH_MECHANISM;
01122
01123 typedef int (*GWEN_DB_HASH_INITNODE_FN)(GWEN_DB_HASH_MECHANISM *hm,
01124 GWEN_DB_NODE *node,
01125 void **hashData);
01126 typedef int (*GWEN_DB_HASH_FININODE_FN)(GWEN_DB_HASH_MECHANISM *hm,
01127 GWEN_DB_NODE *node,
01128 void **hashData);
01129 typedef int (*GWEN_DB_HASH_ADDNODE_FN)(GWEN_DB_HASH_MECHANISM *hm,
01130 GWEN_DB_NODE *parent,
01131 GWEN_DB_NODE *node,
01132 int appendOrInsert,
01133 void *hashData);
01134 typedef int (*GWEN_DB_HASH_UNLINKNODE_FN)(GWEN_DB_HASH_MECHANISM *hm,
01135 GWEN_DB_NODE *parent,
01136 GWEN_DB_NODE *node,
01137 void *hashData);
01138 typedef GWEN_DB_NODE* (*GWEN_DB_HASH_GETNODE_FN)(GWEN_DB_HASH_MECHANISM *hm,
01139 GWEN_DB_NODE *parent,
01140 const char *name,
01141 int idx,
01142 void *hashData);
01143
01144 GWENHYWFAR_API
01145 GWEN_DB_HASH_MECHANISM *GWEN_DB_HashMechanism_new();
01146
01147 GWENHYWFAR_API
01148 void GWEN_DB_HashMechanism_Attach(GWEN_DB_HASH_MECHANISM *hm);
01149
01150 GWENHYWFAR_API
01151 void GWEN_DB_HashMechanism_free(GWEN_DB_HASH_MECHANISM *hm);
01152
01153
01154 GWENHYWFAR_API
01155 void GWEN_DB_HashMechanism_SetInitNodeFn(GWEN_DB_HASH_MECHANISM *hm,
01156 GWEN_DB_HASH_INITNODE_FN f);
01157
01158 GWENHYWFAR_API
01159 void GWEN_DB_HashMechanism_SetFiniNodeFn(GWEN_DB_HASH_MECHANISM *hm,
01160 GWEN_DB_HASH_FININODE_FN f);
01161
01162 GWENHYWFAR_API
01163 void GWEN_DB_HashMechanism_SetAddNodeFn(GWEN_DB_HASH_MECHANISM *hm,
01164 GWEN_DB_HASH_ADDNODE_FN f);
01165
01166 GWENHYWFAR_API
01167 void GWEN_DB_HashMechanism_SetUnlinkNodeFn(GWEN_DB_HASH_MECHANISM *hm,
01168 GWEN_DB_HASH_UNLINKNODE_FN f);
01169
01170 GWENHYWFAR_API
01171 void GWEN_DB_HashMechanism_SetGetNodeFn(GWEN_DB_HASH_MECHANISM *hm,
01172 GWEN_DB_HASH_GETNODE_FN f);
01173
01174
01189 GWENHYWFAR_API
01190 int GWEN_DB_Group_SetHashMechanism(GWEN_DB_NODE *node,
01191 GWEN_DB_HASH_MECHANISM *hm);
01192
01197
01198
01199 #ifdef __cplusplus
01200 }
01201 #endif
01202
01203
01204 #endif
01205
01206
01207