gwenhywfar 4.0.3

db.h

Go to the documentation of this file.
00001 /***************************************************************************
00002  begin       : Tue Sep 09 2003
00003  copyright   : (C) 2003-2010 by Martin Preuss
00004  email       : martin@libchipcard.de
00005 
00006  ***************************************************************************
00007  *                                                                         *
00008  *   This library is free software; you can redistribute it and/or         *
00009  *   modify it under the terms of the GNU Lesser General Public            *
00010  *   License as published by the Free Software Foundation; either          *
00011  *   version 2.1 of the License, or (at your option) any later version.    *
00012  *                                                                         *
00013  *   This library is distributed in the hope that it will be useful,       *
00014  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00015  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
00016  *   Lesser General Public License for more details.                       *
00017  *                                                                         *
00018  *   You should have received a copy of the GNU Lesser General Public      *
00019  *   License along with this library; if not, write to the Free Software   *
00020  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston,                 *
00021  *   MA  02111-1307  USA                                                   *
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);
00460 GWENHYWFAR_API 
00461 const char *GWEN_DB_GetCharValue(GWEN_DB_NODE *n,
00462                                  const char *path,
00463                                  int idx,
00464                                  const char *defVal);
00473 GWENHYWFAR_API 
00474 int GWEN_DB_SetCharValue(GWEN_DB_NODE *n,
00475                          uint32_t flags,
00476                          const char *path,
00477                          const char *val);
00478 
00479 
00490 GWENHYWFAR_API 
00491 int GWEN_DB_AddCharValue(GWEN_DB_NODE *n,
00492                          const char *path,
00493                          const char *val,
00494                          int senseCase,
00495                          int check);
00496 
00497 
00507 GWENHYWFAR_API 
00508 int GWEN_DB_RemoveCharValue(GWEN_DB_NODE *n,
00509                             const char *path,
00510                             const char *val,
00511                             int senseCase);
00512 
00513 
00521 GWENHYWFAR_API 
00522 int GWEN_DB_GetIntValue(GWEN_DB_NODE *n,
00523                         const char *path,
00524                         int idx,
00525                         int defVal);
00526 
00535 GWENHYWFAR_API 
00536 int GWEN_DB_SetIntValue(GWEN_DB_NODE *n,
00537                         uint32_t flags,
00538                         const char *path,
00539                         int val);
00540 
00541 
00553 GWENHYWFAR_API 
00554 const void *GWEN_DB_GetBinValue(GWEN_DB_NODE *n,
00555                                 const char *path,
00556                                 int idx,
00557                                 const void *defVal,
00558                                 unsigned int defValSize,
00559                                 unsigned int *returnValueSize);
00560 
00571 GWENHYWFAR_API 
00572 int GWEN_DB_SetBinValue(GWEN_DB_NODE *n,
00573                         uint32_t flags,
00574                         const char *path,
00575                         const void *val,
00576                         unsigned int valSize);
00577 
00578 
00586 GWENHYWFAR_API
00587 void *GWEN_DB_GetPtrValue(GWEN_DB_NODE *n,
00588                           const char *path,
00589                           int idx,
00590                           void *defVal);
00591 
00601 GWENHYWFAR_API
00602 int GWEN_DB_SetPtrValue(GWEN_DB_NODE *n,
00603                         uint32_t flags,
00604                         const char *path,
00605                         void *val);
00614 
00624 GWENHYWFAR_API 
00625 GWEN_DB_NODE *GWEN_DB_GetGroup(GWEN_DB_NODE *n,
00626                                uint32_t flags,
00627                                const char *path);
00628 
00632 GWENHYWFAR_API 
00633 const char *GWEN_DB_GroupName(GWEN_DB_NODE *n);
00634 
00640 GWENHYWFAR_API 
00641 void GWEN_DB_GroupRename(GWEN_DB_NODE *n, const char *newname);
00642 
00657 GWENHYWFAR_API 
00658 int GWEN_DB_AddGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node);
00659 
00675 GWENHYWFAR_API 
00676 int GWEN_DB_InsertGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node);
00677 
00687 GWENHYWFAR_API 
00688 int GWEN_DB_AddGroupChildren(GWEN_DB_NODE *n, GWEN_DB_NODE *nn);
00689 
00699 GWENHYWFAR_API 
00700 void GWEN_DB_UnlinkGroup(GWEN_DB_NODE *n);
00701 
00708 GWENHYWFAR_API 
00709 int GWEN_DB_DeleteGroup(GWEN_DB_NODE *n,
00710                         const char *path);
00718 GWENHYWFAR_API 
00719 int GWEN_DB_ClearGroup(GWEN_DB_NODE *n,
00720                        const char *path);
00721 
00728 GWENHYWFAR_API 
00729 int GWEN_DB_IsGroup(const GWEN_DB_NODE *n);
00730 
00742 GWENHYWFAR_API 
00743   uint32_t GWEN_DB_GetNodeFlags(const GWEN_DB_NODE *n);
00744 
00750 GWENHYWFAR_API 
00751   void GWEN_DB_SetNodeFlags(GWEN_DB_NODE *n,
00752                             uint32_t flags);
00753 
00762 GWENHYWFAR_API 
00763 void GWEN_DB_ModifyBranchFlagsUp(GWEN_DB_NODE *n,
00764                                  uint32_t newflags,
00765                                  uint32_t mask);
00766 
00775 GWENHYWFAR_API 
00776 void GWEN_DB_ModifyBranchFlagsDown(GWEN_DB_NODE *n,
00777                                    uint32_t newflags,
00778                                    uint32_t mask);
00779 
00793 
00794 GWENHYWFAR_API
00795 int GWEN_DB_ReadFromFastBuffer(GWEN_DB_NODE *n,
00796                                GWEN_FAST_BUFFER *fb,
00797                                uint32_t dbflags);
00798 
00799 GWENHYWFAR_API
00800 int GWEN_DB_ReadFromIo(GWEN_DB_NODE *n, GWEN_SYNCIO *sio, uint32_t dbflags);
00801 
00802 GWENHYWFAR_API
00803 int GWEN_DB_ReadFile(GWEN_DB_NODE *n,
00804                      const char *fname,
00805                      uint32_t dbflags);
00806 
00807 GWENHYWFAR_API
00808 int GWEN_DB_ReadFromString(GWEN_DB_NODE *n,
00809                            const char *str,
00810                            int len,
00811                            uint32_t dbflags);
00812 
00813 GWENHYWFAR_API
00814 int GWEN_DB_WriteToFastBuffer(GWEN_DB_NODE *node,
00815                               GWEN_FAST_BUFFER *fb,
00816                               uint32_t dbflags);
00817 
00818 GWENHYWFAR_API 
00819 int GWEN_DB_WriteToIo(GWEN_DB_NODE *node,
00820                       GWEN_SYNCIO *sio,
00821                       uint32_t dbflags);
00822 
00823 
00824 GWENHYWFAR_API 
00825 int GWEN_DB_WriteFile(GWEN_DB_NODE *n,
00826                       const char *fname,
00827                       uint32_t dbflags);
00828 
00829 GWENHYWFAR_API 
00830 int GWEN_DB_WriteToBuffer(GWEN_DB_NODE *n,
00831                           GWEN_BUFFER *buf,
00832                           uint32_t dbflags);
00833 
00844 GWENHYWFAR_API 
00845 int GWEN_DB_ReadFileAs(GWEN_DB_NODE *n,
00846                        const char *fname,
00847                        const char *type,
00848                        GWEN_DB_NODE *params,
00849                        uint32_t dbflags);
00850 
00861 GWENHYWFAR_API 
00862 int GWEN_DB_WriteFileAs(GWEN_DB_NODE *n,
00863                         const char *fname,
00864                         const char *type,
00865                         GWEN_DB_NODE *params,
00866                         uint32_t dbflags);
00867 
00868 
00881 GWENHYWFAR_API 
00882 GWEN_DB_NODE *GWEN_DB_GetFirstVar(GWEN_DB_NODE *n);
00883 
00884 
00906 GWENHYWFAR_API 
00907 GWEN_DB_NODE *GWEN_DB_GetNextVar(GWEN_DB_NODE *n);
00908 
00913 GWENHYWFAR_API 
00914 const char *GWEN_DB_VariableName(GWEN_DB_NODE *n);
00915 
00916 
00917 GWENHYWFAR_API 
00918 void GWEN_DB_VariableRename(GWEN_DB_NODE *n, const char *newname);
00919 
00936 GWENHYWFAR_API 
00937 void *GWEN_DB_Variables_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func,
00938                                 void *user_data);
00939 
00944 GWENHYWFAR_API 
00945 unsigned int GWEN_DB_Variables_Count(const GWEN_DB_NODE *node);
00946     
00952 GWENHYWFAR_API 
00953 GWEN_DB_NODE_TYPE GWEN_DB_GetVariableType(GWEN_DB_NODE *n,
00954                                           const char *p);
00955 
00962 GWENHYWFAR_API 
00963 int GWEN_DB_DeleteVar(GWEN_DB_NODE *n,
00964                       const char *path);
00965 
00972 GWENHYWFAR_API 
00973 int GWEN_DB_VariableExists(GWEN_DB_NODE *n,
00974                            const char *path);
00975 
00983 GWENHYWFAR_API
00984   int GWEN_DB_ValueExists(GWEN_DB_NODE *n,
00985                           const char *path,
00986                           unsigned int idx);
00987 
00994 GWENHYWFAR_API 
00995 int GWEN_DB_IsVariable(const GWEN_DB_NODE *n);
00996 
00997 
01009 GWENHYWFAR_API 
01010 GWEN_DB_NODE *GWEN_DB_FindFirstVar(GWEN_DB_NODE *n, const char *name);
01011 
01030 GWENHYWFAR_API 
01031 GWEN_DB_NODE *GWEN_DB_FindNextVar(GWEN_DB_NODE *n, const char *name);
01032 
01045 GWENHYWFAR_API 
01046 GWEN_DB_NODE *GWEN_DB_GetFirstValue(GWEN_DB_NODE *n);
01047 
01064 GWENHYWFAR_API 
01065 GWEN_DB_NODE *GWEN_DB_GetNextValue(GWEN_DB_NODE *n);
01066 
01083 GWENHYWFAR_API 
01084 void *GWEN_DB_Values_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func,
01085                              void *user_data);
01086 
01090 GWENHYWFAR_API 
01091 unsigned int GWEN_DB_Values_Count(const GWEN_DB_NODE *node);
01092 
01097 GWENHYWFAR_API 
01098 GWEN_DB_NODE_TYPE GWEN_DB_GetValueType(GWEN_DB_NODE *n);
01099 
01100 GWENHYWFAR_API
01101 GWEN_DB_NODE_TYPE GWEN_DB_GetValueTypeByPath(GWEN_DB_NODE *n,
01102                                              const char *p,
01103                                              unsigned int i);
01104 
01109 GWENHYWFAR_API
01110 const char *GWEN_DB_GetCharValueFromNode(const GWEN_DB_NODE *n);
01111 
01116 GWENHYWFAR_API
01117 int GWEN_DB_SetCharValueInNode(GWEN_DB_NODE *n, const char *s);
01118 
01119 GWENHYWFAR_API
01120 int GWEN_DB_GetIntValueFromNode(const GWEN_DB_NODE *n);
01121 
01122 GWENHYWFAR_API
01123 const void *GWEN_DB_GetBinValueFromNode(const GWEN_DB_NODE *n,
01124                                         unsigned int *size);
01125 
01126 
01133 GWENHYWFAR_API 
01134 int GWEN_DB_IsValue(const GWEN_DB_NODE *n);
01148 
01154 GWENHYWFAR_API 
01155 void GWEN_DB_Dump(GWEN_DB_NODE *n, int insert);
01160 
01161 
01162 #ifdef __cplusplus
01163 }
01164 #endif
01165 
01166 
01167 #endif
01168 
01169 
01170