Git init
[pkgs/e/elektra.git] / src / include / kdb.h.in
1 /***************************************************************************
2                 kdb.h  -  Exported methods of the Library
3                              -------------------
4     begin                : Mon Dec 29 2003
5     copyright            : (C) 2003 by Avi Alkalay
6     copyright            : (C) 2008 by Markus Raab
7     email                : avi@unix.sh, elektra@markus-raab.org
8  ***************************************************************************/
9
10 /***************************************************************************
11  *                                                                         *
12  *   This program is free software; you can redistribute it and/or modify  *
13  *   it under the terms of the BSD License (revised).                      *
14  *                                                                         *
15  ***************************************************************************/
16
17 #ifndef KDB_H
18 #define KDB_H
19
20 #include "kdbos.h"
21
22 #define KDB_VERSION @KDB_VERSION@
23 #define KDB_VERSION_MAJOR @KDB_VERSION_MAJOR@
24 #define KDB_VERSION_MINOR @KDB_VERSION_MINOR@
25 #define KDB_VERSION_MICRO @KDB_VERSION_MICRO@
26
27 #define KS_END ((Key*)0)
28
29 enum {
30         KEY_TYPE_UNDEFINED=0,
31         KEY_TYPE_BINARY=20,
32         KEY_TYPE_STRING=40,
33         KEY_TYPE_MAX=256
34 };
35
36 enum {
37         KEY_END=0,
38         KEY_NAME=1,
39         KEY_VALUE=1<<1,
40         KEY_OWNER=1<<2,
41         KEY_COMMENT=1<<3,
42         KEY_TYPE=1<<4,
43         KEY_UID=1<<5,
44         KEY_GID=1<<6,
45         KEY_MODE=1<<7,
46         KEY_ATIME=1<<8,
47         KEY_MTIME=1<<9,
48         KEY_CTIME=1<<10,
49         KEY_SIZE=1<<11,
50         KEY_REMOVE=1<<12,
51         KEY_STAT=1<<13,
52         KEY_DIR=1<<14
53 };
54
55 enum {
56         KDB_O_NONE=0,
57         KDB_O_DEL=1,
58         KDB_O_POP=1<<1,
59         KDB_O_NODIR=1<<2,
60         KDB_O_DIRONLY=1<<3,
61         KDB_O_NOSTAT=1<<4,
62         KDB_O_STATONLY=1<<5,
63         KDB_O_NOREMOVE=1<<6,
64         KDB_O_REMOVEONLY=1<<7,
65         KDB_O_INACTIVE=1<<8,
66         KDB_O_SYNC=1<<9,
67         KDB_O_SORT=1<<10,
68         KDB_O_NORECURSIVE=1<<11,
69         KDB_O_NOCASE=1<<12,
70         KDB_O_WITHOWNER=1<<13,
71         KDB_O_NOALL=1<<14
72 };
73
74
75 #ifdef __cplusplus
76 namespace ckdb {
77 extern "C" {
78 #endif
79
80
81 typedef struct _KDB     KDB;
82 typedef struct _Key     Key;
83 typedef struct _KeySet  KeySet;
84
85
86 /**************************************
87  *
88  * KDB methods
89  *
90  **************************************/
91
92 KDB * kdbOpen(void);
93 int kdbClose(KDB *handle);
94
95 ssize_t kdbGet(KDB *handle, KeySet *returned,
96         Key * parentKey, option_t options);
97 ssize_t kdbSet(KDB *handle, KeySet *returned,
98         Key * parentKey, option_t options);
99
100 ssize_t kdbGetByName(KDB *handle, KeySet *returned,
101         const char *parentName, option_t options);
102
103 int kdbGetKey(KDB *handle, Key *key);
104 int kdbSetKey(KDB *handle, const Key *key);
105
106 int kdbGetString(KDB *handle, const char *keyname, char *returned,
107         size_t maxSize);
108 int kdbSetString(KDB *handle, const char *keyname, const char *value);
109 int kdbRemove(KDB *handle, const char *keyname);
110
111
112 /**************************************
113  *
114  * Key methods
115  *
116  **************************************/
117
118 /* Basic Methods */
119 Key *keyNew(const char *keyname, ...);
120 Key *keyVNew(const char *keyname, va_list ap);
121
122 Key *keyDup(const Key *source);
123 int keyCopy(Key *dest, const Key *source);
124
125 int keyDel(Key *key);
126
127 ssize_t keyIncRef(Key *key);
128 ssize_t keyDecRef(Key *key);
129 ssize_t keyGetRef(const Key *key);
130
131 /* Meta Info */
132 int keyStat(Key *key);
133 int keyRemove(Key *key);
134
135 uid_t keyGetUID(const Key *key);
136 int keySetUID(Key *key, uid_t uid);
137
138 gid_t keyGetGID(const Key *key);
139 int keySetGID(Key *key, gid_t gid);
140
141 int keySetDir(Key *key);
142 mode_t keyGetMode(const Key *key);
143 int keySetMode(Key *key, mode_t mode);
144
145 type_t keyGetType(const Key *key);
146 int keySetType(Key *key, type_t type);
147
148 time_t keyGetATime(const Key *key);
149 int keySetATime(Key *key, time_t atime);
150
151 time_t keyGetMTime(const Key *key);
152 int keySetMTime(Key *key, time_t mtime);
153
154 time_t keyGetCTime(const Key *key);
155 int keySetCTime(Key *key, time_t ctime);
156
157 /* Methods for Making Tests */
158 int keyNeedStat(const Key *key);
159 int keyNeedSync(const Key *key);
160 int keyNeedRemove(const Key *key);
161
162 int keyIsSystem(const Key *key);
163 int keyIsUser(const Key *key);
164 int keyIsMemory(const Key *key);
165
166 int keyIsBelow(const Key *key, const Key *check);
167 int keyIsDirectBelow(const Key *key, const Key *check);
168
169 int keyIsInactive(const Key *key);
170
171 int keyIsDir(const Key *key);
172 int keyIsBinary(const Key *key);
173 int keyIsString(const Key *key);
174
175 /* Name Manipulation Methods */
176 const char *keyName(const Key *key);
177 const void *takeout_keyValue(Key *key);
178 ssize_t keyGetNameSize(const Key *key);
179 ssize_t keyGetName(const Key *key, char *returnedName, size_t maxSize);
180 ssize_t keySetName(Key *key, const char *newname);
181
182 ssize_t keyGetFullNameSize(const Key *key);
183 ssize_t keyGetFullName(const Key *key, char *returnedName, size_t maxSize);
184
185 const char *keyBaseName(const Key *key);
186 ssize_t keyGetBaseNameSize(const Key *key);
187 ssize_t keyGetBaseName(const Key *key, char *returned, size_t maxSize);
188 ssize_t keyAddBaseName(Key *key,const char *baseName);
189 ssize_t keySetBaseName(Key *key,const char *baseName);
190
191 const char *keyOwner(const Key *key);
192 ssize_t keyGetOwnerSize(const Key *key);
193 ssize_t keyGetOwner(const Key *key, char *returned, size_t maxSize);
194 ssize_t keySetOwner(Key *key, const char *owner);
195
196 /* Value Manipulation Methods */
197 const void *keyValue(const Key *key);
198 ssize_t keyGetValueSize(const Key *key);
199
200 ssize_t keyGetString(const Key *key, char *returnedString, size_t maxSize);
201 ssize_t keySetString(Key *key, const char *newString);
202
203 ssize_t keyGetBinary(const Key *key, void *returnedBinary, size_t maxSize);
204 ssize_t keySetBinary(Key *key, const void *newBinary, size_t dataSize);
205
206 const char *keyComment(const Key *key);
207 ssize_t keyGetCommentSize(const Key *key);
208 ssize_t keyGetComment(const Key *key, char *returnedDesc, size_t maxSize);
209 ssize_t keySetComment(Key *key, const char *newDesc);
210
211
212
213 /**************************************
214  *
215  * KeySet methods
216  *
217  **************************************/
218
219 KeySet *ksNew(size_t alloc, ...);
220 KeySet *ksVNew(size_t alloc, va_list ap);
221
222 KeySet *ksDup(const KeySet * source);
223 int ksCopy(KeySet *dest, const KeySet *source);
224
225 int ksDel(KeySet *ks);
226
227 void ksSort(KeySet *ks);
228
229 ssize_t ksGetSize(const KeySet *ks);
230
231 ssize_t ksAppendKey(KeySet *ks, Key *toAppend);
232 ssize_t ksAppend(KeySet *ks, const KeySet *toAppend);
233
234 Key *ksPop(KeySet *ks);
235
236 int ksRewind(KeySet *ks);
237 Key *ksNext(KeySet *ks);
238 Key *ksCurrent(const KeySet *ks);
239
240 Key *ksHead(const KeySet *ks);
241 Key *ksTail(const KeySet *ks);
242
243 cursor_t ksGetCursor(const KeySet *ks);
244 int ksSetCursor(KeySet *ks, cursor_t cursor);
245
246 Key *ksLookup(KeySet *ks, Key *k, option_t options);
247 Key *ksLookupByName(KeySet *ks, const char *name, option_t options);
248
249 #ifdef __cplusplus
250 }
251 }
252 #endif
253
254
255 #endif /* KDB_H */