Added utility method for looking up flag values in Rtcom database. Whoever thought...
authorJamie Thompson <jamie@.(none)>
Sat, 1 Oct 2011 22:55:37 +0000 (23:55 +0100)
committerJamie Thompson <coding@jamie-thompson.co.uk>
Sun, 2 Oct 2011 18:35:24 +0000 (19:35 +0100)
EventTypes/RtcomEvent.cpp
EventTypes/RtcomEvent.h

index cb0942f..b595858 100644 (file)
  * <http://www.gnu.org/licenses/>.
  */
 
+#include "RtcomEvent.h"
+
+#include <QDebug>
+
+#include <QHash>
+#include <QString>
+
 #include <rtcom-eventlogger/event.h>
+#include <rtcom-eventlogger/eventlogger.h>
 
-#include "RtcomEvent.h"
+#include <stdexcept>
 
 using namespace EventTypes;
 
@@ -30,3 +38,33 @@ void RtcomEvent::freeRTComContents(RTComElEvent &event)
 {
        rtcom_el_event_free_contents(&event);
 }
+
+const unsigned int RtcomEvent::GetFlagValue(const QString &value) const
+{
+       static QHash<QString, uint> valueLookups;
+
+       if(!valueLookups.contains(value))
+       {
+               RTComEl *el(rtcom_el_new());
+               if(NULL != el)
+               {
+                       gint flagValue;
+                       if(-1 != (flagValue = rtcom_el_get_flag_value(el, value.toUtf8())))
+                               valueLookups.insert(value, flagValue);
+
+                       g_object_unref(el);
+
+                       if(-1 == flagValue)
+                       {
+                               throw std::runtime_error(
+                                       QString("Unable to find flag value '%1'' in rtcom database")
+                                               .arg(value).toStdString());
+                       }
+               }
+               else
+                       qDebug() << "Failed to create event logger.";
+       }
+
+       return valueLookups.value(value);
+}
+
index 27e44fb..c4a1341 100644 (file)
@@ -22,6 +22,7 @@
 #include "iEvent.h"
 
 #include <QList> // Needed for default value
+class QString;
 
 class _RTComElAttachment;
 typedef _RTComElAttachment RTComElAttachment;
@@ -44,6 +45,8 @@ namespace EventTypes
 
                virtual RTComElEvent * toRTComEvent(const NumberToNameLookup &numberToNameLookup) const = 0;
                static void freeRTComContents(RTComElEvent &event);
+
+               const unsigned int GetFlagValue(const QString &value) const;
        };
 }