diff options
Diffstat (limited to 'python/gras/GRAS_PyBlock.i')
-rw-r--r-- | python/gras/GRAS_PyBlock.i | 65 |
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 %} |