Main Page | Modules | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

db.h

Go to the documentation of this file.
00001 /***************************************************************************
00002  $RCSfile: db.h,v $
00003  -------------------
00004  cvs         : $Id: db.h,v 1.43 2005/08/22 23:10:45 aquamaniac Exp $
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 
00164 #define GWEN_DB_FLAGS_DEFAULT \
00165   (\
00166   GWEN_DB_FLAGS_QUOTE_VALUES | \
00167   GWEN_DB_FLAGS_WRITE_SUBGROUPS | \
00168   GWEN_DB_FLAGS_DETAILED_GROUPS | \
00169   GWEN_DB_FLAGS_INDEND | \
00170   GWEN_DB_FLAGS_ADD_GROUP_NEWLINES | \
00171   GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \
00172   GWEN_DB_FLAGS_UNESCAPE_CHARVALUES\
00173   )
00174 
00175 
00178 #define GWEN_DB_FLAGS_COMPACT \
00179   (\
00180   GWEN_DB_FLAGS_QUOTE_VALUES | \
00181   GWEN_DB_FLAGS_WRITE_SUBGROUPS | \
00182   GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \
00183   GWEN_DB_FLAGS_UNESCAPE_CHARVALUES\
00184   )
00185 
00189 #define GWEN_DB_FLAGS_HTTP \
00190   (\
00191   GWEN_DB_FLAGS_USE_COLON |\
00192   GWEN_DB_FLAGS_STOP_ON_EMPTY_LINE\
00193   )
00194 
00201 #define GWEN_DB_NODE_FLAGS_DIRTY                   0x00000001
00202 
00203 #define GWEN_DB_NODE_FLAGS_VOLATILE                0x00000002
00204 
00206 #define GWEN_DB_NODE_FLAGS_INHERIT_HASH_MECHANISM  0x00000004
00207 
00217 typedef union GWEN_DB_NODE GWEN_DB_NODE;
00218 
00222 typedef enum {
00224   GWEN_DB_VALUETYPE_UNKNOWN=0,
00226   GWEN_DB_VALUETYPE_CHAR,
00228   GWEN_DB_VALUETYPE_INT,
00230   GWEN_DB_VALUETYPE_BIN,
00232   GWEN_DB_VALUETYPE_PTR
00233 } GWEN_DB_VALUETYPE;
00234 
00235 
00240 
00247 GWENHYWFAR_API 
00248 GWEN_DB_NODE *GWEN_DB_Group_new(const char *name);
00249 
00255 GWENHYWFAR_API 
00256 void GWEN_DB_Group_free(GWEN_DB_NODE *n);
00257 
00258 
00265 GWENHYWFAR_API 
00266 GWEN_DB_NODE *GWEN_DB_Group_dup(const GWEN_DB_NODE *n);
00267 
00285 GWENHYWFAR_API 
00286 GWEN_DB_NODE *GWEN_DB_GetFirstGroup(GWEN_DB_NODE *n);
00287 
00310 GWENHYWFAR_API 
00311 GWEN_DB_NODE *GWEN_DB_GetNextGroup(GWEN_DB_NODE *n);
00312 
00313 
00325 GWENHYWFAR_API 
00326 GWEN_DB_NODE *GWEN_DB_FindFirstGroup(GWEN_DB_NODE *n, const char *name);
00327 
00346 GWENHYWFAR_API 
00347 GWEN_DB_NODE *GWEN_DB_FindNextGroup(GWEN_DB_NODE *n, const char *name);
00348 
00349 
00360 typedef void *(*GWEN_DB_NODES_CB)(GWEN_DB_NODE *node, void *user_data);
00361 
00378 GWENHYWFAR_API 
00379 void *GWEN_DB_Groups_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func,
00380                              void *user_data);
00381 
00385 GWENHYWFAR_API 
00386 unsigned int GWEN_DB_Groups_Count(const GWEN_DB_NODE *node);
00444 GWENHYWFAR_API 
00445 const char *GWEN_DB_GetCharValue(GWEN_DB_NODE *n,
00446                                  const char *path,
00447                                  int idx,
00448                                  const char *defVal);
00457 GWENHYWFAR_API 
00458 int GWEN_DB_SetCharValue(GWEN_DB_NODE *n,
00459                          GWEN_TYPE_UINT32 flags,
00460                          const char *path,
00461                          const char *val);
00462 
00463 
00474 GWENHYWFAR_API 
00475 int GWEN_DB_AddCharValue(GWEN_DB_NODE *n,
00476                          const char *path,
00477                          const char *val,
00478                          int senseCase,
00479                          int check);
00480 
00481 
00491 GWENHYWFAR_API 
00492 int GWEN_DB_RemoveCharValue(GWEN_DB_NODE *n,
00493                             const char *path,
00494                             const char *val,
00495                             int senseCase);
00496 
00497 
00505 GWENHYWFAR_API 
00506 int GWEN_DB_GetIntValue(GWEN_DB_NODE *n,
00507                         const char *path,
00508                         int idx,
00509                         int defVal);
00510 
00519 GWENHYWFAR_API 
00520 int GWEN_DB_SetIntValue(GWEN_DB_NODE *n,
00521                         GWEN_TYPE_UINT32 flags,
00522                         const char *path,
00523                         int val);
00524 
00525 
00537 GWENHYWFAR_API 
00538 const void *GWEN_DB_GetBinValue(GWEN_DB_NODE *n,
00539                                 const char *path,
00540                                 int idx,
00541                                 const void *defVal,
00542                                 unsigned int defValSize,
00543                                 unsigned int *returnValueSize);
00544 
00555 GWENHYWFAR_API 
00556 int GWEN_DB_SetBinValue(GWEN_DB_NODE *n,
00557                         GWEN_TYPE_UINT32 flags,
00558                         const char *path,
00559                         const void *val,
00560                         unsigned int valSize);
00561 
00562 
00570 GWENHYWFAR_API
00571 void *GWEN_DB_GetPtrValue(GWEN_DB_NODE *n,
00572                           const char *path,
00573                           int idx,
00574                           void *defVal);
00575 
00585 GWENHYWFAR_API
00586 int GWEN_DB_SetPtrValue(GWEN_DB_NODE *n,
00587                         GWEN_TYPE_UINT32 flags,
00588                         const char *path,
00589                         void *val);
00598 
00608 GWENHYWFAR_API 
00609 GWEN_DB_NODE *GWEN_DB_GetGroup(GWEN_DB_NODE *n,
00610                                GWEN_TYPE_UINT32 flags,
00611                                const char *path);
00612 
00616 GWENHYWFAR_API 
00617 const char *GWEN_DB_GroupName(GWEN_DB_NODE *n);
00618 
00624 GWENHYWFAR_API 
00625 void GWEN_DB_GroupRename(GWEN_DB_NODE *n, const char *newname);
00626 
00641 GWENHYWFAR_API 
00642 int GWEN_DB_AddGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node);
00643 
00659 GWENHYWFAR_API 
00660 int GWEN_DB_InsertGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node);
00661 
00671 GWENHYWFAR_API 
00672 int GWEN_DB_AddGroupChildren(GWEN_DB_NODE *n, GWEN_DB_NODE *nn);
00673 
00683 GWENHYWFAR_API 
00684 void GWEN_DB_UnlinkGroup(GWEN_DB_NODE *n);
00685 
00692 GWENHYWFAR_API 
00693 int GWEN_DB_DeleteGroup(GWEN_DB_NODE *n,
00694                         const char *path);
00702 GWENHYWFAR_API 
00703 int GWEN_DB_ClearGroup(GWEN_DB_NODE *n,
00704                        const char *path);
00705 
00712 GWENHYWFAR_API 
00713 int GWEN_DB_IsGroup(const GWEN_DB_NODE *n);
00714 
00726 GWENHYWFAR_API 
00727   GWEN_TYPE_UINT32 GWEN_DB_GetNodeFlags(const GWEN_DB_NODE *n);
00728 
00734 GWENHYWFAR_API 
00735   void GWEN_DB_SetNodeFlags(GWEN_DB_NODE *n,
00736                             GWEN_TYPE_UINT32 flags);
00737 
00746 void GWEN_DB_ModifyBranchFlagsUp(GWEN_DB_NODE *n,
00747                                  GWEN_TYPE_UINT32 newflags,
00748                                  GWEN_TYPE_UINT32 mask);
00749 
00758 void GWEN_DB_ModifyBranchFlagsDown(GWEN_DB_NODE *n,
00759                                    GWEN_TYPE_UINT32 newflags,
00760                                    GWEN_TYPE_UINT32 mask);
00761 
00775 
00783 GWENHYWFAR_API 
00784 int GWEN_DB_ReadFromStream(GWEN_DB_NODE *n,
00785                            GWEN_BUFFEREDIO *bio,
00786                            GWEN_TYPE_UINT32 dbflags);
00787 
00795 GWENHYWFAR_API 
00796 int GWEN_DB_ReadFile(GWEN_DB_NODE *n,
00797                      const char *fname,
00798                      GWEN_TYPE_UINT32 dbflags);
00799 
00807 GWENHYWFAR_API 
00808 int GWEN_DB_WriteToStream(GWEN_DB_NODE *n,
00809                           GWEN_BUFFEREDIO *bio,
00810                           GWEN_TYPE_UINT32 dbflags);
00811 
00820 GWENHYWFAR_API 
00821 int GWEN_DB_WriteFile(GWEN_DB_NODE *n,
00822                       const char *fname,
00823                       GWEN_TYPE_UINT32 dbflags);
00824 
00835 GWENHYWFAR_API 
00836 int GWEN_DB_ReadFileAs(GWEN_DB_NODE *n,
00837                        const char *fname,
00838                        const char *type,
00839                        GWEN_DB_NODE *params,
00840                        GWEN_TYPE_UINT32 dbflags);
00841 
00852 GWENHYWFAR_API 
00853 int GWEN_DB_WriteFileAs(GWEN_DB_NODE *n,
00854                         const char *fname,
00855                         const char *type,
00856                         GWEN_DB_NODE *params,
00857                         GWEN_TYPE_UINT32 dbflags);
00870 GWENHYWFAR_API 
00871 GWEN_DB_NODE *GWEN_DB_GetFirstVar(GWEN_DB_NODE *n);
00872 
00873 
00895 GWENHYWFAR_API 
00896 GWEN_DB_NODE *GWEN_DB_GetNextVar(GWEN_DB_NODE *n);
00897 
00902 GWENHYWFAR_API 
00903 const char *GWEN_DB_VariableName(GWEN_DB_NODE *n);
00904 
00905 
00906 GWENHYWFAR_API 
00907 void GWEN_DB_VariableRename(GWEN_DB_NODE *n, const char *newname);
00908 
00925 GWENHYWFAR_API 
00926 void *GWEN_DB_Variables_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func,
00927                                 void *user_data);
00928 
00933 GWENHYWFAR_API 
00934 unsigned int GWEN_DB_Variables_Count(const GWEN_DB_NODE *node);
00935     
00941 GWENHYWFAR_API 
00942 GWEN_DB_VALUETYPE GWEN_DB_GetVariableType(GWEN_DB_NODE *n,
00943                                           const char *p);
00944 
00951 GWENHYWFAR_API 
00952 int GWEN_DB_DeleteVar(GWEN_DB_NODE *n,
00953                       const char *path);
00954 
00961 GWENHYWFAR_API 
00962 int GWEN_DB_VariableExists(GWEN_DB_NODE *n,
00963                            const char *path);
00964 
00972 GWENHYWFAR_API
00973   int GWEN_DB_ValueExists(GWEN_DB_NODE *n,
00974                           const char *path,
00975                           unsigned int idx);
00976 
00983 GWENHYWFAR_API 
00984 int GWEN_DB_IsVariable(const GWEN_DB_NODE *n);
00997 GWENHYWFAR_API 
00998 GWEN_DB_NODE *GWEN_DB_GetFirstValue(GWEN_DB_NODE *n);
00999 
01016 GWENHYWFAR_API 
01017 GWEN_DB_NODE *GWEN_DB_GetNextValue(GWEN_DB_NODE *n);
01018 
01035 GWENHYWFAR_API 
01036 void *GWEN_DB_Values_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func,
01037                              void *user_data);
01038 
01042 GWENHYWFAR_API 
01043 unsigned int GWEN_DB_Values_Count(const GWEN_DB_NODE *node);
01044 
01049 GWENHYWFAR_API 
01050 GWEN_DB_VALUETYPE GWEN_DB_GetValueType(GWEN_DB_NODE *n);
01051 
01052 GWENHYWFAR_API
01053 GWEN_DB_VALUETYPE GWEN_DB_GetValueTypeByPath(GWEN_DB_NODE *n,
01054                                              const char *p,
01055                                              unsigned int i);
01056 
01061 GWENHYWFAR_API
01062 const char *GWEN_DB_GetCharValueFromNode(const GWEN_DB_NODE *n);
01063 
01068 GWENHYWFAR_API
01069 int GWEN_DB_SetCharValueInNode(GWEN_DB_NODE *n, const char *s);
01070 
01071 GWENHYWFAR_API
01072 int GWEN_DB_GetIntValueFromNode(const GWEN_DB_NODE *n);
01073 
01074 GWENHYWFAR_API
01075 const void *GWEN_DB_GetBinValueFromNode(const GWEN_DB_NODE *n,
01076                                         unsigned int *size);
01077 
01078 
01085 GWENHYWFAR_API 
01086 int GWEN_DB_IsValue(const GWEN_DB_NODE *n);
01100 
01107 GWENHYWFAR_API 
01108 void GWEN_DB_Dump(GWEN_DB_NODE *n, FILE *f, int insert);
01121 typedef struct GWEN_DB_HASH_MECHANISM GWEN_DB_HASH_MECHANISM;
01122 
01123 typedef int (*GWEN_DB_HASH_INITNODE_FN)(GWEN_DB_HASH_MECHANISM *hm,
01124                                         GWEN_DB_NODE *node,
01125                                         void **hashData);
01126 typedef int (*GWEN_DB_HASH_FININODE_FN)(GWEN_DB_HASH_MECHANISM *hm,
01127                                         GWEN_DB_NODE *node,
01128                                         void **hashData);
01129 typedef int (*GWEN_DB_HASH_ADDNODE_FN)(GWEN_DB_HASH_MECHANISM *hm,
01130                                        GWEN_DB_NODE *parent,
01131                                        GWEN_DB_NODE *node,
01132                                        int appendOrInsert, /* 1=append */
01133                                        void *hashData);
01134 typedef int (*GWEN_DB_HASH_UNLINKNODE_FN)(GWEN_DB_HASH_MECHANISM *hm,
01135                                           GWEN_DB_NODE *parent,
01136                                           GWEN_DB_NODE *node,
01137                                           void *hashData);
01138 typedef GWEN_DB_NODE* (*GWEN_DB_HASH_GETNODE_FN)(GWEN_DB_HASH_MECHANISM *hm,
01139                                                  GWEN_DB_NODE *parent,
01140                                                  const char *name,
01141                                                  int idx,
01142                                                  void *hashData);
01143 
01144 GWENHYWFAR_API 
01145 GWEN_DB_HASH_MECHANISM *GWEN_DB_HashMechanism_new();
01146 
01147 GWENHYWFAR_API 
01148 void GWEN_DB_HashMechanism_Attach(GWEN_DB_HASH_MECHANISM *hm);
01149 
01150 GWENHYWFAR_API 
01151 void GWEN_DB_HashMechanism_free(GWEN_DB_HASH_MECHANISM *hm);
01152 
01153 
01154 GWENHYWFAR_API 
01155 void GWEN_DB_HashMechanism_SetInitNodeFn(GWEN_DB_HASH_MECHANISM *hm,
01156                                          GWEN_DB_HASH_INITNODE_FN f);
01157 
01158 GWENHYWFAR_API 
01159 void GWEN_DB_HashMechanism_SetFiniNodeFn(GWEN_DB_HASH_MECHANISM *hm,
01160                                          GWEN_DB_HASH_FININODE_FN f);
01161 
01162 GWENHYWFAR_API 
01163 void GWEN_DB_HashMechanism_SetAddNodeFn(GWEN_DB_HASH_MECHANISM *hm,
01164                                         GWEN_DB_HASH_ADDNODE_FN f);
01165 
01166 GWENHYWFAR_API 
01167 void GWEN_DB_HashMechanism_SetUnlinkNodeFn(GWEN_DB_HASH_MECHANISM *hm,
01168                                            GWEN_DB_HASH_UNLINKNODE_FN f);
01169 
01170 GWENHYWFAR_API 
01171 void GWEN_DB_HashMechanism_SetGetNodeFn(GWEN_DB_HASH_MECHANISM *hm,
01172                                         GWEN_DB_HASH_GETNODE_FN f);
01173 
01174 
01189 GWENHYWFAR_API 
01190 int GWEN_DB_Group_SetHashMechanism(GWEN_DB_NODE *node,
01191                                    GWEN_DB_HASH_MECHANISM *hm);
01192 
01197 
01198 
01199 #ifdef __cplusplus
01200 }
01201 #endif
01202 
01203 
01204 #endif
01205 
01206 
01207 

Generated on Wed Oct 5 15:12:37 2005 for gwenhywfar by  doxygen 1.4.4