16 #ifndef BORNAGAIN_PARAM_NODE_INODE_H
17 #define BORNAGAIN_PARAM_NODE_INODE_H
26 const double INF = std::numeric_limits<double>::infinity();
43 INode(std::vector<double> PValues);
51 virtual std::vector<ParaMeta>
parDefs()
const {
return {}; }
63 std::vector<double>
m_P;
73 std::vector<const INode*>&
operator<<(std::vector<const INode*>& v_node,
74 const std::unique_ptr<T>& node)
77 v_node.push_back(node.get());
82 std::vector<const INode*>&
operator<<(std::vector<const INode*>&& v_node,
83 const std::unique_ptr<T>& node)
86 v_node.push_back(node.get());
90 inline std::vector<const INode*>&
operator<<(std::vector<const INode*>& v_node,
const INode* node)
92 v_node.push_back(node);
96 inline std::vector<const INode*>&
operator<<(std::vector<const INode*>&& v_node,
const INode* node)
98 v_node.push_back(node);
102 inline std::vector<const INode*>&
operator<<(std::vector<const INode*>& v_node,
103 const std::vector<const INode*>& other)
105 v_node.insert(v_node.end(), other.begin(), other.end());
109 inline std::vector<const INode*>&
operator<<(std::vector<const INode*>&& v_node,
110 const std::vector<const INode*>& other)
112 v_node.insert(v_node.end(), other.begin(), other.end());
std::vector< const INode * > & operator<<(std::vector< const INode * > &v_node, const std::unique_ptr< T > &node)
Base class for tree-like structures containing parameterized objects.
virtual std::vector< const INode * > nodeChildren() const
Returns all children.
std::vector< const INode * > nodeOffspring() const
Returns all descendants.
virtual std::vector< ParaMeta > parDefs() const
Returns the parameter definitions, to be hard-coded in each leaf class.
void checkNodeArgs() const
Raises exception if a parameter value is invalid.
std::vector< double > m_P
virtual std::string className() const =0
Returns the class name, to be hard-coded in each leaf class that inherits from INode.