コード例 #1
0
 def ll_get(self, d, llkey):
     hash = self.ll_keyhash(llkey)
     i = rdict.ll_dict_lookup(d, llkey, hash) & rdict.MASK
     #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)
コード例 #2
0
ファイル: _rweakkeydict.py プロジェクト: cimarieta/usp
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
コード例 #3
0
ファイル: _rweakkeydict.py プロジェクト: sota/pypy-old
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
コード例 #4
0
ファイル: _rweakkeydict.py プロジェクト: sota/pypy-old
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
コード例 #5
0
ファイル: _rweakkeydict.py プロジェクト: cimarieta/usp
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
コード例 #6
0
ファイル: _rweakvaldict.py プロジェクト: soIu/rpython
 def ll_get(self, d, llkey):
     if d.resize_counter < 0:
         self.ll_weakdict_rehash_after_translation(d)
     hash = self.ll_keyhash(llkey)
     i = rdict.ll_dict_lookup(d, llkey, hash) & rdict.MASK
     #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)
コード例 #7
0
 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)
コード例 #8
0
 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)
コード例 #9
0
ファイル: _rweakkeydict.py プロジェクト: sota/pypy-old
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)
コード例 #10
0
ファイル: _rweakkeydict.py プロジェクト: cimarieta/usp
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)