def ll_set_null(d, llkey): hash = compute_identity_hash(llkey) i = rdict.ll_dict_lookup(d, llkey, hash) & rdict.MASK if d.entries.everused(i): # If the entry was ever used, clean up its key and value. # We don't store a NULL value, but a dead weakref, because # the entry must still be marked as everused(). d.entries[i].key = llmemory.dead_wref d.entries[i].value = NULLVALUE
def ll_set_null(d, llkey): hash = ll_strhash(llkey) i = rdict.ll_dict_lookup(d, llkey, hash) if d.entries.everused(i): # If the entry was ever used, clean up its key and value. # We don't store a NULL value, but a dead weakref, because # the entry must still be marked as everused(). d.entries[i].value = llmemory.dead_wref d.entries[i].key = lltype.nullptr(rstr.STR)
def ll_get(d, llkey): hash = ll_strhash(llkey) i = rdict.ll_dict_lookup(d, llkey, hash) #llop.debug_print(lltype.Void, i, 'get') valueref = d.entries[i].value if valueref: return weakref_deref(rclass.OBJECTPTR, valueref) else: return lltype.nullptr(rclass.OBJECTPTR.TO)
def ll_get(d, llkey): hash = compute_identity_hash(llkey) i = rdict.ll_dict_lookup(d, llkey, hash) & rdict.MASK #llop.debug_print(lltype.Void, i, 'get', hex(hash), # ll_debugrepr(d.entries[i].key), # ll_debugrepr(d.entries[i].value)) # NB. ll_valid() above was just called at least on entry i, so if # it is an invalid entry with a dead weakref, the value was reset # to NULLVALUE. return d.entries[i].value
def ll_set_null(self, d, llkey): hash = self.ll_keyhash(llkey) i = rdict.ll_dict_lookup(d, llkey, hash) & rdict.MASK if d.entries.everused(i): # If the entry was ever used, clean up its key and value. # We don't store a NULL value, but a dead weakref, because # the entry must still be marked as everused(). d.entries[i].value = llmemory.dead_wref if isinstance(self.r_key.lowleveltype, lltype.Ptr): d.entries[i].key = self.r_key.convert_const(None) else: d.entries[i].key = self.r_key.convert_const(0)
def ll_set_nonnull(d, llkey, llvalue): hash = ll_strhash(llkey) valueref = weakref_create(llvalue) # GC effects here, before the rest i = rdict.ll_dict_lookup(d, llkey, hash) everused = d.entries.everused(i) d.entries[i].key = llkey d.entries[i].value = valueref #llop.debug_print(lltype.Void, i, 'stored') if not everused: d.num_pristine_entries -= 1 if d.num_pristine_entries <= len(d.entries) / 3: #llop.debug_print(lltype.Void, 'RESIZE') ll_weakdict_resize(d)
def ll_set_nonnull(self, d, llkey, llvalue): hash = self.ll_keyhash(llkey) valueref = weakref_create(llvalue) # GC effects here, before the rest i = rdict.ll_dict_lookup(d, llkey, hash) & rdict.MASK everused = d.entries.everused(i) d.entries[i].key = llkey d.entries[i].value = valueref #llop.debug_print(lltype.Void, i, 'stored') if not everused: d.resize_counter -= 3 if d.resize_counter <= 0: #llop.debug_print(lltype.Void, 'RESIZE') self.ll_weakdict_resize(d)
def ll_set_nonnull(self, d, llkey, llvalue): hash = self.ll_keyhash(llkey) valueref = weakref_create(llvalue) # GC effects here, before the rest i = rdict.ll_dict_lookup(d, llkey, hash) & rdict.MASK everused = d.entries.everused(i) d.entries[i].key = llkey d.entries[i].value = valueref # llop.debug_print(lltype.Void, i, 'stored') if not everused: d.resize_counter -= 3 if d.resize_counter <= 0: # llop.debug_print(lltype.Void, 'RESIZE') self.ll_weakdict_resize(d)
def ll_set_nonnull(d, llkey, llvalue): hash = compute_identity_hash(llkey) keyref = weakref_create(llkey) # GC effects here, before the rest i = rdict.ll_dict_lookup(d, llkey, hash) & rdict.MASK everused = d.entries.everused(i) d.entries[i].key = keyref d.entries[i].value = llvalue d.entries[i].f_hash = hash #llop.debug_print(lltype.Void, i, 'stored', hex(hash), # ll_debugrepr(llkey), # ll_debugrepr(llvalue)) if not everused: d.resize_counter -= 3 if d.resize_counter <= 0: #llop.debug_print(lltype.Void, 'RESIZE') ll_weakdict_resize(d)