0024742: Remove rarely used collection classes: SList
[occt.git] / src / NCollection / NCollection_SList.hxx
diff --git a/src/NCollection/NCollection_SList.hxx b/src/NCollection/NCollection_SList.hxx
deleted file mode 100644 (file)
index 5a0503f..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-// Created on: 2002-04-17
-// Created by: Alexander Kartomin (akm)
-// Copyright (c) 2002-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-#ifndef NCollection_SList_HeaderFile
-#define NCollection_SList_HeaderFile
-
-#include <NCollection_BaseCollection.hxx>
-
-#if !defined No_Exception && !defined No_Standard_NoSuchObject
-#include <Standard_NoSuchObject.hxx>
-#endif
-
-/**
- * Purpose:     An SList is a LISP like list of Items.
- *              An SList is :
- *                . Empty.
- *                . Or it has a Value and a  Tail  which is an other SList. 
- *              
- *              The Tail of an empty list is an empty list.
- *              SList are  shared.  It  means   that they  can  be
- *              modified through other lists.
- *              SList may  be used  as Iterators. They  have Next,
- *              More, and value methods. To iterate on the content
- *              of the list S just do.
- *              
- *              SList Iterator;
- *              for (Iterator = S; Iterator.More(); Iterator.Next())
- *                X = Iterator.Value();
- *            
- *              Memory usage  is  automatically managed for  SLists
- *              (using reference counts).
- *             
- * Example:
- *              If S1 and S2 are SLists :
- *              if S1.Value() is X.
- *              
- *              And the following is done :
- *              S2 = S1;
- *              S2.SetValue(Y);
- *            
- *              S1.Value() becomes also Y.   So SList must be used
- *              with   care.  Mainly  the SetValue()    method  is
- *              dangerous. 
- */            
-template <class TheItemType> class NCollection_SList
-  : public NCollection_BaseCollection<TheItemType>,
-    public NCollection_BaseCollection<TheItemType>::Iterator
-{
- public:
-  //!   The node of SList
-  class SListNode
-  {
-  private:
-    //! Constructor
-    SListNode (const TheItemType& theItem,
-               const NCollection_SList& theTail) :
-                 myCount(1),
-                 myValue(theItem) 
-    { myTail = new (theTail.myAllocator) NCollection_SList(theTail); }
-    //! Tail
-    NCollection_SList& Tail (void)
-    { return (*myTail); }
-    //! Value
-    TheItemType& Value (void)         
-    { return myValue; }
-    //! Clear
-    void Clear (void)
-    {
-      myTail->Clear();
-      myTail->myAllocator->Free(myTail);
-    }
-
-    DEFINE_STANDARD_ALLOC
-    DEFINE_NCOLLECTION_ALLOC
-
-  private:
-    // ---------- PRIVATE FIELDS ------------
-    Standard_Integer    myCount; //!< Reference count
-    NCollection_SList * myTail;  //!< The tail
-    TheItemType         myValue; //!< Datum
-
-    // Everything above is private. Only SList has an access
-    friend class NCollection_SList<TheItemType>;
-  }; // End of nested class SListNode
-
- public:
-  // ---------- PUBLIC METHODS ------------
-
-  //! Empty constructor
-  NCollection_SList(const Handle(NCollection_BaseAllocator)& theAllocator=0L) :
-    NCollection_BaseCollection<TheItemType>(theAllocator),
-    myNode(NULL) {}
-
-  //! Constructor
-  NCollection_SList(const TheItemType&       theItem,
-                    const NCollection_SList& theTail) :
-    NCollection_BaseCollection<TheItemType>(theTail.myAllocator)
-  { myNode = new (theTail.myAllocator) SListNode(theItem,theTail); }
-
-  //! Copy constructor
-  NCollection_SList (const NCollection_SList& theOther) :
-    NCollection_BaseCollection<TheItemType>(theOther.myAllocator)
-  { 
-    myNode = theOther.myNode; 
-    if (myNode)
-      myNode->myCount++;
-  }
-
-  //! Clear the items out
-  void Clear (void)
-  {
-    if (!myNode)
-      return;
-    myNode->myCount--; 
-    if (myNode->myCount < 1)
-    {
-      myNode->Clear();
-      this->myAllocator->Free(myNode);
-    }
-    myNode = NULL;
-  }
-
-  //! Make this list identical to theOther
-  NCollection_SList& operator= (const NCollection_SList& theOther)
-  { 
-    if (myNode != theOther.myNode) 
-    {
-      if (theOther.myNode) 
-        theOther.myNode->myCount++;
-      Clear();
-      this->myAllocator = theOther.myAllocator;
-      myNode = theOther.myNode;
-    }
-    return *this;
-  }
-
-  //! Replace this list by the items of theOther collection
-  virtual void Assign (const NCollection_BaseCollection<TheItemType>& theOther)
-  {
-    if (this == &theOther) 
-      return;
-    Clear();
-    TYPENAME NCollection_BaseCollection<TheItemType>::Iterator& anIter = 
-      theOther.CreateIterator();
-    if (!anIter.More())
-      return;
-    SListNode *aNode, *aPrevNode=NULL;
-    for (; anIter.More(); anIter.Next())
-    {
-      aNode = new (this->myAllocator) SListNode 
-        (anIter.Value(), NCollection_SList(this->myAllocator));
-      if (IsEmpty())
-        myNode = aNode;
-      else
-        aPrevNode->Tail().myNode = aNode;
-      aPrevNode = aNode;
-    }
-  }
-
-  //! IsEmpty query
-  Standard_Boolean IsEmpty (void) const
-  { return (myNode==NULL); }
-
-  //! Value - constant access
-  virtual const TheItemType& Value (void) const
-  {
-#if !defined No_Exception && !defined No_Standard_NoSuchObject
-    if (IsEmpty())
-      Standard_NoSuchObject::Raise ("NCollection_SList::Value");
-#endif
-    return myNode->Value();
-  }
-
-  //! ChangeValue - variable access
-  virtual TheItemType& ChangeValue (void) const
-  { 
-#if !defined No_Exception && !defined No_Standard_NoSuchObject
-    if (IsEmpty())
-      Standard_NoSuchObject::Raise ("NCollection_SList::ChangeValue");
-#endif
-    return myNode->Value();
-  }
-
-  //! SetValue
-  void SetValue (const TheItemType& theItem)
-  { 
-#if !defined No_Exception && !defined No_Standard_NoSuchObject
-    if (IsEmpty())
-      Standard_NoSuchObject::Raise ("NCollection_SList::SetValue");
-#endif
-    myNode->Value() = theItem;
-  }
-
-  //! Tail
-  const NCollection_SList& Tail (void) const
-  { 
-    if (!IsEmpty()) 
-      return  myNode->Tail();
-    else
-      return *this;
-  }
-
-  //! ChangeTail
-  NCollection_SList& ChangeTail (void)
-  { 
-    if (!IsEmpty()) 
-      return myNode->Tail();
-    else
-      return *this;
-  }
-
-  //! SetTail
-  void SetTail (NCollection_SList& theList)
-  { 
-    if (!IsEmpty())
-      myNode->Tail() = theList;
-    else
-      *this = theList;
-  }
-
-  //! Construct
-  void Construct(const TheItemType& theItem)
-  { *this = NCollection_SList (theItem, *this); }
-
-  //! Constructed
-  NCollection_SList Constructed(const TheItemType& theItem) const
-  { return NCollection_SList (theItem, *this); }
-
-  //! ToTail
-  void ToTail (void)
-  { *this = Tail(); }
-
-  //! Initialize (~Assign)
-  void Initialize (const NCollection_SList& theOther)
-  { *this = theOther; }
-
-  //! Init (virtual method of base iterator)
-  void Init (const NCollection_SList& theOther)
-  { *this = theOther; }
-
-  //! More (~!IsEmpty)
-  virtual Standard_Boolean More (void) const
-  { return !IsEmpty(); }
-
-  //! Next (~ToTail)
-  virtual void Next (void) 
-  { ToTail(); }
-
-  //! Size - Number of items
-  virtual Standard_Integer Size (void) const
-  { return (IsEmpty() ? 0 : 1+myNode->Tail().Size()); }
-
-  //! Destructor - clears the SList
-  ~NCollection_SList (void)
-  { Clear(); }
-
-
- private:
-  // ----------- PRIVATE METHODS -----------
-
-  //! Creates Iterator for use on BaseCollection
-  virtual TYPENAME NCollection_BaseCollection<TheItemType>::Iterator& 
-    CreateIterator(void) const
-  { return *(new (this->IterAllocator()) NCollection_SList(*this)); }
-
- private:
-  // ---------- PRIVATE FIELDS ------------
-  SListNode*    myNode;
-
-  friend class SListNode;
-};
-
-#endif