db.h

Go to the documentation of this file.
00001 /***************************************************************************
00002  $RCSfile$
00003  -------------------
00004  cvs         : $Id: db.h 943 2005-11-30 10:28:26Z cstim $
00005  begin       : Tue Sep 09 2003
00006  copyright   : (C) 2003 by Martin Preuss
00007  email       : martin@libchipcard.de
00008 
00009  ***************************************************************************
00010  *                                                                         *
00011  *   This library is free software; you can redistribute it and/or         *
00012  *   modify it under the terms of the GNU Lesser General Public            *
00013  *   License as published by the Free Software Foundation; either          *
00014  *   version 2.1 of the License, or (at your option) any later version.    *
00015  *                                                                         *
00016  *   This library is distributed in the hope that it will be useful,       *
00017  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00018  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
00019  *   Lesser General Public License for more details.                       *
00020  *                                                                         *
00021  *   You should have received a copy of the GNU Lesser General Public      *
00022  *   License along with this library; if not, write to the Free Software   *
00023  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston,                 *
00024  *   MA  02111-1307  USA                                                   *
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 
00167 #define GWEN_DB_FLAGS_DOSMODE                0x80000000
00168 
00170 #define GWEN_DB_FLAGS_DEFAULT \
00171   (\
00172   GWEN_DB_FLAGS_QUOTE_VALUES | \
00173   GWEN_DB_FLAGS_WRITE_SUBGROUPS | \
00174   GWEN_DB_FLAGS_DETAILED_GROUPS | \
00175   GWEN_DB_FLAGS_INDEND | \
00176   GWEN_DB_FLAGS_ADD_GROUP_NEWLINES | \
00177   GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \
00178   GWEN_DB_FLAGS_UNESCAPE_CHARVALUES\
00179   )
00180 
00181 
00184 #define GWEN_DB_FLAGS_COMPACT \
00185   (\
00186   GWEN_DB_FLAGS_QUOTE_VALUES | \
00187   GWEN_DB_FLAGS_WRITE_SUBGROUPS | \
00188   GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \
00189   GWEN_DB_FLAGS_UNESCAPE_CHARVALUES\
00190   )
00191 
00195 #define GWEN_DB_FLAGS_HTTP \
00196   (\
00197   GWEN_DB_FLAGS_USE_COLON |\
00198   GWEN_DB_FLAGS_STOP_ON_EMPTY_LINE |\
00199   GWEN_DB_FLAGS_OMIT_TYPES | \
00200   GWEN_DB_FLAGS_DOSMODE \
00201   )
00202 
00209 #define GWEN_DB_NODE_FLAGS_DIRTY                   0x00000001
00210 
00211 #define GWEN_DB_NODE_FLAGS_VOLATILE                0x00000002
00212 
00214 #define GWEN_DB_NODE_FLAGS_INHERIT_HASH_MECHANISM  0x00000004
00215 
00225 typedef union GWEN_DB_NODE GWEN_DB_NODE;
00226 
00230 typedef enum {
00232   GWEN_DB_VALUETYPE_UNKNOWN=0,
00234   GWEN_DB_VALUETYPE_CHAR,
00236   GWEN_DB_VALUETYPE_INT,
00238   GWEN_DB_VALUETYPE_BIN,
00240   GWEN_DB_VALUETYPE_PTR
00241 } GWEN_DB_VALUETYPE;
00242 
00243 
00248 
00255 GWENHYWFAR_API 
00256 GWEN_DB_NODE *GWEN_DB_Group_new(const char *name);
00257 
00263 GWENHYWFAR_API 
00264 void GWEN_DB_Group_free(GWEN_DB_NODE *n);
00265 
00266 
00273 GWENHYWFAR_API 
00274 GWEN_DB_NODE *GWEN_DB_Group_dup(const GWEN_DB_NODE *n);
00275 
00293 GWENHYWFAR_API 
00294 GWEN_DB_NODE *GWEN_DB_GetFirstGroup(GWEN_DB_NODE *n);
00295 
00318 GWENHYWFAR_API 
00319 GWEN_DB_NODE *GWEN_DB_GetNextGroup(GWEN_DB_NODE *n);
00320 
00321 
00333 GWENHYWFAR_API 
00334 GWEN_DB_NODE *GWEN_DB_FindFirstGroup(GWEN_DB_NODE *n, const char *name);
00335 
00354 GWENHYWFAR_API 
00355 GWEN_DB_NODE *GWEN_DB_FindNextGroup(GWEN_DB_NODE *n, const char *name);
00356 
00357 
00368 typedef void *(*GWEN_DB_NODES_CB)(GWEN_DB_NODE *node, void *user_data);
00369 
00386 GWENHYWFAR_API 
00387 void *GWEN_DB_Groups_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func,
00388                              void *user_data);
00389 
00393 GWENHYWFAR_API 
00394 unsigned int GWEN_DB_Groups_Count(const GWEN_DB_NODE *node);
00452 GWENHYWFAR_API 
00453 const char *GWEN_DB_GetCharValue(GWEN_DB_NODE *n,
00454                                  const char *path,
00455                                  int idx,
00456                                  const char *defVal);
00465 GWENHYWFAR_API 
00466 int GWEN_DB_SetCharValue(GWEN_DB_NODE *n,
00467                          GWEN_TYPE_UINT32 flags,
00468                          const char *path,
00469                          const char *val);
00470 
00471 
00482 GWENHYWFAR_API 
00483 int GWEN_DB_AddCharValue(GWEN_DB_NODE *n,
00484                          const char *path,
00485                          const char *val,
00486                          int senseCase,
00487                          int check);
00488 
00489 
00499 GWENHYWFAR_API 
00500 int GWEN_DB_RemoveCharValue(GWEN_DB_NODE *n,
00501                             const char *path,
00502                             const char *val,
00503                             int senseCase);
00504 
00505 
00513 GWENHYWFAR_API 
00514 int GWEN_DB_GetIntValue(GWEN_DB_NODE *n,
00515                         const char *path,
00516                         int idx,
00517                         int defVal);
00518 
00527 GWENHYWFAR_API 
00528 int GWEN_DB_SetIntValue(GWEN_DB_NODE *n,
00529                         GWEN_TYPE_UINT32 flags,
00530                         const char *path,
00531                         int val);
00532 
00533 
00545 GWENHYWFAR_API 
00546 const void *GWEN_DB_GetBinValue(GWEN_DB_NODE *n,
00547                                 const char *path,
00548                                 int idx,
00549                                 const void *defVal,
00550                                 unsigned int defValSize,
00551                                 unsigned int *returnValueSize);
00552 
00563 GWENHYWFAR_API 
00564 int GWEN_DB_SetBinValue(GWEN_DB_NODE *n,
00565                         GWEN_TYPE_UINT32 flags,
00566                         const char *path,
00567                         const void *val,
00568                         unsigned int valSize);
00569 
00570 
00578 GWENHYWFAR_API
00579 void *GWEN_DB_GetPtrValue(GWEN_DB_NODE *n,
00580                           const char *path,
00581                           int idx,
00582                           void *defVal);
00583 
00593 GWENHYWFAR_API
00594 int GWEN_DB_SetPtrValue(GWEN_DB_NODE *n,
00595                         GWEN_TYPE_UINT32 flags,
00596                         const char *path,
00597                         void *val);
00606 
00616 GWENHYWFAR_API 
00617 GWEN_DB_NODE *GWEN_DB_GetGroup(GWEN_DB_NODE *n,
00618                                GWEN_TYPE_UINT32 flags,
00619                                const char *path);
00620 
00624 GWENHYWFAR_API 
00625 const char *GWEN_DB_GroupName(GWEN_DB_NODE *n);
00626 
00632 GWENHYWFAR_API 
00633 void GWEN_DB_GroupRename(GWEN_DB_NODE *n, const char *newname);
00634 
00649 GWENHYWFAR_API 
00650 int GWEN_DB_AddGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node);
00651 
00667 GWENHYWFAR_API 
00668 int GWEN_DB_InsertGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node);
00669 
00679 GWENHYWFAR_API 
00680 int GWEN_DB_AddGroupChildren(GWEN_DB_NODE *n, GWEN_DB_NODE *nn);
00681 
00691 GWENHYWFAR_API 
00692 void GWEN_DB_UnlinkGroup(GWEN_DB_NODE *n);
00693 
00700 GWENHYWFAR_API 
00701 int GWEN_DB_DeleteGroup(GWEN_DB_NODE *n,
00702                         const char *path);
00710 GWENHYWFAR_API 
00711 int GWEN_DB_ClearGroup(GWEN_DB_NODE *n,
00712                        const char *path);
00713 
00720 GWENHYWFAR_API 
00721 int GWEN_DB_IsGroup(const GWEN_DB_NODE *n);
00722 
00734 GWENHYWFAR_API 
00735   GWEN_TYPE_UINT32 GWEN_DB_GetNodeFlags(const GWEN_DB_NODE *n);
00736 
00742 GWENHYWFAR_API 
00743   void GWEN_DB_SetNodeFlags(GWEN_DB_NODE *n,
00744                             GWEN_TYPE_UINT32 flags);
00745 
00754 GWENHYWFAR_API 
00755 void GWEN_DB_ModifyBranchFlagsUp(GWEN_DB_NODE *n,
00756                                  GWEN_TYPE_UINT32 newflags,
00757                                  GWEN_TYPE_UINT32 mask);
00758 
00767 GWENHYWFAR_API 
00768 void GWEN_DB_ModifyBranchFlagsDown(GWEN_DB_NODE *n,
00769                                    GWEN_TYPE_UINT32 newflags,
00770                                    GWEN_TYPE_UINT32 mask);
00771 
00785 
00793 GWENHYWFAR_API 
00794 int GWEN_DB_ReadFromStream(GWEN_DB_NODE *n,
00795                            GWEN_BUFFEREDIO *bio,
00796                            GWEN_TYPE_UINT32 dbflags);
00797 
00805 GWENHYWFAR_API 
00806 int GWEN_DB_ReadFile(GWEN_DB_NODE *n,
00807                      const char *fname,
00808                      GWEN_TYPE_UINT32 dbflags);
00809 
00813 GWENHYWFAR_API
00814 int GWEN_DB_ReadFromString(GWEN_DB_NODE *n,
00815                            const char *str,
00816                            GWEN_TYPE_UINT32 dbflags);
00817 
00825 GWENHYWFAR_API 
00826 int GWEN_DB_WriteToStream(GWEN_DB_NODE *n,
00827                           GWEN_BUFFEREDIO *bio,
00828                           GWEN_TYPE_UINT32 dbflags);
00829 
00838 GWENHYWFAR_API 
00839 int GWEN_DB_WriteFile(GWEN_DB_NODE *n,
00840                       const char *fname,
00841                       GWEN_TYPE_UINT32 dbflags);
00842 
00846 GWENHYWFAR_API 
00847 int GWEN_DB_WriteToBuffer(GWEN_DB_NODE *n,
00848                           GWEN_BUFFER *buf,
00849                           GWEN_TYPE_UINT32 dbflags);
00850 
00851 
00862 GWENHYWFAR_API 
00863 int GWEN_DB_ReadFileAs(GWEN_DB_NODE *n,
00864                        const char *fname,
00865                        const char *type,
00866                        GWEN_DB_NODE *params,
00867                        GWEN_TYPE_UINT32 dbflags);
00868 
00879 GWENHYWFAR_API 
00880 int GWEN_DB_WriteFileAs(GWEN_DB_NODE *n,
00881                         const char *fname,
00882                         const char *type,
00883                         GWEN_DB_NODE *params,
00884                         GWEN_TYPE_UINT32 dbflags);
00897 GWENHYWFAR_API 
00898 GWEN_DB_NODE *GWEN_DB_GetFirstVar(GWEN_DB_NODE *n);
00899 
00900 
00922 GWENHYWFAR_API 
00923 GWEN_DB_NODE *GWEN_DB_GetNextVar(GWEN_DB_NODE *n);
00924 
00929 GWENHYWFAR_API 
00930 const char *GWEN_DB_VariableName(GWEN_DB_NODE *n);
00931 
00932 
00933 GWENHYWFAR_API 
00934 void GWEN_DB_VariableRename(GWEN_DB_NODE *n, const char *newname);
00935 
00952 GWENHYWFAR_API 
00953 void *GWEN_DB_Variables_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func,
00954                                 void *user_data);
00955 
00960 GWENHYWFAR_API 
00961 unsigned int GWEN_DB_Variables_Count(const GWEN_DB_NODE *node);
00962     
00968 GWENHYWFAR_API 
00969 GWEN_DB_VALUETYPE GWEN_DB_GetVariableType(GWEN_DB_NODE *n,
00970                                           const char *p);
00971 
00978 GWENHYWFAR_API 
00979 int GWEN_DB_DeleteVar(GWEN_DB_NODE *n,
00980                       const char *path);
00981 
00988 GWENHYWFAR_API 
00989 int GWEN_DB_VariableExists(GWEN_DB_NODE *n,
00990                            const char *path);
00991 
00999 GWENHYWFAR_API
01000   int GWEN_DB_ValueExists(GWEN_DB_NODE *n,
01001                           const char *path,
01002                           unsigned int idx);
01003 
01010 GWENHYWFAR_API 
01011 int GWEN_DB_IsVariable(const GWEN_DB_NODE *n);
01012 
01013 
01025 GWENHYWFAR_API 
01026 GWEN_DB_NODE *GWEN_DB_FindFirstVar(GWEN_DB_NODE *n, const char *name);
01027 
01046 GWENHYWFAR_API 
01047 GWEN_DB_NODE *GWEN_DB_FindNextVar(GWEN_DB_NODE *n, const char *name);
01048 
01061 GWENHYWFAR_API 
01062 GWEN_DB_NODE *GWEN_DB_GetFirstValue(GWEN_DB_NODE *n);
01063 
01080 GWENHYWFAR_API 
01081 GWEN_DB_NODE *GWEN_DB_GetNextValue(GWEN_DB_NODE *n);
01082 
01099 GWENHYWFAR_API 
01100 void *GWEN_DB_Values_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func,
01101                              void *user_data);
01102 
01106 GWENHYWFAR_API 
01107 unsigned int GWEN_DB_Values_Count(const GWEN_DB_NODE *node);
01108 
01113 GWENHYWFAR_API 
01114 GWEN_DB_VALUETYPE GWEN_DB_GetValueType(GWEN_DB_NODE *n);
01115 
01116 GWENHYWFAR_API
01117 GWEN_DB_VALUETYPE GWEN_DB_GetValueTypeByPath(GWEN_DB_NODE *n,
01118                                              const char *p,
01119                                              unsigned int i);
01120 
01125 GWENHYWFAR_API
01126 const char *GWEN_DB_GetCharValueFromNode(const GWEN_DB_NODE *n);
01127 
01132 GWENHYWFAR_API
01133 int GWEN_DB_SetCharValueInNode(GWEN_DB_NODE *n, const char *s);
01134 
01135 GWENHYWFAR_API
01136 int GWEN_DB_GetIntValueFromNode(const GWEN_DB_NODE *n);
01137 
01138 GWENHYWFAR_API
01139 const void *GWEN_DB_GetBinValueFromNode(const GWEN_DB_NODE *n,
01140                                         unsigned int *size);
01141 
01142 
01149 GWENHYWFAR_API 
01150 int GWEN_DB_IsValue(const GWEN_DB_NODE *n);
01164 
01171 GWENHYWFAR_API 
01172 void GWEN_DB_Dump(GWEN_DB_NODE *n, FILE *f, int insert);
01185 typedef struct GWEN_DB_HASH_MECHANISM GWEN_DB_HASH_MECHANISM;
01186 
01187 typedef int (*GWEN_DB_HASH_INITNODE_FN)(GWEN_DB_HASH_MECHANISM *hm,
01188                                         GWEN_DB_NODE *node,
01189                                         void **hashData);
01190 typedef int (*GWEN_DB_HASH_FININODE_FN)(GWEN_DB_HASH_MECHANISM *hm,
01191                                         GWEN_DB_NODE *node,
01192                                         void **hashData);
01193 typedef int (*GWEN_DB_HASH_ADDNODE_FN)(GWEN_DB_HASH_MECHANISM *hm,
01194                                        GWEN_DB_NODE *parent,
01195                                        GWEN_DB_NODE *node,
01196                                        int appendOrInsert, /* 1=append */
01197                                        void *hashData);
01198 typedef int (*GWEN_DB_HASH_UNLINKNODE_FN)(GWEN_DB_HASH_MECHANISM *hm,
01199                                           GWEN_DB_NODE *parent,
01200                                           GWEN_DB_NODE *node,
01201                                           void *hashData);
01202 typedef GWEN_DB_NODE* (*GWEN_DB_HASH_GETNODE_FN)(GWEN_DB_HASH_MECHANISM *hm,
01203                                                  GWEN_DB_NODE *parent,
01204                                                  const char *name,
01205                                                  int idx,
01206                                                  void *hashData);
01207 
01208 GWENHYWFAR_API 
01209 GWEN_DB_HASH_MECHANISM *GWEN_DB_HashMechanism_new();
01210 
01211 GWENHYWFAR_API 
01212 void GWEN_DB_HashMechanism_Attach(GWEN_DB_HASH_MECHANISM *hm);
01213 
01214 GWENHYWFAR_API 
01215 void GWEN_DB_HashMechanism_free(GWEN_DB_HASH_MECHANISM *hm);
01216 
01217 
01218 GWENHYWFAR_API 
01219 void GWEN_DB_HashMechanism_SetInitNodeFn(GWEN_DB_HASH_MECHANISM *hm,
01220                                          GWEN_DB_HASH_INITNODE_FN f);
01221 
01222 GWENHYWFAR_API 
01223 void GWEN_DB_HashMechanism_SetFiniNodeFn(GWEN_DB_HASH_MECHANISM *hm,
01224                                          GWEN_DB_HASH_FININODE_FN f);
01225 
01226 GWENHYWFAR_API 
01227 void GWEN_DB_HashMechanism_SetAddNodeFn(GWEN_DB_HASH_MECHANISM *hm,
01228                                         GWEN_DB_HASH_ADDNODE_FN f);
01229 
01230 GWENHYWFAR_API 
01231 void GWEN_DB_HashMechanism_SetUnlinkNodeFn(GWEN_DB_HASH_MECHANISM *hm,
01232                                            GWEN_DB_HASH_UNLINKNODE_FN f);
01233 
01234 GWENHYWFAR_API 
01235 void GWEN_DB_HashMechanism_SetGetNodeFn(GWEN_DB_HASH_MECHANISM *hm,
01236                                         GWEN_DB_HASH_GETNODE_FN f);
01237 
01238 
01253 GWENHYWFAR_API 
01254 int GWEN_DB_Group_SetHashMechanism(GWEN_DB_NODE *node,
01255                                    GWEN_DB_HASH_MECHANISM *hm);
01256 
01261 
01262 
01263 #ifdef __cplusplus
01264 }
01265 #endif
01266 
01267 
01268 #endif
01269 
01270 
01271 

Generated on Tue May 1 12:56:30 2007 for gwenhywfar by  doxygen 1.5.1