def popitem(self): SHMOBJ.protect(self) np = py2shmobj.shmdict_first(self.addr) if np: kp = py2shmobj.shmdnode_getkey(np) key = SHMSTR(kp,internal=True) val = self.pop(key, deletekey=False) return (key, val) else: raise KeyError('popitem(): SHMDCT is empty')
def clear(self, shallow=False): SHMOBJ.protect(self) np = py2shmobj.shmdict_first(self.addr) while np: (p,datatype,datalen) = py2shmobj.shmdnode_get(np) if not shallow: #DE - for now we assume the key is always a SHMSTR kp = py2shmobj.shmdnode_getkey(np) py2shmobj.shmobj_del(kp) val = typed_ptr(p,datatype) if type(val) in [SHMLST, SHMDCT]: val.delete(shallow=shallow) elif isinstance(val, SHMOBJ): val.delete() next = py2shmobj.shmdict_next(self.addr,np) py2shmobj.shmdict_remove(self.addr, np) py2shmobj.shmobj_del(np) np = next
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)
def __key(self): kp = py2shmobj.shmdnode_getkey(self.node) #DE - for now we assume the key is always a SHMSTR key = SHMSTR(kp,internal=True) return key