diff --git a/applications/test/PackedList/PackedListTest.C b/applications/test/PackedList/PackedListTest.C index 41796562ba..442c6dec5b 100644 --- a/applications/test/PackedList/PackedListTest.C +++ b/applications/test/PackedList/PackedListTest.C @@ -73,6 +73,50 @@ int main(int argc, char *argv[]) list1[1] = list1[8] = list1[10] = list1[14] = 2; list1.print(Info); + + Info<< "\ntest operator== between references\n"; + if (list1[1] == list1[8]) + { + Info<< "[1] == [8] (expected)\n"; + } + else + { + Info<< "[1] != [8] (unexpected)\n"; + } + + if (list1[0] != list1[1]) + { + Info<< "[0] != [1] (expected)\n"; + } + else + { + Info<< "[0] == [1] (unexpected)\n"; + } + + Info<< "\ntest operator== with iterator\n"; + { + PackedList<3>::iterator iter = list1[1]; + + if (iter != list1[8]) + { + Info<< "iter != [8] (expected)\n"; + } + else + { + Info<< "iter == [8] (unexpected)\n"; + } + + if (*iter != list1[8]) + { + Info<< "*iter != [8] (unexpected)\n"; + } + else + { + Info<< "*iter == [8] (expected)\n"; + } + } + + { const PackedList<3>& constLst = list1; Info<< "\ntest operator[] const with out-of-range index\n"; diff --git a/src/OpenFOAM/containers/Lists/PackedList/PackedList.H b/src/OpenFOAM/containers/Lists/PackedList/PackedList.H index 182c469b41..02bdae8da0 100644 --- a/src/OpenFOAM/containers/Lists/PackedList/PackedList.H +++ b/src/OpenFOAM/containers/Lists/PackedList/PackedList.H @@ -330,7 +330,7 @@ public: // Member Operators - //- Compare positions + //- Compare values (not positions) inline bool operator==(const iteratorBase&) const; inline bool operator!=(const iteratorBase&) const; @@ -380,6 +380,10 @@ public: // Member Operators + //- Compare positions (not values) + inline bool operator==(const iteratorBase&) const; + inline bool operator!=(const iteratorBase&) const; + //- Assign from iteratorBase, eg iter = packedlist[i] // An out-of-range iterator is assigned end() inline iterator& operator=(const iteratorBase&); @@ -425,17 +429,21 @@ public: //- Construct from iterator base, eg iter(packedlist[i]) // but also "const_iterator iter = packedlist[i];" - // An out-of-range iterator is assigned end() + // An out-of-range iterator is assigned cend() inline const_iterator(const iteratorBase&); //- Construct from base list and position index inline const_iterator(const PackedList*, const label); - //- Construct from non-const iterator + //- Construct from iterator inline const_iterator(const iterator&); // Member operators + //- Compare positions (not values) + inline bool operator==(const iteratorBase&) const; + inline bool operator!=(const iteratorBase&) const; + //- Assign from iteratorBase or derived // eg, iter = packedlist[i] or even iter = list.begin() inline const_iterator& operator=(const iteratorBase&); diff --git a/src/OpenFOAM/containers/Lists/PackedList/PackedListI.H b/src/OpenFOAM/containers/Lists/PackedList/PackedListI.H index 929688ef24..3b76234c2c 100644 --- a/src/OpenFOAM/containers/Lists/PackedList/PackedListI.H +++ b/src/OpenFOAM/containers/Lists/PackedList/PackedListI.H @@ -176,7 +176,7 @@ inline bool Foam::PackedList::iteratorBase::operator== const iteratorBase& iter ) const { - return this->index_ == iter.index_; + return this->get() == iter.get(); } @@ -186,7 +186,7 @@ inline bool Foam::PackedList::iteratorBase::operator!= const iteratorBase& iter ) const { - return this->index_ != iter.index_; + return this->get() != iter.get(); } @@ -311,6 +311,48 @@ inline Foam::PackedList::const_iterator::const_iterator {} +template +inline bool Foam::PackedList::iterator::operator== +( + const iteratorBase& iter +) const +{ + return this->index_ == iter.index_; +} + + +template +inline bool Foam::PackedList::iterator::operator!= +( + const iteratorBase& iter +) const +{ + return this->index_ != iter.index_; +} + + + +template +inline bool Foam::PackedList::const_iterator::operator== +( + const iteratorBase& iter +) const +{ + return this->index_ == iter.index_; +} + + +template +inline bool Foam::PackedList::const_iterator::operator!= +( + const iteratorBase& iter +) const +{ + return this->index_ != iter.index_; +} + + + template inline typename Foam::PackedList::iterator& Foam::PackedList::iterator::operator=(const iteratorBase& iter)