0028186: Foundation Classes, NCollection_List - methods "Remove" and "Contains" preve...
authorkgv <kgv@opencascade.com>
Mon, 5 Dec 2016 09:57:27 +0000 (12:57 +0300)
committerapn <apn@opencascade.com>
Thu, 8 Dec 2016 14:02:48 +0000 (17:02 +0300)
::Remove() and ::Contains() are now defined as template methods
to allow using NCollection_List with types without quality operator.

src/NCollection/NCollection_List.hxx
src/NCollection/NCollection_StlIterator.hxx

index 8719407..33bd5aa 100644 (file)
@@ -200,7 +200,8 @@ public:
   }
 
   //! Remove the first occurrence of the object.
-  Standard_Boolean Remove (const TheItemType& theObject)
+  template<typename TheValueType> // instantiate this method on first call only for types defining equality operator
+  Standard_Boolean Remove (const TheValueType& theObject)
   {
     for (Iterator anIter (*this); anIter.More(); anIter.Next())
     {
@@ -285,7 +286,8 @@ public:
   { PReverse(); }
 
   //! Return true if object is stored in the list.
-  Standard_Boolean Contains (const TheItemType& theObject) const
+  template<typename TheValueType> // instantiate this method on first call only for types defining equality operator
+  Standard_Boolean Contains (const TheValueType& theObject) const
   {
     for (Iterator anIter (*this); anIter.More(); anIter.Next())
     {
index d666270..8e6c6ea 100644 (file)
@@ -101,6 +101,12 @@ public:
     return myIterator;
   }
 
+  //! Access to NCollection iterator instance
+  BaseIterator& ChangeIterator()
+  {
+    return myIterator;
+  }
+
 protected: //! @name methods related to forward STL iterator
 
   // Note: Here we use SFINAE (Substitution failure is not an error) to choose