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) ...
This commit is contained in:
Mark Olesen
2018-12-20 18:03:16 +01:00
parent 08335beb6f
commit 3560884abe
3 changed files with 15 additions and 1 deletions

View File

@ -40,7 +40,7 @@ using namespace Foam;
template<class Iter>
void printIf(const Iter& iter)
{
if (iter.found())
if (iter)
{
Info<< *iter;
}

View File

@ -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;

View File

@ -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==