summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorJosh Blum2012-11-20 19:59:29 -0800
committerJosh Blum2012-11-20 19:59:29 -0800
commit92e20173fcb8bce1c7a704ff849d95a57a0f9885 (patch)
tree9e896b30b18ced4b131071e96261e7b3b6982ccc /python
parent1018a24939885ca6eff6e0bf3977bbef18ae973f (diff)
downloadsandhi-92e20173fcb8bce1c7a704ff849d95a57a0f9885.tar.gz
sandhi-92e20173fcb8bce1c7a704ff849d95a57a0f9885.tar.bz2
sandhi-92e20173fcb8bce1c7a704ff849d95a57a0f9885.zip
kludge around for python reference counting
Diffstat (limited to 'python')
-rw-r--r--python/gras/GRAS_Block.i4
-rw-r--r--python/gras/GRAS_HierBlock.i17
2 files changed, 9 insertions, 12 deletions
diff --git a/python/gras/GRAS_Block.i b/python/gras/GRAS_Block.i
index 2aa1166..e5d112a 100644
--- a/python/gras/GRAS_Block.i
+++ b/python/gras/GRAS_Block.i
@@ -227,11 +227,15 @@ def YieldTagIter(iter):
srcid=PMC2Py(t.srcid),
)
+#FIXME major kludge for ref holding
+blocks_ref_container = list()
+
class Block(BlockPython):
def __init__(self, name='Block', in_sig=None, out_sig=None):
BlockPython.__init__(self, name)
self.set_input_signature(in_sig)
self.set_output_signature(out_sig)
+ blocks_ref_container.append(self)
def set_input_signature(self, sig):
self.__in_sig = sig_to_dtype_sig(sig)
diff --git a/python/gras/GRAS_HierBlock.i b/python/gras/GRAS_HierBlock.i
index d81536c..328317c 100644
--- a/python/gras/GRAS_HierBlock.i
+++ b/python/gras/GRAS_HierBlock.i
@@ -135,12 +135,11 @@ def to_element(obj):
try: return obj.shared_to_element()
except: raise Exception('cant coerce obj %s to element'%(obj))
-def internal_connect__(fcn, obj, refs, action, *args):
+def internal_connect__(fcn, obj, *args):
if len(args) == 1:
elem = (args[0])
fcn(obj, elem)
- if elem != to_element(obj): action(refs, elem)
return
for src, sink in zip(args, args[1:]):
@@ -155,30 +154,24 @@ def internal_connect__(fcn, obj, refs, action, *args):
fcn(obj, src, src_index, sink, sink_index)
- #incr/decr the python obj ref counts
- if src != to_element(obj): action(refs, src)
- if sink != to_element(obj): action(refs, sink)
-
class TopBlock(TopBlockPython):
def __init__(self, *args, **kwargs):
TopBlockPython.__init__(self, *args, **kwargs)
- self.__refs = list()
def connect(self, *args):
- return internal_connect__(TopBlockPython.connect, self, self.__refs, list.append, *args)
+ return internal_connect__(TopBlockPython.connect, self, *args)
def disconnect(self, *args):
- return internal_connect__(TopBlockPython.disconnect, self, self.__refs, list.remove, *args)
+ return internal_connect__(TopBlockPython.disconnect, self, *args)
class HierBlock(HierBlockPython):
def __init__(self, *args, **kwargs):
HierBlockPython.__init__(self, *args, **kwargs)
- self.__refs = list()
def connect(self, *args):
- return internal_connect__(HierBlockPython.connect, self, self.__refs, list.append, *args)
+ return internal_connect__(HierBlockPython.connect, self, *args)
def disconnect(self, *args):
- return internal_connect__(HierBlockPython.disconnect, self, self.__refs, list.remove, *args)
+ return internal_connect__(HierBlockPython.disconnect, self, *args)
%}