All pastes #1378565 Raw Edit

Unnamed

public python v1 · immutable
#1378565 ·published 2009-04-01 02:55 UTC
rendered paste body
from pypy.interpreter.baseobjspace import ObjSpace, W_Rootfrom pypy.rpython.lltypesystem import rffi, lltypefrom pypy.rpython.lltypesystem.rffi import llexternal, CCHARP, ExternalCompilationInfo, CStructPtr, INTfrom pypy.rpython.lltypesystem.lltype import Signed, Ptr, Char, GcStructfrom pypy.rpython.lltypesystem.rstr import STRfrom pypy.rpython.lltypesystem import lltypefrom pypy.rpython.rtyper import RPythonTyperfrom pypy.interpreter.baseobjspace import Wrappablefrom pypy.interpreter.typedef import TypeDeffrom pypy.interpreter.gateway import interp2app, ObjSpace, W_Rootimport py, sysdatum = GcStruct('datum',('dptr',CCHARP), ('dsize', lltype.Signed))err_func = lltype.Ptr(lltype.FuncType([], lltype.Void))eci = ExternalCompilationInfo(includes=['gdbm.h'], libraries=['gdbm'])gdbm_file = CStructPtr( 'GDBM_FILE', ('dummy', INT))open_gdbm = rffi.llexternal('gdbm_open', [CCHARP, INT, INT, INT, err_func], gdbm_file, compilation_info=eci)store_gdbm = rffi.llexternal('gdbm_store', [gdbm_file, CCHARP, CCHARP, INT], INT, compilation_info=eci)fetch_gdbm = rffi.llexternal('gdbm_fetch', [gdbm_file, CCHARP], lltype.Ptr(datum), compilation_info=eci)close_gdbm = rffi.llexternal('gdbm_close', [gdbm_file], INT, compilation_info = eci)class GDBM(Wrappable):    def __init__(self, space):        self.space = space    def gdbm_open(self, name, blocksize, read_write, mode):        self.struct_gdbm = open_gdbm(name, blocksize, read_write, mode, 0)         if not struct_gdbm:            return self.space.w_None         return self.space.wrap(self.struct_gdbm)    def gdbm_store(self, key, content, flag):        res_gdbm = gdbm_store(self.struct_gdbm, key, content, flag)        return self.space.wrap(res_gdbm)    def gdbm_fetch(self, key):        return self.space.wrap(fetch_gdbm(self.struct_gdbm, key))    def gdbm_close(self):        close_gdbm(self.struct_gdbm)def GDBM_new(space, w_subtype, args):    w_gdbm = space.allocate_instance(GDBM, w_subtype)        gdbm = space.interp_w(GDBM, w_gdbm)    GDBM.__init__(gdbm, space)    return w_gdbmGDBM.typedef = TypeDef(     'GDBM',     __new__  = interp2app(GDBM_new, unwrap_spec=[ObjSpace, W_Root, 'bufferstr']),      open     = interp2app(GDBM.gdbm_open, unwrap_spec=['self', str, int, int, int]),     store    = interp2app(GDBM.gdbm_store, unwrap_spec=['self', str, str, int]),     fetch    = interp2app(GDBM.gdbm_fetch, unwrap_spec=['self', str]),     close    = interp2app(GDBM.gdbm_open, unwrap_spec=['self']))