22 std::shared_ptr<NodeInfoT> m_info;
23 std::shared_ptr<Node<NodeInfoT>> m_parent;
26 Node(NodeInfoT* t_ptr_to_info,
unsigned int t_id) : m_id(t_id), m_level(0), m_info(t_ptr_to_info) {}
28 Node(NodeInfoT* t_ptr_to_info,
unsigned int t_id,
const Node<NodeInfoT>& t_parent)
30 m_level(t_parent.level() + 1),
31 m_info(t_ptr_to_info),
32 m_parent(std::make_shared<Node<NodeInfoT>>(t_parent))
35 Node(
const Node&) =
default;
36 Node(Node&&)
noexcept =
default;
38 Node& operator=(
const Node&) =
default;
39 Node& operator=(Node&&)
noexcept =
default;
41 static Node<NodeInfoT> create_root_node(NodeInfoT* t_ptr_to_info) {
return Node<NodeInfoT>(t_ptr_to_info, 0); }
43 static Node<NodeInfoT> create_detached_node(NodeInfoT* t_ptr_to_info) {
return Node<NodeInfoT>(t_ptr_to_info, -1); }
45 [[nodiscard]]
unsigned int id()
const {
return m_id; }
47 [[nodiscard]]
unsigned int level()
const {
return m_level; }
49 [[nodiscard]]
const NodeInfoT& info()
const {
return *m_info; }
51 NodeInfoT& info() {
return *m_info; }
53 [[nodiscard]]
const Node<NodeInfoT>& parent()
const {
return *m_parent; }