Integration of OCCT 6.5.0 from SVN
[occt.git] / src / TCollection / TCollection_Stack.gxx
CommitLineData
7fd59977 1// File: TCollection_Stack.gxx
2// Created: Mon Jan 18 14:30:12 1993
3// Author: Remi LEQUETTE
4// <rle@phylox>
5
6#include <Standard_NoSuchObject.hxx>
7
8//=======================================================================
9//function : TCollection_Stack
10//purpose :
11//=======================================================================
12
13TCollection_Stack::TCollection_Stack() :
14 myTop(NULL),
15 myDepth(0)
16{
17}
18
19//=======================================================================
20//function : TCollection_Stack
21//purpose :
22//=======================================================================
23
24TCollection_Stack::TCollection_Stack(const TCollection_Stack& Other)
25{
26 if (!Other.IsEmpty()) {
27 cout << "WARNING copy constructor of non empty stack !"<<endl;
28 }
29 TCollection_StackNode* p = (TCollection_StackNode*) Other.myTop;
30 TCollection_StackNode* q;
31 TCollection_StackNode* r = NULL;
32 myTop = NULL;
33 while (p) {
34 q = new TCollection_StackNode(p->Value(),(TCollection_MapNode*)0L);
35 if (r) r->Next() = q;
36 else myTop = q;
37 r = q;
38 p = (TCollection_StackNode*)p->Next();
39 }
40 myDepth = Other.myDepth;
41}
42
43//=======================================================================
44//function : Assign
45//purpose :
46//=======================================================================
47
48const TCollection_Stack& TCollection_Stack::Assign
49 (const TCollection_Stack& Other)
50{
51 if (this == &Other) return *this;
52 Clear();
53 TCollection_StackNode* p = (TCollection_StackNode*) Other.myTop;
54 TCollection_StackNode* q;
55 TCollection_StackNode* r = NULL;
56 while (p) {
57 q = new TCollection_StackNode(p->Value(),(TCollection_MapNode*)0L);
58 if (r) r->Next() = q;
59 else myTop = q;
60 r = q;
61 p = (TCollection_StackNode*)p->Next();
62 }
63 myDepth = Other.myDepth;
64 return *this;
65}
66
67
68//=======================================================================
69//function : Top
70//purpose :
71//=======================================================================
72
73const Item& TCollection_Stack::Top() const
74{
75 Standard_NoSuchObject_Raise_if(IsEmpty(),"TCollection_Stack");
76 return ((TCollection_StackNode*)myTop)->Value();
77}
78
79//=======================================================================
80//function : Push
81//purpose :
82//=======================================================================
83
84void TCollection_Stack::Push(const Item& I)
85{
86 myTop = new TCollection_StackNode(I,(TCollection_StackNode*)myTop);
87 myDepth++;
88}
89
90//=======================================================================
91//function : Pop
92//purpose :
93//=======================================================================
94
95void TCollection_Stack::Pop()
96{
97 Standard_NoSuchObject_Raise_if(IsEmpty(),"TCollection_Stack");
98 TCollection_StackNode* p = (TCollection_StackNode*) myTop;
99 myTop = p->Next();
100 delete p;
101 myDepth--;
102}
103
104//=======================================================================
105//function : Clear
106//purpose :
107//=======================================================================
108
109void TCollection_Stack::Clear()
110{
111 TCollection_StackNode* p = (TCollection_StackNode*) myTop;
112 TCollection_StackNode* q;
113 while(p) {
114 q = (TCollection_StackNode*)p->Next();
115 delete p;
116 p = q;
117 }
118 myDepth = 0;
119 myTop = NULL;
120}
121
122//=======================================================================
123//function : ChangeTop
124//purpose :
125//=======================================================================
126
127Item& TCollection_Stack::ChangeTop()
128{
129 Standard_NoSuchObject_Raise_if(IsEmpty(),"TCollection_Stack");
130 return ((TCollection_StackNode*)myTop)->Value();
131}
132
133//=======================================================================
134//function : Next
135//purpose :
136//=======================================================================
137
138void TCollection_StackIterator::Next()
139{
140 current = ((TCollection_StackNode*)current)->Next();
141}
142
143//=======================================================================
144//function : Value
145//purpose :
146//=======================================================================
147
148const Item& TCollection_StackIterator::Value() const
149{
150 Standard_NoSuchObject_Raise_if(current == NULL,
151 "TCollection_StackIterator");
152 return ((TCollection_StackNode*)current)->Value();
153}