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