summaryrefslogtreecommitdiff
path: root/inc/PCollection_HSingleList.gxx
blob: d2651ca4a1c4d7af91beafbc01e66a2e8032309d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
// ----------------------------------------------------------------------
// 
// HSingleList implementation:
// 
// Last Revision : Feb,10 1992 J.P Tirault
//                 Implementation of ShallowCopy, ShallowDump
//                 methods.
// -------------------------------------------------------------------------

#include <Standard_NoSuchObject.hxx>
#include <Standard_NotImplemented.hxx>
#include <Standard_ProgramError.hxx>
#include <Standard_OStream.hxx>

// -------------------------------------------------------------------------
//                                                                         -
// Constructor Returns an empty list                                       -
// ----------                                                              -
//                                                                         -
// -------------------------------------------------------------------------
PCollection_HSingleList::PCollection_HSingleList ()
{
 Next.Nullify();
}


// -------------------------------------------------------------------------
//                                                                         -
// Construct : Add an item at the beginning of the list                    -
// ---------                                                               -
//                                                                         -
// -------------------------------------------------------------------------
Handle(PCollection_HSingleList) 
  PCollection_HSingleList::Construct(const Item& T)const
{


 Handle(PCollection_HSingleList) me , L ;
 me = this;
#ifndef OBJS
 L = new PCollection_HSingleList;
#else
 L = new (os_segment::of(this)) PCollection_HSingleList;
#endif
 L->ChangeForwardPointer ( me );
 L->SetValue ( T );			
 return L;
}


// -------------------------------------------------------------------------
//                                                                         -
// Shallowcopy : Redefinition of the shallowcopy dump                      -
// -----------                                                             -

//                                                                         -
// -------------------------------------------------------------------------
Handle(Standard_Persistent) PCollection_HSingleList::ShallowCopy() const
{
  Handle(PCollection_HSingleList) TheList,          // Traversal depth of <this>
                                TheCopy,          // The list returned
                                Pred,             // Backward pointer
                                Succ;             // Forward pointer
#ifndef OBJS
  TheCopy = new PCollection_HSingleList;            // Initialization of the list
#else
  TheCopy = new (os_segment::of(this)) PCollection_HSingleList;            // Initialization of the list
#endif
                                                  // that will be returned
  Standard_Boolean FirstTime = Standard_True;                 

  TheList = this;                                 // Start at the beginning
  Pred = Succ = TheCopy;
  
  while ( ! TheList->IsEmpty() ) {                // Append each item at the
    Succ = Succ->Construct(TheList->Value());     // end of the list
    if ( FirstTime ){
      FirstTime = Standard_False;
      TheCopy   = Succ;
    }
    else{
      Pred->ChangeForwardPointer(Succ);           // Make the link between 
    }                                             // Pred and Succ
    Pred = Succ;
    Succ = Succ->Tail();
    TheList = TheList->Tail();                   
  }
  return TheCopy;                                 // Returns the header
}

// -------------------------------------------------------------------------
//                                                                         -
// ShallowDump Redefinition of the shallowdump method                      -
// -----------                                                             -
//                                                                         -
// -------------------------------------------------------------------------
void PCollection_HSingleList::ShallowDump(Standard_OStream& S) const
{
  Handle(PCollection_HSingleList) TheList;
  TheList = this;
  S << "begin class HSingleList " << endl;
  while ( ! TheList->IsEmpty() ) {                
    ::ShallowDump(TheList->Value(), S);
    TheList = TheList->Tail();
  }
  S << "end class HSingleList" << endl;
  
}



/* Anciens INLINE */

Item PCollection_HSingleList::Value() const {
  Standard_NoSuchObject_Raise_if(IsEmpty(),
                                 "Empty Element in HSingleList::Value");
     return Data;
}

Handle(PCollection_HSingleList) PCollection_HSingleList::Tail() const {
  Standard_NoSuchObject_Raise_if (IsEmpty(),
                                  "Empty Element in HSingleList::Value");
  return Next;
}


Standard_Boolean PCollection_HSingleList::IsEmpty()const
{
  return Next.IsNull();
}


void PCollection_HSingleList::SetValue(const Item& T)
{
  Standard_NoSuchObject_Raise_if (IsEmpty(),
                                  "Empty Element in HSingleList::SetValue");
  Data = T;
}


// -------------------------------------------------------------------------
//                                                                         -
// SwapTail : Exchange the tail of the current list with an another list   -
// --------                                                                -
//                                                                         -
// -------------------------------------------------------------------------
void PCollection_HSingleList::SwapTail(Handle(PCollection_HSingleList)&
                                            WithList)
{
  Standard_NoSuchObject_Raise_if (IsEmpty(),
                                  "Empty Element in HSingleList::SwapTail");
  Handle(PCollection_HSingleList) L = Next;
  Next     = WithList;
  WithList = L;
}


void PCollection_HSingleList::ChangeForwardPointer
   (const Handle(PCollection_HSingleList)& L)
{
     Next = L;
}