From 3560884abe8a672425e363349d9ef9b2161ddb2c Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> Date: Thu, 20 Dec 2018 18:03:16 +0100 Subject: [PATCH] ENH: allow direct testing of HashTable iterator as a bool - can be used as a more natural test on the iterator. For example, with HashTable<..> table; auto iter = table.find(...); Following are now all equivalent: 1. if (iter != table.end()) ... 2. if (iter.found()) ... 3. if (iter) ... --- applications/test/HashSet/Test-hashSet.C | 2 +- src/OpenFOAM/containers/HashTables/HashTable/HashTable.H | 5 +++++ .../containers/HashTables/HashTable/HashTableIterI.H | 9 +++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/applications/test/HashSet/Test-hashSet.C b/applications/test/HashSet/Test-hashSet.C index eeae7ff0d0b..a4593d9dafb 100644 --- a/applications/test/HashSet/Test-hashSet.C +++ b/applications/test/HashSet/Test-hashSet.C @@ -40,7 +40,7 @@ using namespace Foam; template<class Iter> void printIf(const Iter& iter) { - if (iter.found()) + if (iter) { Info<< *iter; } diff --git a/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H b/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H index 7b5e2afb2e4..323d5450f03 100644 --- a/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H +++ b/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H @@ -685,8 +685,13 @@ protected: //- The key associated with the iterator inline const Key& key() const; + // Member Operators + //- True if iterator points to an entry + // This can be used directly instead of comparing to end() + explicit inline operator bool() const noexcept; + //- Compare hash-entry element pointers. // Independent of const/non-const access inline bool operator==(const Iterator<true>& iter) const; diff --git a/src/OpenFOAM/containers/HashTables/HashTable/HashTableIterI.H b/src/OpenFOAM/containers/HashTables/HashTable/HashTableIterI.H index cc85a8b9140..93132e2bc17 100644 --- a/src/OpenFOAM/containers/HashTables/HashTable/HashTableIterI.H +++ b/src/OpenFOAM/containers/HashTables/HashTable/HashTableIterI.H @@ -124,6 +124,15 @@ inline const Key& Foam::HashTable<T, Key, Hash>::Iterator<Const>::key() const } +template<class T, class Key, class Hash> +template<bool Const> +inline Foam::HashTable<T, Key, Hash>::Iterator<Const>::operator +bool() const noexcept +{ + return entry_; +} + + template<class T, class Key, class Hash> template<bool Const> inline bool Foam::HashTable<T, Key, Hash>::Iterator<Const>::operator== -- GitLab