NeoPZ
pzlink.h
Go to the documentation of this file.
1 
6 #ifndef _TLINKHH_
7 #define _TLINKHH_
8 
9 #include <stdio.h>
10 
11 
12 #ifdef WORKPOOL
13 
14 class TPZWorkPool;
15 
16 #endif
17 
18 
23 template< class ElemType >
24 class TPZLink
25 {
32  struct Node
33  {
34  ElemType elem;
36  };
37 
38 public:
40  TPZLink();
42  ~TPZLink();
43 
44 #ifdef WORKPOOL
45 
49  void SetWorkPool(TPZWorkPool *wp);
50 #endif
51 
62  int Insert( ElemType &elem );
67  int Append( ElemType &elem );
69  int Remove();
74  int Update( ElemType &elem );
76  int Clear();
77 
82  int Head();
84  int Next();
89  int Get( ElemType *pElem );
91  ElemType *GetNode();
96  int GetLast( ElemType *pElem );
97 
98 private:
100  Node *fHead;
102  Node *fLast;
104  Node *fThis;
106  Node **fpBefore;
107 #ifdef WORKPOOL
108 
109  TPZWorkPool *fWp;
110 #endif
111 
112 };
113 
114 
115 /*** Head ***/
116 template< class ElemType >
117 inline int
119 {
120  fpBefore = &fHead;
121  return( (fThis = fHead) != NULL );
122 }
123 
124 /*** Next ***/
125 template< class ElemType >
126 inline int
128 {
129  if ( fThis == NULL )
130  return( 0 );
131 
132  fpBefore = &fThis->next;
133  fThis = fThis->next;
134  return( 1 );
135 }
136 
137 /*** Get ***/
138 template< class ElemType >
139 inline int
140 TPZLink<ElemType>::Get( ElemType *pElem )
141 {
142  if ( fThis == NULL )
143  return( 0 );
144 
145  *pElem = fThis->elem;
146  return( 1 );
147 }
148 
149 /*** GetNode ***/
150 template< class ElemType >
151 inline ElemType *
152 TPZLink<ElemType>::GetNode()//TPZLink<ElemType>::GetNode()
153 {
154  if(fThis) return &(fThis->elem);
155  else return NULL;
156 }
157 
158 /*** Get Last ***/
159 template< class ElemType >
160 inline int
161 TPZLink<ElemType>::GetLast( ElemType *pElem )
162 {
163  if ( fLast == NULL )
164  return( 0 );
165 
166  *pElem = fLast->elem;
167  return( 1 );
168 }
169 
170 #ifdef WORKPOOL
171 template< class ElemType >
172 inline void
173 TPZLink<ElemType>::SetWorkPool( TPZWorkPool *wp )
174 {
175  fWp = wp;
176 }
177 #endif
178 
179 #endif