summaryrefslogtreecommitdiff
path: root/include/gras
diff options
context:
space:
mode:
Diffstat (limited to 'include/gras')
-rw-r--r--include/gras/block.hpp8
-rw-r--r--include/gras/block.i9
-rw-r--r--include/gras/detail/block.hpp36
3 files changed, 51 insertions, 2 deletions
diff --git a/include/gras/block.hpp b/include/gras/block.hpp
index 59c30c0..378358e 100644
--- a/include/gras/block.hpp
+++ b/include/gras/block.hpp
@@ -222,7 +222,8 @@ struct GRAS_API Block : Element
* \param which_output the index of the output port
* \param msg the message object to pass downstream
*/
- void post_output_msg(const size_t which_output, const PMCC &msg);
+ template <typename ValueType>
+ void post_output_msg(const size_t which_output, const ValueType &value);
/*!
* Pop a message from the specified port.
@@ -248,7 +249,8 @@ struct GRAS_API Block : Element
* \param which_input an input port on this block
* \param msg the message to post to the input port
*/
- void post_input_msg(const size_t which_input, const PMCC &tag);
+ template <typename ValueType>
+ void post_input_msg(const size_t which_input, const ValueType &value);
/*******************************************************************
* The property interface:
@@ -543,6 +545,8 @@ struct GRAS_API Block : Element
void _register_setter(const std::string &, void *);
virtual void _set_property(const std::string &, const PMCC &);
virtual PMCC _get_property(const std::string &);
+ void _post_output_msg(const size_t which_output, const PMCC &msg);
+ void _post_input_msg(const size_t which_input, const PMCC &msg);
};
} //namespace gras
diff --git a/include/gras/block.i b/include/gras/block.i
index 8e1a635..cce0d15 100644
--- a/include/gras/block.i
+++ b/include/gras/block.i
@@ -26,6 +26,15 @@
def get(self, key):
return self._get_property(key)()
+
+ def post_output_msg(self, which_output, value):
+ if not isinstance(value, PMCC): value = PMC_M(value)
+ self._post_output_msg(which_output, value)
+
+ def post_input_msg(self, which_input, value):
+ if not isinstance(value, PMCC): value = PMC_M(value)
+ self._post_input_msg(which_input, value)
+
%}
}
diff --git a/include/gras/detail/block.hpp b/include/gras/detail/block.hpp
index d975b0f..3c85905 100644
--- a/include/gras/detail/block.hpp
+++ b/include/gras/detail/block.hpp
@@ -97,6 +97,42 @@ inline ValueType Block::get(const std::string &key)
return this->_get_property(key).as<ValueType>();
}
+template <typename ValueType>
+inline void Block::post_output_msg(const size_t i, const ValueType &value)
+{
+ this->_post_output_msg(i, PMC_M(value));
+}
+
+template <>
+inline void Block::post_output_msg(const size_t i, const PMCC &value)
+{
+ this->_post_output_msg(i, value);
+}
+
+template <>
+inline void Block::post_output_msg(const size_t i, const PMC &value)
+{
+ this->_post_output_msg(i, value);
+}
+
+template <typename ValueType>
+inline void Block::post_input_msg(const size_t i, const ValueType &value)
+{
+ this->_post_input_msg(i, PMC_M(value));
+}
+
+template <>
+inline void Block::post_input_msg(const size_t i, const PMCC &value)
+{
+ this->_post_input_msg(i, value);
+}
+
+template <>
+inline void Block::post_input_msg(const size_t i, const PMC &value)
+{
+ this->_post_input_msg(i, value);
+}
+
} //namespace gras
#endif /*INCLUDED_GRAS_DETAIL_BLOCK_HPP*/