]> gitweb.factorcode.org Git - factor.git/commitdiff
gdbm: more user-friendly initial configuration
authorDmitry Shubin <dmitry.sh@gmail.com>
Sat, 26 Jun 2010 21:29:47 +0000 (01:29 +0400)
committerDmitry Shubin <dmitry.sh@gmail.com>
Sat, 26 Jun 2010 21:29:47 +0000 (01:29 +0400)
extra/gdbm/ffi/ffi.factor
extra/gdbm/gdbm.factor

index a6abc86e544afe909ee432a521d14c5677591c58..307f749cb4a466e4780d8bae4cb4f5fc24811ea9 100644 (file)
@@ -14,10 +14,8 @@ LIBRARY: libgdbm
 
 C-GLOBAL: c-string gdbm_version
 
-CONSTANT: GDBM_READER  0
-CONSTANT: GDBM_WRITER  1
-CONSTANT: GDBM_WRCREAT 2
-CONSTANT: GDBM_NEWDB   3
+ENUM: gdbm-role reader writer wrcreat newdb ;
+
 CONSTANT: GDBM_SYNC   HEX: 20
 CONSTANT: GDBM_NOLOCK HEX: 40
 
index 6145211e4b310df741fabcb51bd480bdba43527a..4c035b4faa3cbdb859aea49962b390e1bacff8d7 100644 (file)
@@ -1,15 +1,17 @@
 ! Copyright (C) 2010 Dmitry Shubin.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors alien.c-types alien.data alien.destructors
-classes.struct combinators destructors gdbm.ffi io.backend kernel libc
-literals locals math namespaces sequences serialize strings ;
+alien.enums classes.struct combinators destructors gdbm.ffi io.backend
+kernel libc locals math namespaces sequences serialize strings ;
 IN: gdbm
 
 TUPLE: gdbm
-    { name       string  }
+    { name string }
     { block-size integer }
-    { flags      integer initial: $ GDBM_WRCREAT }
-    { mode       integer initial: OCT: 644 } ;
+    { role initial: wrcreat }
+    { sync boolean }
+    { nolock boolean }
+    { mode integer initial: OCT: 644 } ;
 
 
 <PRIVATE
@@ -22,10 +24,16 @@ SYMBOL: current-dbf
 
 : dbf ( -- dbf ) current-dbf get ;
 
+: get-flag ( gdbm -- n )
+    [ role>>   enum>number ]
+    [ sync>>   GDBM_SYNC 0 ? ]
+    [ nolock>> GDBM_NOLOCK 0 ? ]
+    tri bitor bitor ;
+
 : gdbm-open ( gdbm -- dbf )
     {
         [ name>> normalize-path ]
-        [ block-size>> ] [ flags>> ] [ mode>> ]
+        [ block-size>> ] [ get-flag ] [ mode>> ]
     } cleave f gdbm_open [ gdbm-throw ] unless* ;
 
 DESTRUCTOR: gdbm-close