]> gitweb.factorcode.org Git - factor.git/blob - extra/gdbm/ffi/ffi.factor
gdbm: add low-level interface
[factor.git] / extra / gdbm / ffi / ffi.factor
1 ! Copyright (C) 2010 Dmitry Shubin.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien alien.c-types alien.libraries alien.syntax classes.struct
4 combinators system ;
5 IN: gdbm.ffi
6
7 << "libgdbm" os {
8     { [ unix?   ] [ "libgdbm.so"    ] }
9     { [ winnt?  ] [ "gdbm.dll"      ] }
10     { [ macosx? ] [ "libgdbm.dylib" ] }
11 } cond cdecl add-library >>
12
13 LIBRARY: libgdbm
14
15 C-GLOBAL: c-string gdbm_version
16
17 CONSTANT: GDBM_READER  0
18 CONSTANT: GDBM_WRITER  1
19 CONSTANT: GDBM_WRCREAT 2
20 CONSTANT: GDBM_NEWDB   3
21 CONSTANT: GDBM_FAST   HEX: 10
22 CONSTANT: GDBM_SYNC   HEX: 20
23 CONSTANT: GDBM_NOLOCK HEX: 40
24
25 CONSTANT: GDBM_INSERT  0
26 CONSTANT: GDBM_REPLACE 1
27
28 CONSTANT: GDBM_CACHESIZE    1
29 CONSTANT: GDBM_FASTMODE     2
30 CONSTANT: GDBM_SYNCMODE     3
31 CONSTANT: GDBM_CENTFREE     4
32 CONSTANT: GDBM_COALESCEBLKS 5
33
34 STRUCT: datum { dptr char* } { dsize int } ;
35
36 C-TYPE: _GDBM_FILE
37 TYPEDEF: _GDBM_FILE* GDBM_FILE
38
39 CALLBACK: void fatal_func_cb ;
40 FUNCTION: GDBM_FILE gdbm_open ( c-string name, int block_size, int read_write, int mode, fatal_func_cb fatal_func ) ;
41 FUNCTION: void gdbm_close ( GDBM_FILE dbf ) ;
42 FUNCTION: int gdbm_store ( GDBM_FILE dbf, datum key, datum content, int flag ) ;
43 FUNCTION: datum gdbm_fetch ( GDBM_FILE dbf, datum key ) ;
44 FUNCTION: int gdbm_delete ( GDBM_FILE dbf, datum key ) ;
45 FUNCTION: datum gdbm_firstkey ( GDBM_FILE dbf ) ;
46 FUNCTION: datum gdbm_nextkey ( GDBM_FILE dbf, datum key ) ;
47 FUNCTION: int gdbm_reorganize ( GDBM_FILE dbf ) ;
48 FUNCTION: void gdbm_sync ( GDBM_FILE dbf ) ;
49 FUNCTION: int gdbm_exists ( GDBM_FILE dbf, datum key ) ;
50 FUNCTION: int gdbm_setopt ( GDBM_FILE dbf, int option, int* value, int size ) ;
51 FUNCTION: int gdbm_fdesc ( GDBM_FILE dbf ) ;
52
53 CONSTANT: GDBM_NO_ERROR               0
54 CONSTANT: GDBM_MALLOC_ERROR           1
55 CONSTANT: GDBM_BLOCK_SIZE_ERROR       2
56 CONSTANT: GDBM_FILE_OPEN_ERROR        3
57 CONSTANT: GDBM_FILE_WRITE_ERROR       4
58 CONSTANT: GDBM_FILE_SEEK_ERROR        5
59 CONSTANT: GDBM_FILE_READ_ERROR        6
60 CONSTANT: GDBM_BAD_MAGIC_NUMBER       7
61 CONSTANT: GDBM_EMPTY_DATABASE         8
62 CONSTANT: GDBM_CANT_BE_READER         9
63 CONSTANT: GDBM_CANT_BE_WRITER         10
64 CONSTANT: GDBM_READER_CANT_DELETE     11
65 CONSTANT: GDBM_READER_CANT_STORE      12
66 CONSTANT: GDBM_READER_CANT_REORGANIZE 13
67 CONSTANT: GDBM_UNKNOWN_UPDATE         14
68 CONSTANT: GDBM_ITEM_NOT_FOUND         15
69 CONSTANT: GDBM_REORGANIZE_FAILED      16
70 CONSTANT: GDBM_CANNOT_REPLACE         17
71 CONSTANT: GDBM_ILLEGAL_DATA           18
72 CONSTANT: GDBM_OPT_ALREADY_SET        19
73 CONSTANT: GDBM_OPT_ILLEGAL            20
74
75 TYPEDEF: int gdbm_error
76 C-GLOBAL: gdbm_error gdbm_errno