[pypy-svn] r63432 - pypy/dist/pypy/module/gdbm

igorto at codespeak.net igorto at codespeak.net
Mon Mar 30 13:04:14 CEST 2009


Author: igorto
Date: Mon Mar 30 13:04:13 2009
New Revision: 63432

Added:
   pypy/dist/pypy/module/gdbm/
   pypy/dist/pypy/module/gdbm/gdbm.py
Log:
create gdbm rffi module

Added: pypy/dist/pypy/module/gdbm/gdbm.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/module/gdbm/gdbm.py	Mon Mar 30 13:04:13 2009
@@ -0,0 +1,32 @@
+from pypy.rpython.lltypesystem.lltype import *
+from pypy.rpython.lltypesystem import rffi, lltype
+from pypy.rpython.lltypesystem.rffi import *
+from pypy.rpython.lltypesystem.lltype import Signed, Ptr, Char, malloc 
+from pypy.rpython.lltypesystem.rstr import STR
+from pypy.rpython.lltypesystem import lltype
+from pypy.rpython.rtyper import RPythonTyper
+
+import py
+import sys
+
+datum = GcStruct('datum',('dptr',CCHARP), ('dsize', lltype.Signed))
+
+class Gdbm:
+	def __init__(self):
+		self.eci = ExternalCompilationInfo(includes=['gdbm.h'], libraries=['gdbm'])
+		self.gdbm_file = CStructPtr( 'GDBM_FILE', ('dummy', INT))
+		#self.struct_gdbm = lltype.malloc(self.gdbm_file.TO, flavor='raw')	
+
+	def open(self, name, blocksize, read_write, mode):
+		err_func = lltype.Ptr(lltype.FuncType([], lltype.Void))
+		open_gdbm = rffi.llexternal('gdbm_open', [CCHARP, INT, INT, INT, err_func], self.gdbm_file, compilation_info=self.eci)
+		self.struct_gdbm = open_gdbm(name, blocksize, read_write, mode, 0) 
+
+	def fetch(self, dbf, key):
+		fetch_gdbm = rffi.llexternal('gdbm_fetch', [self.gdbm_file, CCHARP], datum, compilation_info=self.eci)
+		return fetch_gdbm(dbf, key)
+
+	def close(self):
+		close_gdbm = rffi.llexternal('gdbm_close', [self.gdbm_file], INT, compilation_info = self.eci)
+		close_gdbm(self.struct_gdbm)
+



More information about the Pypy-commit mailing list