openmedialibrary_platform/Darwin/lib/python3.5/site-packages/cffi/gc_weakref.py

23 lines
642 B
Python
Raw Normal View History

2013-10-11 17:28:32 +00:00
from weakref import ref
class GcWeakrefs(object):
def __init__(self, ffi):
self.ffi = ffi
2015-11-25 01:25:01 +00:00
self.data = {}
2013-10-11 17:28:32 +00:00
def build(self, cdata, destructor):
# make a new cdata of the same type as the original one
new_cdata = self.ffi.cast(self.ffi._backend.typeof(cdata), cdata)
2015-11-25 01:25:01 +00:00
#
def remove(key):
# careful, this function is not protected by any lock
old_key = self.data.pop(index)
assert old_key is key
destructor(cdata)
#
key = ref(new_cdata, remove)
index = object()
self.data[index] = key
2013-10-11 17:28:32 +00:00
return new_cdata