Add item group monitoring data type framework

Include supported data types for item groups:
--Start event trigger
--Signal event trigger
--A countAtOrAbove condition
--A log_error action

Change-Id: I1ae5ba60e4d9c06155885d52d98a44b31fd73207
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/src/events.hpp b/src/events.hpp
new file mode 100644
index 0000000..b6de8de
--- /dev/null
+++ b/src/events.hpp
@@ -0,0 +1,79 @@
+#pragma once
+
+#include "data_types.hpp"
+
+namespace phosphor
+{
+namespace dbus
+{
+namespace monitoring
+{
+
+class Event : public std::vector<Condition>
+{
+    public:
+        enum class Trigger
+        {
+            START,
+            SIGNAL
+        };
+
+        Event() = delete;
+        Event(const Event&) = delete;
+        Event(Event&&) = delete;
+        Event& operator=(const Event&) = delete;
+        Event& operator=(Event&&) = delete;
+        virtual ~Event() = default;
+
+        Event(const std::vector<Condition>& conditions,
+              Trigger t) :
+                  std::vector<Condition>(conditions),
+                  trigger(t)
+        {
+            // Nothing to do here
+        }
+
+        Trigger trigger;
+};
+
+class StartEvent : public Event
+{
+    public:
+        StartEvent() = delete;
+        StartEvent(const StartEvent&) = delete;
+        StartEvent(StartEvent&&) = delete;
+        StartEvent& operator=(const StartEvent&) = delete;
+        StartEvent& operator=(StartEvent&&) = delete;
+        ~StartEvent() = default;
+
+        explicit StartEvent(const std::vector<Condition>& conditions) :
+            Event(conditions, Trigger::START)
+        {
+            // Nothing to do here
+        }
+};
+
+class SignalEvent : public Event
+{
+    public:
+        SignalEvent() = delete;
+        SignalEvent(const SignalEvent&) = delete;
+        SignalEvent(SignalEvent&&) = delete;
+        SignalEvent& operator=(const SignalEvent&) = delete;
+        SignalEvent& operator=(SignalEvent&&) = delete;
+        ~SignalEvent() = default;
+
+        SignalEvent(const char* signature,
+                    const std::vector<Condition>& conditions) :
+                        Event(conditions, Trigger::SIGNAL),
+                        signature(signature)
+        {
+            // Nothing to do here
+        }
+
+        const char* signature;
+};
+
+} // namespace monitoring
+} // namespace dbus
+} // namespace phosphor