gwenhywfar  4.3.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);
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