From 1b3cf9133a0c9167b8d8417b194ce9f390390cad Mon Sep 17 00:00:00 2001
From: mattijs <m.janssens@opencfd.co.uk>
Date: Wed, 6 Aug 2008 10:24:35 +0100
Subject: [PATCH] operator==

---
 .../HashTables/HashTable/HashTable.C          | 37 +++++++++++++++++++
 .../HashTables/HashTable/HashTable.H          |  9 +++++
 2 files changed, 46 insertions(+)

diff --git a/src/OpenFOAM/containers/HashTables/HashTable/HashTable.C b/src/OpenFOAM/containers/HashTables/HashTable/HashTable.C
index 298a0af95ce..97cb2b321b0 100644
--- a/src/OpenFOAM/containers/HashTables/HashTable/HashTable.C
+++ b/src/OpenFOAM/containers/HashTables/HashTable/HashTable.C
@@ -485,6 +485,43 @@ void HashTable<T, Key, Hash>::operator=(const HashTable<T, Key, Hash>& ht)
 }
 
 
+template<class T, class Key, class Hash>
+bool HashTable<T, Key, Hash>::operator==(const HashTable<T, Key, Hash>& ht)
+ const
+{
+    // Are all my elements in ht?
+    for (const_iterator iter = begin(); iter != end(); ++iter)
+    {
+        const_iterator fnd = ht.find(iter.key());
+
+        if (fnd == ht.end() || (fnd() != iter()))
+        {
+            return false;
+        }
+    }
+
+    // Are all ht elements in me?
+    for (const_iterator iter = ht.begin(); iter != ht.end(); ++iter)
+    {
+        const_iterator fnd = find(iter.key());
+
+        if (fnd == end() || (fnd() != iter()))
+        {
+            return false;
+        }
+    }
+    return true;
+}
+
+
+template<class T, class Key, class Hash>
+bool HashTable<T, Key, Hash>::operator!=(const HashTable<T, Key, Hash>& ht)
+ const
+{
+    return !(operator==(ht));
+}
+
+
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 } // End namespace Foam
diff --git a/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H b/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H
index 02609be7fa6..2f3913d2e2c 100644
--- a/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H
+++ b/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H
@@ -223,6 +223,15 @@ public:
         //- Assignment
         void operator=(const HashTable<T, Key, Hash>&);
 
+        //- Equality. Two hashtables are equal if all contents of first are
+        //  also in second and vice versa. So does not depend on table size or
+        //  order!
+        bool operator==(const HashTable<T, Key, Hash>&) const;
+
+        //- The opposite of the equality operation. Takes linear time.
+        bool operator!=(const HashTable<T, Key, Hash>&) const;
+
+
 
     // STL type definitions
 
-- 
GitLab