1 #include "visual_flags.hh"
2 
3 namespace cpprofiler
4 {
5 namespace tree
6 {
7 
ensure_id_exists(NodeID nid)8 void VisualFlags::ensure_id_exists(NodeID nid)
9 {
10     const auto id = static_cast<int>(nid);
11     if (label_shown_.size() < id + 1)
12     {
13         label_shown_.resize(id + 1);
14         node_hidden_.resize(id + 1);
15         shape_highlighted_.resize(id + 1);
16     }
17 }
18 
setLabelShown(NodeID nid,bool val)19 void VisualFlags::setLabelShown(NodeID nid, bool val)
20 {
21     ensure_id_exists(nid);
22     label_shown_[nid] = val;
23 }
24 
isLabelShown(NodeID nid) const25 bool VisualFlags::isLabelShown(NodeID nid) const
26 {
27 
28     if (label_shown_.size() <= nid)
29         return false;
30     return label_shown_.at(nid);
31 }
32 
setHidden(NodeID nid,bool val)33 void VisualFlags::setHidden(NodeID nid, bool val)
34 {
35     ensure_id_exists(nid);
36     node_hidden_[nid] = val;
37 
38     if (val)
39     {
40         hidden_nodes_.insert(nid);
41     }
42     else
43     {
44         hidden_nodes_.erase(nid);
45     }
46 }
47 
isHidden(NodeID nid) const48 bool VisualFlags::isHidden(NodeID nid) const
49 {
50     if (node_hidden_.size() <= nid)
51         return false;
52     return node_hidden_.at(nid);
53 }
54 
unhideAll()55 void VisualFlags::unhideAll()
56 {
57 
58     for (auto &&n : node_hidden_)
59     {
60         n = false;
61     }
62 
63     hidden_nodes_.clear();
64 }
65 
hiddenCount()66 int VisualFlags::hiddenCount()
67 {
68     return hidden_nodes_.size();
69 }
70 
setHighlighted(NodeID nid,bool val)71 void VisualFlags::setHighlighted(NodeID nid, bool val)
72 {
73     ensure_id_exists(nid);
74 
75     if (val)
76     {
77         highlighted_shapes_.insert(nid);
78     }
79     else
80     {
81         highlighted_shapes_.erase(nid);
82     }
83     shape_highlighted_[nid] = val;
84 }
85 
isHighlighted(NodeID nid) const86 bool VisualFlags::isHighlighted(NodeID nid) const
87 {
88 
89     if (shape_highlighted_.size() <= nid)
90     {
91         return false;
92     }
93     return shape_highlighted_[nid];
94 }
95 
unhighlightAll()96 void VisualFlags::unhighlightAll()
97 {
98     for (auto nid : highlighted_shapes_)
99     {
100         shape_highlighted_[nid] = false;
101     }
102 
103     highlighted_shapes_.clear();
104 }
105 
resetLanternSizes()106 void VisualFlags::resetLanternSizes()
107 {
108     lantern_sizes_.clear();
109 }
110 
setLanternSize(NodeID nid,int val)111 void VisualFlags::setLanternSize(NodeID nid, int val)
112 {
113     lantern_sizes_.insert({nid, val});
114 }
115 
lanternSize(NodeID nid) const116 int VisualFlags::lanternSize(NodeID nid) const
117 {
118     const auto it = lantern_sizes_.find(nid);
119     if (it != lantern_sizes_.end())
120     {
121         return it->second;
122     }
123     else
124     {
125         return -1; /// for non-lantern nodes
126     }
127 }
128 
129 } // namespace tree
130 } // namespace cpprofiler