1010#include " core/tensor.hpp"
1111
1212#include < memory>
13+ #include < string>
1314#include < string_view>
1415#include < unordered_map>
1516#include < utility>
@@ -21,19 +22,19 @@ class MNode;
2122class MNodeBuilderRegistry final
2223{
2324public:
24- using NodeBuilder = std::shared_ptr<MNode> (*)(int , MIOS & , MIOS &, const core::ConfigMap & );
25+ using NodeBuilder = std::shared_ptr<MNode> (*)(const core::ConfigMap * , MIOS * , MIOS *, int );
2526 using NodeBuilderMap = std::unordered_map<std::string_view, NodeBuilder>;
2627
2728 MNodeBuilderRegistry () = default ;
2829 ~MNodeBuilderRegistry () = default ;
2930
30- inline static std::shared_ptr<MNode> getNode (std::string_view name, int priority, MIOS &inputs, MIOS &outputs ,
31- const core::ConfigMap &configs ) noexcept
31+ inline static std::shared_ptr<MNode> getNode (std::string_view name, const core::ConfigMap *configs = nullptr ,
32+ MIOS *inputs = nullptr , MIOS *outputs = nullptr , int priority = 0 ) noexcept
3233 {
3334 auto it = _nodes.find (name);
3435 if (it != _nodes.end ()) [[likely]]
3536 {
36- return it->second (priority , inputs, outputs, configs );
37+ return it->second (configs , inputs, outputs, priority );
3738 }
3839 return {};
3940 }
@@ -43,7 +44,8 @@ class MNodeBuilderRegistry final
4344 return _nodes;
4445 }
4546
46- static core::Status registerNodeBuilder (std::string_view name, NodeBuilder builder, bool replace = false ) noexcept ;
47+ static constexpr core::Status registerNodeBuilder (std::string_view name, NodeBuilder builder,
48+ bool replace = false ) noexcept ;
4749
4850private:
4951 static NodeBuilderMap _nodes;
@@ -126,7 +128,10 @@ class MNode
126128 return {};
127129 }
128130
129- virtual core::Status config (const core::ConfigMap &configs) noexcept = 0;
131+ virtual core::Status config (const core::ConfigMap &configs) noexcept
132+ {
133+ return STATUS (ENOTSUP, " Configuration not supported for this node" );
134+ }
130135
131136 inline core::Status operator ()() noexcept
132137 {
@@ -135,18 +140,20 @@ class MNode
135140
136141protected:
137142 template <typename IS, typename OS>
138- explicit MNode (std::string_view name, int priority, IS &&inputs, OS &&outputs) noexcept
139- : _name(name), _priority(priority), _inputs(std::forward<IS>(inputs)), _outputs(std::forward<OS>(outputs))
143+ constexpr explicit MNode (std::string name, IS &&inputs, OS &&outputs, int priority) noexcept
144+ : _name(std::move(name)), _inputs(std::forward<IS>(inputs)), _outputs(std::forward<OS>(outputs)),
145+ _priority(priority)
140146 {
147+ LOG (DEBUG, " Module node '%s' created with priority %d" , _name.c_str (), _priority);
141148 }
142149
143150 virtual inline core::Status forward (const MIOS &inputs, MIOS &outputs) noexcept = 0;
144151
145152private:
146- std::string_view _name;
147- int _priority;
153+ const std::string _name;
148154 MIOS _inputs;
149155 MIOS _outputs;
156+ const int _priority;
150157};
151158
152159} // namespace module
0 commit comments