Add property watches

Property watches cache DBus property values given an externally
supplied index of property names and paths, in an externally
supplied storage location.

Change-Id: I155081da88c3ab0e4f6a13b012fc9719203b1888
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/src/watch.hpp b/src/watch.hpp
new file mode 100644
index 0000000..1ba671d
--- /dev/null
+++ b/src/watch.hpp
@@ -0,0 +1,36 @@
+#pragma once
+
+namespace phosphor
+{
+namespace dbus
+{
+namespace monitoring
+{
+
+/** @class Watch
+ *  @brief Watch interface.
+ *
+ *  The start method is invoked by main() on all watches of any type
+ *  at application startup, to allow watches to perform custom setup
+ *  or initialization.  Typical implementations might register dbus
+ *  callbacks or perform queries.
+ *
+ *  Watches of any type can be started.
+ */
+class Watch
+{
+    public:
+        Watch() = default;
+        Watch(const Watch&) = default;
+        Watch(Watch&&) = default;
+        Watch& operator=(const Watch&) = default;
+        Watch& operator=(Watch&&) = default;
+        virtual ~Watch() = default;
+
+        /** @brief Start the watch. */
+        virtual void start() = 0;
+};
+
+} // namespace monitoring
+} // namespace dbus
+} // namespace phosphor