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