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