summaryrefslogtreecommitdiff
path: root/python/gras/GRAS_PyBlock.i
diff options
context:
space:
mode:
Diffstat (limited to 'python/gras/GRAS_PyBlock.i')
-rw-r--r--python/gras/GRAS_PyBlock.i65
1 files changed, 15 insertions, 50 deletions
diff --git a/python/gras/GRAS_PyBlock.i b/python/gras/GRAS_PyBlock.i
index e9809a8..ff91a6f 100644
--- a/python/gras/GRAS_PyBlock.i
+++ b/python/gras/GRAS_PyBlock.i
@@ -12,7 +12,7 @@
%feature("nodirector") gras::BlockPython::notify_inactive;
%feature("nodirector") gras::BlockPython::notify_topology;
%feature("nodirector") gras::BlockPython::work;
-%feature("nodirector") gras::BlockPython::_handle_prop_access;
+%feature("nodirector") gras::BlockPython::_handle_call_ts;
////////////////////////////////////////////////////////////////////////
// http://www.swig.org/Doc2.0/Library.html#Library_stl_exceptions
@@ -157,45 +157,19 @@ struct BlockPython : Block
virtual void _Py_propagate_tags(const size_t which_input, const TagIter &iter) = 0;
- void _set_property(const std::string &key, const PMCC &value)
+ PMCC _handle_call(const std::string &key, const PMCC &args)
{
PyTSPhondler phil;
- return Block::_set_property(key, value);
+ return Block::_handle_call(key, args);
}
- PMCC _get_property(const std::string &key)
- {
- PyTSPhondler phil;
- return Block::_get_property(key);
- }
-
- PMCC _handle_prop_access(const std::string &key, const PMCC &value, const bool set)
+ PMCC _handle_call_ts(const std::string &key, const PMCC &args)
{
PyGILPhondler phil;
- return this->_Py_handle_prop_access(key, value, set);
- }
-
- virtual PMCC _Py_handle_prop_access(const std::string &key, const PMCC &value, const bool set) = 0;
-
- void dummy_setter(const PMCC &)
- {
- //NOP
- }
- PMCC dummy_getter(void)
- {
- return PMC();
- }
-
- void _Py_register_dummy_setter(const std::string &key)
- {
- this->register_setter(key, &BlockPython::dummy_setter);
- }
-
- void _Py_register_dummy_getter(const std::string &key)
- {
- this->register_getter(key, &BlockPython::dummy_getter);
+ return this->_Py_handle_call_ts(key, args);
}
+ virtual PMCC _Py_handle_call_ts(const std::string &key, const PMCC &args) = 0;
};
}
@@ -221,8 +195,7 @@ class PyBlock(BlockPython):
BlockPython.__init__(self, name)
self.set_input_signature(in_sig)
self.set_output_signature(out_sig)
- self.__getter_registry = dict()
- self.__setter_registry = dict()
+ self.__call_registry = dict()
def set_input_signature(self, sig):
self.__in_sig = sig_to_dtype_sig(sig)
@@ -301,20 +274,12 @@ class PyBlock(BlockPython):
t.offset -= self.get_consumed(i)
self.post_output_tag(o, t)
- def _Py_handle_prop_access(self, key, value, set):
- if set:
- setter = self.__setter_registry[key]
- setter(value())
- return PMCC()
- else:
- getter = self.__getter_registry[key]
- return PMC_M(getter())
-
- def register_getter(self, key, getter):
- self._Py_register_dummy_getter(key)
- self.__getter_registry[key] = getter
-
- def register_setter(self, key, setter):
- self._Py_register_dummy_setter(key)
- self.__setter_registry[key] = setter
+ def _Py_handle_call_ts(self, key, args):
+ call = self.__call_registry[key]
+ pyargs = args()
+ pyret = call(*pyargs)
+ return PMC_M(pyret)
+
+ def register_call(self, key, call):
+ self.__call_registry[key] = call
%}