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
00028 #ifndef GWENHYWFAR_DB_H
00029 #define GWENHYWFAR_DB_H
00030
00031 #include <gwenhywfar/gwenhywfarapi.h>
00032 #include <gwenhywfar/path.h>
00033 #include <gwenhywfar/fastbuffer.h>
00034 #include <gwenhywfar/types.h>
00035 #include <stdio.h>
00036
00037 #ifdef __cplusplus
00038 extern "C" {
00039 #endif
00040
00041
00102 #define GWEN_DB_LINE_MAXSIZE 1024
00103
00119 #define GWEN_DB_FLAGS_ALLOW_EMPTY_STREAM 0x00008000
00120
00121 #define GWEN_DB_FLAGS_OVERWRITE_VARS 0x00010000
00122
00123 #define GWEN_DB_FLAGS_OVERWRITE_GROUPS 0x00020000
00124
00125 #define GWEN_DB_FLAGS_QUOTE_VARNAMES 0x00040000
00126
00127 #define GWEN_DB_FLAGS_QUOTE_VALUES 0x00080000
00128
00129 #define GWEN_DB_FLAGS_WRITE_SUBGROUPS 0x00100000
00130
00131 #define GWEN_DB_FLAGS_DETAILED_GROUPS 0x00200000
00132
00134 #define GWEN_DB_FLAGS_INDEND 0x00400000
00135
00137 #define GWEN_DB_FLAGS_ADD_GROUP_NEWLINES 0x00800000
00138
00140 #define GWEN_DB_FLAGS_USE_COLON 0x01000000
00141
00142 #define GWEN_DB_FLAGS_UNTIL_EMPTY_LINE 0x02000000
00143
00145 #define GWEN_DB_FLAGS_OMIT_TYPES 0x04000000
00146
00147 #define GWEN_DB_FLAGS_APPEND_FILE 0x08000000
00148
00149 #define GWEN_DB_FLAGS_ESCAPE_CHARVALUES 0x10000000
00150
00152 #define GWEN_DB_FLAGS_UNESCAPE_CHARVALUES 0x10000000
00153
00155 #define GWEN_DB_FLAGS_LOCKFILE 0x20000000
00156
00160 #define GWEN_DB_FLAGS_INSERT 0x40000000
00161
00165 #define GWEN_DB_FLAGS_DOSMODE 0x80000000
00166
00168 #define GWEN_DB_FLAGS_DEFAULT \
00169 (\
00170 GWEN_DB_FLAGS_QUOTE_VALUES | \
00171 GWEN_DB_FLAGS_WRITE_SUBGROUPS | \
00172 GWEN_DB_FLAGS_DETAILED_GROUPS | \
00173 GWEN_DB_FLAGS_INDEND | \
00174 GWEN_DB_FLAGS_ADD_GROUP_NEWLINES | \
00175 GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \
00176 GWEN_DB_FLAGS_UNESCAPE_CHARVALUES\
00177 )
00178
00179
00182 #define GWEN_DB_FLAGS_COMPACT \
00183 (\
00184 GWEN_DB_FLAGS_QUOTE_VALUES | \
00185 GWEN_DB_FLAGS_WRITE_SUBGROUPS | \
00186 GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \
00187 GWEN_DB_FLAGS_UNESCAPE_CHARVALUES\
00188 )
00189
00193 #define GWEN_DB_FLAGS_HTTP \
00194 (\
00195 GWEN_DB_FLAGS_USE_COLON |\
00196 GWEN_DB_FLAGS_UNTIL_EMPTY_LINE |\
00197 GWEN_DB_FLAGS_OMIT_TYPES | \
00198 GWEN_DB_FLAGS_DOSMODE \
00199 )
00200
00207 #define GWEN_DB_NODE_FLAGS_DIRTY 0x00000001
00208
00209 #define GWEN_DB_NODE_FLAGS_VOLATILE 0x00000002
00210
00212 #define GWEN_DB_NODE_FLAGS_INHERIT_HASH_MECHANISM 0x00000004
00213
00216 #define GWEN_DB_DEFAULT_LOCK_TIMEOUT 1000
00217
00218
00226 typedef struct GWEN_DB_NODE GWEN_DB_NODE;
00227
00231 typedef enum {
00233 GWEN_DB_NodeType_Unknown=-1,
00235 GWEN_DB_NodeType_Group=0,
00237 GWEN_DB_NodeType_Var,
00239 GWEN_DB_NodeType_ValueChar,
00241 GWEN_DB_NodeType_ValueInt,
00243 GWEN_DB_NodeType_ValueBin,
00245 GWEN_DB_NodeType_ValuePtr,
00247 GWEN_DB_NodeType_ValueLast
00248 } GWEN_DB_NODE_TYPE;
00249
00250
00251
00256
00263 GWENHYWFAR_API
00264 GWEN_DB_NODE *GWEN_DB_Group_new(const char *name);
00265
00271 GWENHYWFAR_API
00272 void GWEN_DB_Group_free(GWEN_DB_NODE *n);
00273
00274
00281 GWENHYWFAR_API
00282 GWEN_DB_NODE *GWEN_DB_Group_dup(const GWEN_DB_NODE *n);
00283
00301 GWENHYWFAR_API
00302 GWEN_DB_NODE *GWEN_DB_GetFirstGroup(GWEN_DB_NODE *n);
00303
00326 GWENHYWFAR_API
00327 GWEN_DB_NODE *GWEN_DB_GetNextGroup(GWEN_DB_NODE *n);
00328
00329
00341 GWENHYWFAR_API
00342 GWEN_DB_NODE *GWEN_DB_FindFirstGroup(GWEN_DB_NODE *n, const char *name);
00343
00362 GWENHYWFAR_API
00363 GWEN_DB_NODE *GWEN_DB_FindNextGroup(GWEN_DB_NODE *n, const char *name);
00364
00365
00376 typedef void *(*GWEN_DB_NODES_CB)(GWEN_DB_NODE *node, void *user_data);
00377
00394 GWENHYWFAR_API
00395 void *GWEN_DB_Groups_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func,
00396 void *user_data);
00397
00401 GWENHYWFAR_API
00402 unsigned int GWEN_DB_Groups_Count(const GWEN_DB_NODE *node);
00403
00407 GWENHYWFAR_API
00408 GWEN_DB_NODE *GWEN_DB_GetParentGroup(GWEN_DB_NODE *n);
00409
00467 GWENHYWFAR_API
00468 const char *GWEN_DB_GetCharValue(GWEN_DB_NODE *n,
00469 const char *path,
00470 int idx,
00471 const char *defVal);
00480 GWENHYWFAR_API
00481 int GWEN_DB_SetCharValue(GWEN_DB_NODE *n,
00482 uint32_t flags,
00483 const char *path,
00484 const char *val);
00485
00486
00497 GWENHYWFAR_API
00498 int GWEN_DB_AddCharValue(GWEN_DB_NODE *n,
00499 const char *path,
00500 const char *val,
00501 int senseCase,
00502 int check);
00503
00504
00514 GWENHYWFAR_API
00515 int GWEN_DB_RemoveCharValue(GWEN_DB_NODE *n,
00516 const char *path,
00517 const char *val,
00518 int senseCase);
00519
00520
00528 GWENHYWFAR_API
00529 int GWEN_DB_GetIntValue(GWEN_DB_NODE *n,
00530 const char *path,
00531 int idx,
00532 int defVal);
00533
00542 GWENHYWFAR_API
00543 int GWEN_DB_SetIntValue(GWEN_DB_NODE *n,
00544 uint32_t flags,
00545 const char *path,
00546 int val);
00547
00548
00560 GWENHYWFAR_API
00561 const void *GWEN_DB_GetBinValue(GWEN_DB_NODE *n,
00562 const char *path,
00563 int idx,
00564 const void *defVal,
00565 unsigned int defValSize,
00566 unsigned int *returnValueSize);
00567
00578 GWENHYWFAR_API
00579 int GWEN_DB_SetBinValue(GWEN_DB_NODE *n,
00580 uint32_t flags,
00581 const char *path,
00582 const void *val,
00583 unsigned int valSize);
00584
00585
00593 GWENHYWFAR_API
00594 void *GWEN_DB_GetPtrValue(GWEN_DB_NODE *n,
00595 const char *path,
00596 int idx,
00597 void *defVal);
00598
00608 GWENHYWFAR_API
00609 int GWEN_DB_SetPtrValue(GWEN_DB_NODE *n,
00610 uint32_t flags,
00611 const char *path,
00612 void *val);
00621
00631 GWENHYWFAR_API
00632 GWEN_DB_NODE *GWEN_DB_GetGroup(GWEN_DB_NODE *n,
00633 uint32_t flags,
00634 const char *path);
00635
00639 GWENHYWFAR_API
00640 const char *GWEN_DB_GroupName(GWEN_DB_NODE *n);
00641
00647 GWENHYWFAR_API
00648 void GWEN_DB_GroupRename(GWEN_DB_NODE *n, const char *newname);
00649
00664 GWENHYWFAR_API
00665 int GWEN_DB_AddGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node);
00666
00682 GWENHYWFAR_API
00683 int GWEN_DB_InsertGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node);
00684
00694 GWENHYWFAR_API
00695 int GWEN_DB_AddGroupChildren(GWEN_DB_NODE *n, GWEN_DB_NODE *nn);
00696
00706 GWENHYWFAR_API
00707 void GWEN_DB_UnlinkGroup(GWEN_DB_NODE *n);
00708
00715 GWENHYWFAR_API
00716 int GWEN_DB_DeleteGroup(GWEN_DB_NODE *n,
00717 const char *path);
00725 GWENHYWFAR_API
00726 int GWEN_DB_ClearGroup(GWEN_DB_NODE *n,
00727 const char *path);
00728
00735 GWENHYWFAR_API
00736 int GWEN_DB_IsGroup(const GWEN_DB_NODE *n);
00737
00749 GWENHYWFAR_API
00750 uint32_t GWEN_DB_GetNodeFlags(const GWEN_DB_NODE *n);
00751
00757 GWENHYWFAR_API
00758 void GWEN_DB_SetNodeFlags(GWEN_DB_NODE *n,
00759 uint32_t flags);
00760
00769 GWENHYWFAR_API
00770 void GWEN_DB_ModifyBranchFlagsUp(GWEN_DB_NODE *n,
00771 uint32_t newflags,
00772 uint32_t mask);
00773
00782 GWENHYWFAR_API
00783 void GWEN_DB_ModifyBranchFlagsDown(GWEN_DB_NODE *n,
00784 uint32_t newflags,
00785 uint32_t mask);
00786
00800
00801 GWENHYWFAR_API
00802 int GWEN_DB_ReadFromFastBuffer(GWEN_DB_NODE *n,
00803 GWEN_FAST_BUFFER *fb,
00804 uint32_t dbflags);
00805
00806 GWENHYWFAR_API
00807 int GWEN_DB_ReadFromIo(GWEN_DB_NODE *n, GWEN_SYNCIO *sio, uint32_t dbflags);
00808
00809 GWENHYWFAR_API
00810 int GWEN_DB_ReadFile(GWEN_DB_NODE *n,
00811 const char *fname,
00812 uint32_t dbflags);
00813
00814 GWENHYWFAR_API
00815 int GWEN_DB_ReadFromString(GWEN_DB_NODE *n,
00816 const char *str,
00817 int len,
00818 uint32_t dbflags);
00819
00820 GWENHYWFAR_API
00821 int GWEN_DB_WriteToFastBuffer(GWEN_DB_NODE *node,
00822 GWEN_FAST_BUFFER *fb,
00823 uint32_t dbflags);
00824
00825 GWENHYWFAR_API
00826 int GWEN_DB_WriteToIo(GWEN_DB_NODE *node,
00827 GWEN_SYNCIO *sio,
00828 uint32_t dbflags);
00829
00830
00831 GWENHYWFAR_API
00832 int GWEN_DB_WriteFile(GWEN_DB_NODE *n,
00833 const char *fname,
00834 uint32_t dbflags);
00835
00836 GWENHYWFAR_API
00837 int GWEN_DB_WriteToBuffer(GWEN_DB_NODE *n,
00838 GWEN_BUFFER *buf,
00839 uint32_t dbflags);
00840
00851 GWENHYWFAR_API
00852 int GWEN_DB_ReadFileAs(GWEN_DB_NODE *n,
00853 const char *fname,
00854 const char *type,
00855 GWEN_DB_NODE *params,
00856 uint32_t dbflags);
00857
00868 GWENHYWFAR_API
00869 int GWEN_DB_WriteFileAs(GWEN_DB_NODE *n,
00870 const char *fname,
00871 const char *type,
00872 GWEN_DB_NODE *params,
00873 uint32_t dbflags);
00874
00875
00888 GWENHYWFAR_API
00889 GWEN_DB_NODE *GWEN_DB_GetFirstVar(GWEN_DB_NODE *n);
00890
00891
00913 GWENHYWFAR_API
00914 GWEN_DB_NODE *GWEN_DB_GetNextVar(GWEN_DB_NODE *n);
00915
00920 GWENHYWFAR_API
00921 const char *GWEN_DB_VariableName(GWEN_DB_NODE *n);
00922
00923
00924 GWENHYWFAR_API
00925 void GWEN_DB_VariableRename(GWEN_DB_NODE *n, const char *newname);
00926
00943 GWENHYWFAR_API
00944 void *GWEN_DB_Variables_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func,
00945 void *user_data);
00946
00951 GWENHYWFAR_API
00952 unsigned int GWEN_DB_Variables_Count(const GWEN_DB_NODE *node);
00953
00959 GWENHYWFAR_API
00960 GWEN_DB_NODE_TYPE GWEN_DB_GetVariableType(GWEN_DB_NODE *n,
00961 const char *p);
00962
00969 GWENHYWFAR_API
00970 int GWEN_DB_DeleteVar(GWEN_DB_NODE *n,
00971 const char *path);
00972
00979 GWENHYWFAR_API
00980 int GWEN_DB_VariableExists(GWEN_DB_NODE *n,
00981 const char *path);
00982
00990 GWENHYWFAR_API
00991 int GWEN_DB_ValueExists(GWEN_DB_NODE *n,
00992 const char *path,
00993 unsigned int idx);
00994
01001 GWENHYWFAR_API
01002 int GWEN_DB_IsVariable(const GWEN_DB_NODE *n);
01003
01004
01016 GWENHYWFAR_API
01017 GWEN_DB_NODE *GWEN_DB_FindFirstVar(GWEN_DB_NODE *n, const char *name);
01018
01037 GWENHYWFAR_API
01038 GWEN_DB_NODE *GWEN_DB_FindNextVar(GWEN_DB_NODE *n, const char *name);
01039
01052 GWENHYWFAR_API
01053 GWEN_DB_NODE *GWEN_DB_GetFirstValue(GWEN_DB_NODE *n);
01054
01071 GWENHYWFAR_API
01072 GWEN_DB_NODE *GWEN_DB_GetNextValue(GWEN_DB_NODE *n);
01073
01090 GWENHYWFAR_API
01091 void *GWEN_DB_Values_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func,
01092 void *user_data);
01093
01097 GWENHYWFAR_API
01098 unsigned int GWEN_DB_Values_Count(const GWEN_DB_NODE *node);
01099
01104 GWENHYWFAR_API
01105 GWEN_DB_NODE_TYPE GWEN_DB_GetValueType(GWEN_DB_NODE *n);
01106
01107 GWENHYWFAR_API
01108 GWEN_DB_NODE_TYPE GWEN_DB_GetValueTypeByPath(GWEN_DB_NODE *n,
01109 const char *p,
01110 unsigned int i);
01111
01116 GWENHYWFAR_API
01117 const char *GWEN_DB_GetCharValueFromNode(const GWEN_DB_NODE *n);
01118
01123 GWENHYWFAR_API
01124 int GWEN_DB_SetCharValueInNode(GWEN_DB_NODE *n, const char *s);
01125
01126 GWENHYWFAR_API
01127 int GWEN_DB_GetIntValueFromNode(const GWEN_DB_NODE *n);
01128
01129 GWENHYWFAR_API
01130 const void *GWEN_DB_GetBinValueFromNode(const GWEN_DB_NODE *n,
01131 unsigned int *size);
01132
01133
01140 GWENHYWFAR_API
01141 int GWEN_DB_IsValue(const GWEN_DB_NODE *n);
01155
01161 GWENHYWFAR_API
01162 void GWEN_DB_Dump(GWEN_DB_NODE *n, int insert);
01167
01168
01169 #ifdef __cplusplus
01170 }
01171 #endif
01172
01173
01174 #endif
01175
01176
01177