VOM: Additions to allow uses to UT applications that use VOM

- find object by key
- compare objects

Change-Id: I36ec8612be9482bcef7ceced2a59f7403f77b3e8
Signed-off-by: Neale Ranns <neale.ranns@cisco.com>
diff --git a/src/vpp-api/vom/lldp_binding.hpp b/src/vpp-api/vom/lldp_binding.hpp
index 896708f..0c56100 100644
--- a/src/vpp-api/vom/lldp_binding.hpp
+++ b/src/vpp-api/vom/lldp_binding.hpp
@@ -31,6 +31,11 @@
 {
 public:
   /**
+   * Typedef for the key of a LLDP binding
+   */
+  typedef interface::key_t key_t;
+
+  /**
    * Construct a new object matching the desried state
    */
   lldp_binding(const interface& itf, const std::string& hostname);
@@ -39,12 +44,23 @@
    * Copy Constructor
    */
   lldp_binding(const lldp_binding& o);
+
   /**
    * Destructor
    */
   ~lldp_binding();
 
   /**
+   * Comparison operator
+   */
+  bool operator==(const lldp_binding& b) const;
+
+  /**
+   * Return this object's key
+   */
+  const key_t& key() const;
+
+  /**
    * Return the 'singular' of the LLDP binding that matches this object
    */
   std::shared_ptr<lldp_binding> singular() const;
@@ -59,6 +75,11 @@
    */
   static void dump(std::ostream& os);
 
+  /**
+   * Find or add LLDP binding based on its key
+   */
+  static std::shared_ptr<lldp_binding> find(const key_t& k);
+
 private:
   /**
    * Class definition for listeners to OM events
@@ -113,7 +134,7 @@
   /**
    * It's the singular_db class that calls replay()
    */
-  friend class singular_db<interface::key_type, lldp_binding>;
+  friend class singular_db<key_t, lldp_binding>;
 
   /**
    * Sweep/reap the object if still stale
@@ -146,7 +167,7 @@
   /**
    * A map of all Lldp bindings keyed against the interface.
    */
-  static singular_db<interface::key_type, lldp_binding> m_db;
+  static singular_db<key_t, lldp_binding> m_db;
 };
 };