DBC Framework
DBC parsing and CAN signal decoding framework
Loading...
Searching...
No Matches
tree_node.h
Go to the documentation of this file.
1
12#ifndef TREE_NODE_H
13#define TREE_NODE_H
14
15#include <cstddef>
16#include <memory>
17#include <optional>
18#include <string>
19#include <vector>
20
21#include "definition_key.h"
22#include "frame_info.h"
23#include "signal_info.h"
24
28enum class NodeType {
29 Root,
30 Frame,
31 Signal
32};
33
37class TreeNode {
38public:
42 TreeNode();
43
48 explicit TreeNode(const FrameInfo &frame);
49
54 explicit TreeNode(const SignalInfo &signal);
55
56 ~TreeNode() = default;
57
58 TreeNode(const TreeNode &) = delete;
59 TreeNode &operator=(const TreeNode &) = delete;
60
61 // Node addresses are stable. Transfer unique_ptr ownership instead of nodes.
62 TreeNode(TreeNode &&) = delete;
63 TreeNode &operator=(TreeNode &&) = delete;
64
73 void AddChild(std::unique_ptr<TreeNode> &&child);
74
76 const TreeNode *GetParent() const;
77
79 std::size_t GetRow() const;
80
82 std::optional<FrameKey> GetFrameKey() const;
83
85 std::optional<SignalKey> GetSignalKey() const;
86
91 std::size_t GetChildCount() const;
92
98 const TreeNode *GetChild(std::size_t index) const;
99
105 TreeNode *GetChild(std::size_t index);
106
111 NodeType GetType() const;
112
117 const std::string &GetName() const;
118
123 const FrameInfo *GetFrame() const;
124
129 const SignalInfo *GetSignal() const;
130
131private:
132 TreeNode *m_parent = nullptr;
133 std::size_t m_row = 0U;
134 NodeType m_type;
135 std::string m_name;
136 std::vector<std::unique_ptr<TreeNode>> m_children;
137 std::unique_ptr<FrameInfo> m_frame;
138 std::unique_ptr<SignalInfo> m_signal;
139};
140
141#endif /* TREE_NODE_H */
Tree node for later use in model/view or other hierarchy consumers.
Definition tree_node.h:37
std::optional< SignalKey > GetSignalKey() const
Definition tree_node.cpp:91
const SignalInfo * GetSignal() const
Get signal payload if node is signal.
Definition tree_node.cpp:71
const TreeNode * GetChild(std::size_t index) const
Get child by index.
Definition tree_node.cpp:45
TreeNode()
Create root node.
Definition tree_node.cpp:15
const TreeNode * GetParent() const
Definition tree_node.cpp:75
const std::string & GetName() const
Get display name.
Definition tree_node.cpp:63
std::size_t GetChildCount() const
Get child count.
Definition tree_node.cpp:41
std::size_t GetRow() const
Definition tree_node.cpp:79
std::optional< FrameKey > GetFrameKey() const
Definition tree_node.cpp:83
void AddChild(std::unique_ptr< TreeNode > &&child)
Add child node.
Definition tree_node.cpp:27
NodeType GetType() const
Get node type.
Definition tree_node.cpp:59
const FrameInfo * GetFrame() const
Get frame payload if node is frame.
Definition tree_node.cpp:67
Parsed CAN frame metadata.
Parsed CAN signal metadata.
Describes one CAN frame from a DBC file.
Definition frame_info.h:25
Describes one signal inside a DBC frame.
Definition signal_info.h:25
NodeType
Type of a tree node.
Definition tree_node.h:28