1 // Copyright (c) 2016 The SigViewer Development Team
2 // Licensed under the GNU General Public License (GPL)
3 // https://www.gnu.org/licenses/gpl
4
5
6 #include "event_table_file_reader.h"
7
8
9 namespace sigviewer
10 {
11
12 //-------------------------------------------------------------------------------------------------
13 QString const EventTableFileReader::UNKNOWN_GROUP_ID = "Unknown Group";
14
15
16 //-------------------------------------------------------------------------------------------------
EventTableFileReader()17 EventTableFileReader::EventTableFileReader()
18 {
19 load();
20 event_group_ids_.append (UNKNOWN_GROUP_ID);
21 group_id2name_[UNKNOWN_GROUP_ID] = UNKNOWN_GROUP_ID;
22 }
23
24 // destructor
~EventTableFileReader()25 EventTableFileReader::~EventTableFileReader()
26 {
27 // nothing
28 }
29
30 // load
load()31 bool EventTableFileReader::load()
32 {
33 char g[10];
34 uint16_t k;
35 for (k = 0; EventCodeGroups[k].groupid < 0xffff; k++) {
36 sprintf(g, "0x%04x", EventCodeGroups[k].groupid);
37 QString group_id = QString(g);
38 group_id2name_[group_id] = QString(EventCodeGroups[k].GroupDescription);
39 event_group_ids_ << group_id;
40 }
41 EventItem item;
42 for (k = 0; ETD[k].typ ; k++) {
43 sprintf(g, "0x%04x", ETD[k].groupid);
44 QString group_id = QString(g);
45 item.name = QString(ETD[k].desc);
46 item.group_id = group_id;
47 event_type2name_[ETD[k].typ] = item;
48 event_types_ << ETD[k].typ;
49 }
50 return true;
51 }
52
53 // get group id begin
getGroupIdBegin() const54 EventTableFileReader::StringIterator EventTableFileReader::getGroupIdBegin() const
55 {
56 return event_group_ids_.begin();
57 }
58
59 // get group id end
getGroupIdEnd() const60 EventTableFileReader::StringIterator EventTableFileReader::getGroupIdEnd() const
61 {
62 return event_group_ids_.end();
63 }
64
65 // get event types begin
eventTypesBegin()66 EventTableFileReader::IntIterator EventTableFileReader::eventTypesBegin()
67 {
68 return event_types_.begin();
69 }
70
71 // get event types end
eventTypesEnd()72 EventTableFileReader::IntIterator EventTableFileReader::eventTypesEnd()
73 {
74 return event_types_.end();
75 }
76
77 // get event name
getEventName(uint16 event_type_id) const78 QString EventTableFileReader::getEventName(uint16 event_type_id) const
79 {
80 Int2EventItemMap::const_iterator it = event_type2name_.find(event_type_id);
81 return it != event_type2name_.end() ? it.value().name
82 : "NO SUCH EVENT TYPE";
83 }
84
85 //-----------------------------------------------------------------------------
setEventName(EventType event_type_id,QString const & name)86 void EventTableFileReader::setEventName (EventType event_type_id,
87 QString const& name)
88 {
89 event_type2name_[event_type_id].name = name;
90 }
91
92 //-----------------------------------------------------------------------------
restoreEventNames()93 void EventTableFileReader::restoreEventNames ()
94 {
95 load();
96 }
97
98 //-----------------------------------------------------------------------------
getEventsOfGroup(QString const & group_id) const99 std::set<EventType> EventTableFileReader::getEventsOfGroup (QString const& group_id) const
100 {
101 std::set<EventType> group_types;
102 foreach (EventType event_type, event_types_)
103 if (event_type2name_[event_type].group_id == group_id)
104 group_types.insert (event_type);
105
106 return group_types;
107 }
108
109
110 // get event group id
getEventGroupId(uint16 event_type_id) const111 QString EventTableFileReader::getEventGroupId(uint16 event_type_id) const
112 {
113 Int2EventItemMap::const_iterator it = event_type2name_.find(event_type_id);
114 return it != event_type2name_.end() ? it.value().group_id
115 : "";
116 }
117
118 //-------------------------------------------------------------------------------------------------
entryExists(EventType type) const119 bool EventTableFileReader::entryExists (EventType type) const
120 {
121 return event_types_.contains (type);
122 }
123
124 //-------------------------------------------------------------------------------------------------
addEntry(EventType type,QString const & name,QString group_id)125 void EventTableFileReader::addEntry (EventType type, QString const& name, QString group_id)
126 {
127 if (event_types_.contains (type))
128 return;
129 event_types_.append (type);
130
131 if (!event_group_ids_.contains (group_id))
132 group_id = UNKNOWN_GROUP_ID;
133
134 EventItem item;
135 item.group_id = group_id;
136
137 if (name.size())
138 item.name = name;
139 else
140 {
141 item.name = QString::number (type, 16);
142 while (item.name.size() < 4)
143 item.name.prepend ("0");
144 item.name.prepend("0x");
145 }
146
147 event_type2name_[type] = item;
148 }
149
150
151 //-------------------------------------------------------------------
getAllEventTypes() const152 std::set<EventType> EventTableFileReader::getAllEventTypes () const
153 {
154 std::set<EventType> type_set;
155 for (IntIterator it = event_types_.begin();
156 it != event_types_.end();
157 ++it)
158 {
159 type_set.insert (*it);
160 }
161 return type_set;
162 }
163
164 // get event group name
getEventGroupName(const QString & group_id) const165 QString EventTableFileReader::getEventGroupName(const QString& group_id) const
166 {
167 String2StringMap::const_iterator it = group_id2name_.find(group_id);
168 return it != group_id2name_.end() ? it.value()
169 : "";
170 }
171
172 }
173