diff options
Diffstat (limited to 'host/lib/rfnoc/nocscript/function_table.cpp')
-rw-r--r-- | host/lib/rfnoc/nocscript/function_table.cpp | 72 |
1 files changed, 35 insertions, 37 deletions
diff --git a/host/lib/rfnoc/nocscript/function_table.cpp b/host/lib/rfnoc/nocscript/function_table.cpp index 621cd5809..57e32363d 100644 --- a/host/lib/rfnoc/nocscript/function_table.cpp +++ b/host/lib/rfnoc/nocscript/function_table.cpp @@ -15,18 +15,21 @@ using namespace uhd::rfnoc::nocscript; class function_table_impl : public function_table { - public: - struct function_info { +public: + struct function_info + { expression::type_t return_type; function_ptr function; - function_info(): return_type(expression::TYPE_INT) {}; - function_info(const expression::type_t return_type_, const function_ptr &function_) - : return_type(return_type_), function(function_) - {}; + function_info() : return_type(expression::TYPE_INT){}; + function_info( + const expression::type_t return_type_, const function_ptr& function_) + : return_type(return_type_), function(function_){}; }; // Should be an unordered_map... sigh, we'll get to C++11 someday. - typedef std::map<std::string, std::map<expression_function::argtype_list_type, function_info> > table_type; + typedef std::map<std::string, + std::map<expression_function::argtype_list_type, function_info>> + table_type; /************************************************************************ * Structors @@ -36,63 +39,58 @@ class function_table_impl : public function_table _REGISTER_ALL_FUNCS(); } - ~function_table_impl() {}; + ~function_table_impl(){}; /************************************************************************ * Interface implementation ***********************************************************************/ - bool function_exists(const std::string &name) const { + bool function_exists(const std::string& name) const + { return bool(_table.count(name)); } - bool function_exists( - const std::string &name, - const expression_function::argtype_list_type &arg_types - ) const { + bool function_exists(const std::string& name, + const expression_function::argtype_list_type& arg_types) const + { table_type::const_iterator it = _table.find(name); return (it != _table.end()) and bool(it->second.count(arg_types)); } - expression::type_t get_type( - const std::string &name, - const expression_function::argtype_list_type &arg_types - ) const { + expression::type_t get_type(const std::string& name, + const expression_function::argtype_list_type& arg_types) const + { table_type::const_iterator it = _table.find(name); if (it == _table.end() or (it->second.find(arg_types) == it->second.end())) { - throw uhd::syntax_error(str( - boost::format("Unable to retrieve return value for function %s") - % expression_function::to_string(name, arg_types) - )); + throw uhd::syntax_error( + str(boost::format("Unable to retrieve return value for function %s") + % expression_function::to_string(name, arg_types))); } return it->second.find(arg_types)->second.return_type; } - expression_literal eval( - const std::string &name, - const expression_function::argtype_list_type &arg_types, - expression_container::expr_list_type &arguments - ) { + expression_literal eval(const std::string& name, + const expression_function::argtype_list_type& arg_types, + expression_container::expr_list_type& arguments) + { if (not function_exists(name, arg_types)) { - throw uhd::syntax_error(str( - boost::format("Cannot eval() function %s, not a known signature") - % expression_function::to_string(name, arg_types) - )); + throw uhd::syntax_error( + str(boost::format("Cannot eval() function %s, not a known signature") + % expression_function::to_string(name, arg_types))); } return _table[name][arg_types].function(arguments); } - void register_function( - const std::string &name, - const function_table::function_ptr &ptr, - const expression::type_t return_type, - const expression_function::argtype_list_type &sig - ) { + void register_function(const std::string& name, + const function_table::function_ptr& ptr, + const expression::type_t return_type, + const expression_function::argtype_list_type& sig) + { _table[name][sig] = function_info(return_type, ptr); } - private: +private: table_type _table; }; |