0022815: Missing delete operator for placement new
[occt.git] / src / Poly / Poly_CoherentTriPtr.cxx
1 // File:      Poly_CoherentTriPtr.cxx
2 // Created:   08.12.07 12:33
3 // Author:    Alexander GRIGORIEV
4 // Copyright: Open Cascade 2007
5
6
7 #include <Poly_CoherentTriPtr.hxx>
8
9 //=======================================================================
10 //function : Iterator::Next
11 //purpose  :
12 //=======================================================================
13
14 void Poly_CoherentTriPtr::Iterator::Next ()
15 {
16   if (myCurrent)
17   {
18     myCurrent = myCurrent->myNext;
19     if (myCurrent == myFirst)
20       myCurrent = 0L;
21   }
22 }
23
24 //=======================================================================
25 //function : Append
26 //purpose  : 
27 //=======================================================================
28
29 void Poly_CoherentTriPtr::Append
30                         (const Poly_CoherentTriangle *           pTri,
31                          const Handle_NCollection_BaseAllocator& theAlloc)
32 {
33   Handle(NCollection_BaseAllocator) anAlloc = theAlloc;
34   if (theAlloc.IsNull())
35     anAlloc = NCollection_BaseAllocator::CommonBaseAllocator();
36   Poly_CoherentTriPtr * aNewPtr = new (anAlloc) Poly_CoherentTriPtr(* pTri);
37   aNewPtr->myNext = myNext;
38   myNext->myPrevious = aNewPtr;
39   aNewPtr->myPrevious = this;
40   myNext = aNewPtr;
41 }
42
43 //=======================================================================
44 //function : Prepend
45 //purpose  : 
46 //=======================================================================
47
48 void Poly_CoherentTriPtr::Prepend
49                         (const Poly_CoherentTriangle *           pTri,
50                          const Handle_NCollection_BaseAllocator& theAlloc)
51 {
52   Handle(NCollection_BaseAllocator) anAlloc = theAlloc;
53   if (theAlloc.IsNull())
54     anAlloc = NCollection_BaseAllocator::CommonBaseAllocator();
55   Poly_CoherentTriPtr * aNewPtr = new (anAlloc) Poly_CoherentTriPtr(* pTri);
56   aNewPtr->myPrevious = myPrevious;
57   myPrevious->myNext = aNewPtr;
58   aNewPtr->myNext = this;
59   myPrevious = aNewPtr;
60 }
61
62 //=======================================================================
63 //function : Remove
64 //purpose  : 
65 //=======================================================================
66
67 void Poly_CoherentTriPtr::Remove
68                         (Poly_CoherentTriPtr *                   thePtr,
69                          const Handle_NCollection_BaseAllocator& theAlloc)
70 {
71   Handle(NCollection_BaseAllocator) anAlloc = theAlloc;
72   if (theAlloc.IsNull())
73     anAlloc = NCollection_BaseAllocator::CommonBaseAllocator();
74   if (thePtr->myNext && thePtr->myPrevious) {
75     thePtr->myPrevious->myNext = thePtr->myNext;
76     thePtr->myNext->myPrevious = thePtr->myPrevious;
77     thePtr->myNext = thePtr;
78     thePtr->myPrevious = thePtr;
79   }
80   anAlloc->Free(thePtr);
81 }
82
83 //=======================================================================
84 //function : RemoveList
85 //purpose  : 
86 //=======================================================================
87
88 void Poly_CoherentTriPtr::RemoveList
89                         (Poly_CoherentTriPtr *                   thePtr,
90                          const Handle_NCollection_BaseAllocator& theAlloc)
91 {
92   Handle(NCollection_BaseAllocator) anAlloc = theAlloc;
93   if (theAlloc.IsNull())
94     anAlloc = NCollection_BaseAllocator::CommonBaseAllocator();
95   Poly_CoherentTriPtr * aPtr = thePtr;
96   do {
97     if (aPtr == 0L)
98       break;
99     Poly_CoherentTriPtr * aLostPtr = aPtr;
100     aPtr = aPtr->myNext;
101     anAlloc->Free(aLostPtr);
102   } while (aPtr != thePtr);
103 }