diff --git a/src/OpenFOAM/containers/HashTables/HashTable/HashTable.C b/src/OpenFOAM/containers/HashTables/HashTable/HashTable.C index 298a0af95ce2a40659d82c30d57441c253dd72bc..97cb2b321b0d5f3a5246de0ed7bc07477244f687 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 02609be7fa6a980b7005fcce33debab61094cd23..2f3913d2e2cd8f8bc8162738c47f8ccfaff04827 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