Example #1
0
 def __getitem__(self,key):
     SHMOBJ.protect(self)
     if isinstance(key, SHMSTR):
         key = str(key)
     if not isinstance(key, str):
         raise TypeError("** error: SHMDCT.__getitem__ only takes SHMSTR or str for key")
     np = py2shmobj.shmdict_lookup(self.addr, key)
     if not np:
         raise KeyError(key)
     else:
         (ep,datatype,datalen) = py2shmobj.shmdnode_get(np)
         return typed_ptr(ep,datatype)
Example #2
0
 def __setitem__(self,key,arg):
     SHMOBJ.protect(self)
     if not type(key) in [str, SHMSTR]:
         raise TypeError("** error: SHMDCT.__setitem__ only takes SHMSTR or str for key")
     if not isinstance(arg, SHMOBJ):
         raise TypeError("** invalid type being set in shmdict")
     datatype, datalen = get_type_and_len(arg)
     np = py2shmobj.shmdict_lookup(self.addr, str(key))
     if np:
         py2shmobj.shmdnode_put(np,arg.get_ptr(),datatype,datalen)
     else:
         if not isinstance(key, SHMSTR):
             raise TypeError("** error: SHMDCT.__setitem__ only takes SHMSTR when key is new")
         dnode = py2shmobj.shmdnode_alloc()
         if dnode is None:
             raise Exception('shmdnode_alloc failed: out of memory')
         py2shmobj.shmdnode_init(dnode, arg.get_ptr(), datatype, datalen)
         py2shmobj.shmdict_insert(self.addr, dnode, key.get_ptr())
Example #3
0
 def pop(self, key, defval=None, deletekey=True):
     SHMOBJ.protect(self)
     if isinstance(key, SHMSTR):
         key = str(key)
     if not isinstance(key, str):
         raise TypeError("** error: SHMDCT.pop only takes SHMSTR or str for key")
     np = py2shmobj.shmdict_lookup(self.addr, key)
     if np:
         kp = py2shmobj.shmdnode_getkey(np)
         (ep,datatype,datalen) = py2shmobj.shmdnode_get(np)
         py2shmobj.shmdict_remove(self.addr, np)
         py2shmobj.shmobj_del(np)
         if deletekey == True:
             py2shmobj.shmobj_del(kp)
         return typed_ptr(ep,datatype)
     if defval:
         return defval
     else:
         raise KeyError(key)