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/fastbuffer.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_UNTIL_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
00166 #define GWEN_DB_FLAGS_DOSMODE 0x80000000
00167
00169 #define GWEN_DB_FLAGS_DEFAULT \
00170 (\
00171 GWEN_DB_FLAGS_QUOTE_VALUES | \
00172 GWEN_DB_FLAGS_WRITE_SUBGROUPS | \
00173 GWEN_DB_FLAGS_DETAILED_GROUPS | \
00174 GWEN_DB_FLAGS_INDEND | \
00175 GWEN_DB_FLAGS_ADD_GROUP_NEWLINES | \
00176 GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \
00177 GWEN_DB_FLAGS_UNESCAPE_CHARVALUES\
00178 )
00179
00180
00183 #define GWEN_DB_FLAGS_COMPACT \
00184 (\
00185 GWEN_DB_FLAGS_QUOTE_VALUES | \
00186 GWEN_DB_FLAGS_WRITE_SUBGROUPS | \
00187 GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \
00188 GWEN_DB_FLAGS_UNESCAPE_CHARVALUES\
00189 )
00190
00194 #define GWEN_DB_FLAGS_HTTP \
00195 (\
00196 GWEN_DB_FLAGS_USE_COLON |\
00197 GWEN_DB_FLAGS_UNTIL_EMPTY_LINE |\
00198 GWEN_DB_FLAGS_OMIT_TYPES | \
00199 GWEN_DB_FLAGS_DOSMODE \
00200 )
00201
00208 #define GWEN_DB_NODE_FLAGS_DIRTY 0x00000001
00209
00210 #define GWEN_DB_NODE_FLAGS_VOLATILE 0x00000002
00211
00213 #define GWEN_DB_NODE_FLAGS_INHERIT_HASH_MECHANISM 0x00000004
00214
00217 #define GWEN_DB_DEFAULT_LOCK_TIMEOUT 1000
00218
00219
00227 typedef struct GWEN_DB_NODE GWEN_DB_NODE;
00228
00232 typedef enum {
00234 GWEN_DB_NodeType_Unknown=-1,
00236 GWEN_DB_NodeType_Group=0,
00238 GWEN_DB_NodeType_Var,
00240 GWEN_DB_NodeType_ValueChar,
00242 GWEN_DB_NodeType_ValueInt,
00244 GWEN_DB_NodeType_ValueBin,
00246 GWEN_DB_NodeType_ValuePtr,
00248 GWEN_DB_NodeType_ValueLast
00249 } GWEN_DB_NODE_TYPE;
00250
00251
00252
00257
00264 GWENHYWFAR_API
00265 GWEN_DB_NODE *GWEN_DB_Group_new(const char *name);
00266
00272 GWENHYWFAR_API
00273 void GWEN_DB_Group_free(GWEN_DB_NODE *n);
00274
00275
00282 GWENHYWFAR_API
00283 GWEN_DB_NODE *GWEN_DB_Group_dup(const GWEN_DB_NODE *n);
00284
00302 GWENHYWFAR_API
00303 GWEN_DB_NODE *GWEN_DB_GetFirstGroup(GWEN_DB_NODE *n);
00304
00327 GWENHYWFAR_API
00328 GWEN_DB_NODE *GWEN_DB_GetNextGroup(GWEN_DB_NODE *n);
00329
00330
00342 GWENHYWFAR_API
00343 GWEN_DB_NODE *GWEN_DB_FindFirstGroup(GWEN_DB_NODE *n, const char *name);
00344
00363 GWENHYWFAR_API
00364 GWEN_DB_NODE *GWEN_DB_FindNextGroup(GWEN_DB_NODE *n, const char *name);
00365
00366
00377 typedef void *(*GWEN_DB_NODES_CB)(GWEN_DB_NODE *node, void *user_data);
00378
00395 GWENHYWFAR_API
00396 void *GWEN_DB_Groups_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func,
00397 void *user_data);
00398
00402 GWENHYWFAR_API
00403 unsigned int GWEN_DB_Groups_Count(const GWEN_DB_NODE *node);
00461 GWENHYWFAR_API
00462 const char *GWEN_DB_GetCharValue(GWEN_DB_NODE *n,
00463 const char *path,
00464 int idx,
00465 const char *defVal);
00474 GWENHYWFAR_API
00475 int GWEN_DB_SetCharValue(GWEN_DB_NODE *n,
00476 uint32_t flags,
00477 const char *path,
00478 const char *val);
00479
00480
00491 GWENHYWFAR_API
00492 int GWEN_DB_AddCharValue(GWEN_DB_NODE *n,
00493 const char *path,
00494 const char *val,
00495 int senseCase,
00496 int check);
00497
00498
00508 GWENHYWFAR_API
00509 int GWEN_DB_RemoveCharValue(GWEN_DB_NODE *n,
00510 const char *path,
00511 const char *val,
00512 int senseCase);
00513
00514
00522 GWENHYWFAR_API
00523 int GWEN_DB_GetIntValue(GWEN_DB_NODE *n,
00524 const char *path,
00525 int idx,
00526 int defVal);
00527
00536 GWENHYWFAR_API
00537 int GWEN_DB_SetIntValue(GWEN_DB_NODE *n,
00538 uint32_t flags,
00539 const char *path,
00540 int val);
00541
00542
00554 GWENHYWFAR_API
00555 const void *GWEN_DB_GetBinValue(GWEN_DB_NODE *n,
00556 const char *path,
00557 int idx,
00558 const void *defVal,
00559 unsigned int defValSize,
00560 unsigned int *returnValueSize);
00561
00572 GWENHYWFAR_API
00573 int GWEN_DB_SetBinValue(GWEN_DB_NODE *n,
00574 uint32_t flags,
00575 const char *path,
00576 const void *val,
00577 unsigned int valSize);
00578
00579
00587 GWENHYWFAR_API
00588 void *GWEN_DB_GetPtrValue(GWEN_DB_NODE *n,
00589 const char *path,
00590 int idx,
00591 void *defVal);
00592
00602 GWENHYWFAR_API
00603 int GWEN_DB_SetPtrValue(GWEN_DB_NODE *n,
00604 uint32_t flags,
00605 const char *path,
00606 void *val);
00615
00625 GWENHYWFAR_API
00626 GWEN_DB_NODE *GWEN_DB_GetGroup(GWEN_DB_NODE *n,
00627 uint32_t flags,
00628 const char *path);
00629
00633 GWENHYWFAR_API
00634 const char *GWEN_DB_GroupName(GWEN_DB_NODE *n);
00635
00641 GWENHYWFAR_API
00642 void GWEN_DB_GroupRename(GWEN_DB_NODE *n, const char *newname);
00643
00658 GWENHYWFAR_API
00659 int GWEN_DB_AddGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node);
00660
00676 GWENHYWFAR_API
00677 int GWEN_DB_InsertGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node);
00678
00688 GWENHYWFAR_API
00689 int GWEN_DB_AddGroupChildren(GWEN_DB_NODE *n, GWEN_DB_NODE *nn);
00690
00700 GWENHYWFAR_API
00701 void GWEN_DB_UnlinkGroup(GWEN_DB_NODE *n);
00702
00709 GWENHYWFAR_API
00710 int GWEN_DB_DeleteGroup(GWEN_DB_NODE *n,
00711 const char *path);
00719 GWENHYWFAR_API
00720 int GWEN_DB_ClearGroup(GWEN_DB_NODE *n,
00721 const char *path);
00722
00729 GWENHYWFAR_API
00730 int GWEN_DB_IsGroup(const GWEN_DB_NODE *n);
00731
00743 GWENHYWFAR_API
00744 uint32_t GWEN_DB_GetNodeFlags(const GWEN_DB_NODE *n);
00745
00751 GWENHYWFAR_API
00752 void GWEN_DB_SetNodeFlags(GWEN_DB_NODE *n,
00753 uint32_t flags);
00754
00763 GWENHYWFAR_API
00764 void GWEN_DB_ModifyBranchFlagsUp(GWEN_DB_NODE *n,
00765 uint32_t newflags,
00766 uint32_t mask);
00767
00776 GWENHYWFAR_API
00777 void GWEN_DB_ModifyBranchFlagsDown(GWEN_DB_NODE *n,
00778 uint32_t newflags,
00779 uint32_t mask);
00780
00794
00795 GWENHYWFAR_API
00796 int GWEN_DB_ReadFromFastBuffer(GWEN_DB_NODE *n,
00797 GWEN_FAST_BUFFER *fb,
00798 uint32_t dbflags);
00799
00809 GWENHYWFAR_API
00810 int GWEN_DB_ReadFromIo(GWEN_DB_NODE *n,
00811 GWEN_IO_LAYER *io,
00812 uint32_t dbflags,
00813 uint32_t guiid,
00814 int msecs);
00815
00816 GWENHYWFAR_API
00817 int GWEN_DB_ReadFromFd(GWEN_DB_NODE *n,
00818 int fd,
00819 uint32_t dbflags,
00820 uint32_t guiid,
00821 int msecs);
00822
00823 GWENHYWFAR_API
00824 int GWEN_DB_ReadFile(GWEN_DB_NODE *n,
00825 const char *fname,
00826 uint32_t dbflags,
00827 uint32_t guiid,
00828 int msecs);
00829
00830 GWENHYWFAR_API
00831 int GWEN_DB_ReadFromString(GWEN_DB_NODE *n,
00832 const char *str,
00833 int len,
00834 uint32_t dbflags,
00835 uint32_t guiid,
00836 int msecs);
00837
00838 GWENHYWFAR_API
00839 int GWEN_DB_WriteToFastBuffer(GWEN_DB_NODE *node,
00840 GWEN_FAST_BUFFER *fb,
00841 uint32_t dbflags);
00842
00843
00844 GWENHYWFAR_API
00845 int GWEN_DB_WriteToIo(GWEN_DB_NODE *node,
00846 GWEN_IO_LAYER *io,
00847 uint32_t dbflags,
00848 uint32_t guiid,
00849 int msecs);
00850
00851 GWENHYWFAR_API
00852 int GWEN_DB_WriteFile(GWEN_DB_NODE *n,
00853 const char *fname,
00854 uint32_t dbflags,
00855 uint32_t guiid,
00856 int msecs);
00857
00858 GWENHYWFAR_API
00859 int GWEN_DB_WriteToFd(GWEN_DB_NODE *n, int fd, uint32_t dbflags, uint32_t guiid, int msecs);
00860
00861
00862 GWENHYWFAR_API
00863 int GWEN_DB_WriteToBuffer(GWEN_DB_NODE *n,
00864 GWEN_BUFFER *buf,
00865 uint32_t dbflags,
00866 uint32_t guiid,
00867 int msecs);
00868
00879 GWENHYWFAR_API
00880 int GWEN_DB_ReadFileAs(GWEN_DB_NODE *n,
00881 const char *fname,
00882 const char *type,
00883 GWEN_DB_NODE *params,
00884 uint32_t dbflags,
00885 uint32_t guiid,
00886 int msecs);
00887
00898 GWENHYWFAR_API
00899 int GWEN_DB_WriteFileAs(GWEN_DB_NODE *n,
00900 const char *fname,
00901 const char *type,
00902 GWEN_DB_NODE *params,
00903 uint32_t dbflags,
00904 uint32_t guiid,
00905 int msecs);
00906
00907
00920 GWENHYWFAR_API
00921 GWEN_DB_NODE *GWEN_DB_GetFirstVar(GWEN_DB_NODE *n);
00922
00923
00945 GWENHYWFAR_API
00946 GWEN_DB_NODE *GWEN_DB_GetNextVar(GWEN_DB_NODE *n);
00947
00952 GWENHYWFAR_API
00953 const char *GWEN_DB_VariableName(GWEN_DB_NODE *n);
00954
00955
00956 GWENHYWFAR_API
00957 void GWEN_DB_VariableRename(GWEN_DB_NODE *n, const char *newname);
00958
00975 GWENHYWFAR_API
00976 void *GWEN_DB_Variables_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func,
00977 void *user_data);
00978
00983 GWENHYWFAR_API
00984 unsigned int GWEN_DB_Variables_Count(const GWEN_DB_NODE *node);
00985
00991 GWENHYWFAR_API
00992 GWEN_DB_NODE_TYPE GWEN_DB_GetVariableType(GWEN_DB_NODE *n,
00993 const char *p);
00994
01001 GWENHYWFAR_API
01002 int GWEN_DB_DeleteVar(GWEN_DB_NODE *n,
01003 const char *path);
01004
01011 GWENHYWFAR_API
01012 int GWEN_DB_VariableExists(GWEN_DB_NODE *n,
01013 const char *path);
01014
01022 GWENHYWFAR_API
01023 int GWEN_DB_ValueExists(GWEN_DB_NODE *n,
01024 const char *path,
01025 unsigned int idx);
01026
01033 GWENHYWFAR_API
01034 int GWEN_DB_IsVariable(const GWEN_DB_NODE *n);
01035
01036
01048 GWENHYWFAR_API
01049 GWEN_DB_NODE *GWEN_DB_FindFirstVar(GWEN_DB_NODE *n, const char *name);
01050
01069 GWENHYWFAR_API
01070 GWEN_DB_NODE *GWEN_DB_FindNextVar(GWEN_DB_NODE *n, const char *name);
01071
01084 GWENHYWFAR_API
01085 GWEN_DB_NODE *GWEN_DB_GetFirstValue(GWEN_DB_NODE *n);
01086
01103 GWENHYWFAR_API
01104 GWEN_DB_NODE *GWEN_DB_GetNextValue(GWEN_DB_NODE *n);
01105
01122 GWENHYWFAR_API
01123 void *GWEN_DB_Values_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func,
01124 void *user_data);
01125
01129 GWENHYWFAR_API
01130 unsigned int GWEN_DB_Values_Count(const GWEN_DB_NODE *node);
01131
01136 GWENHYWFAR_API
01137 GWEN_DB_NODE_TYPE GWEN_DB_GetValueType(GWEN_DB_NODE *n);
01138
01139 GWENHYWFAR_API
01140 GWEN_DB_NODE_TYPE GWEN_DB_GetValueTypeByPath(GWEN_DB_NODE *n,
01141 const char *p,
01142 unsigned int i);
01143
01148 GWENHYWFAR_API
01149 const char *GWEN_DB_GetCharValueFromNode(const GWEN_DB_NODE *n);
01150
01155 GWENHYWFAR_API
01156 int GWEN_DB_SetCharValueInNode(GWEN_DB_NODE *n, const char *s);
01157
01158 GWENHYWFAR_API
01159 int GWEN_DB_GetIntValueFromNode(const GWEN_DB_NODE *n);
01160
01161 GWENHYWFAR_API
01162 const void *GWEN_DB_GetBinValueFromNode(const GWEN_DB_NODE *n,
01163 unsigned int *size);
01164
01165
01172 GWENHYWFAR_API
01173 int GWEN_DB_IsValue(const GWEN_DB_NODE *n);
01187
01194 GWENHYWFAR_API
01195 void GWEN_DB_Dump(GWEN_DB_NODE *n, FILE *f, int insert);
01200
01201
01202 #ifdef __cplusplus
01203 }
01204 #endif
01205
01206
01207 #endif
01208
01209
01210