xref: /AOO42X/main/autodoc/inc/cosv/tpl/swelist.hxx (revision 9bce9b0d387299c68bd81d539e1478357a103de5)
1*8a106958SDamjan Jovanovic /**************************************************************
2*8a106958SDamjan Jovanovic  *
3*8a106958SDamjan Jovanovic  * Licensed to the Apache Software Foundation (ASF) under one
4*8a106958SDamjan Jovanovic  * or more contributor license agreements.  See the NOTICE file
5*8a106958SDamjan Jovanovic  * distributed with this work for additional information
6*8a106958SDamjan Jovanovic  * regarding copyright ownership.  The ASF licenses this file
7*8a106958SDamjan Jovanovic  * to you under the Apache License, Version 2.0 (the
8*8a106958SDamjan Jovanovic  * "License"); you may not use this file except in compliance
9*8a106958SDamjan Jovanovic  * with the License.  You may obtain a copy of the License at
10*8a106958SDamjan Jovanovic  *
11*8a106958SDamjan Jovanovic  *   http://www.apache.org/licenses/LICENSE-2.0
12*8a106958SDamjan Jovanovic  *
13*8a106958SDamjan Jovanovic  * Unless required by applicable law or agreed to in writing,
14*8a106958SDamjan Jovanovic  * software distributed under the License is distributed on an
15*8a106958SDamjan Jovanovic  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*8a106958SDamjan Jovanovic  * KIND, either express or implied.  See the License for the
17*8a106958SDamjan Jovanovic  * specific language governing permissions and limitations
18*8a106958SDamjan Jovanovic  * under the License.
19*8a106958SDamjan Jovanovic  *
20*8a106958SDamjan Jovanovic  *************************************************************/
21*8a106958SDamjan Jovanovic 
22*8a106958SDamjan Jovanovic 
23*8a106958SDamjan Jovanovic 
24*8a106958SDamjan Jovanovic #ifndef CSV_SWELIST_HXX
25*8a106958SDamjan Jovanovic #define CSV_SWELIST_HXX
26*8a106958SDamjan Jovanovic 
27*8a106958SDamjan Jovanovic // USED SERVICES
28*8a106958SDamjan Jovanovic     // BASE CLASSES
29*8a106958SDamjan Jovanovic     // COMPONENTS
30*8a106958SDamjan Jovanovic     // PARAMETERS
31*8a106958SDamjan Jovanovic #include <cosv/tpl/dyn.hxx>
32*8a106958SDamjan Jovanovic 
33*8a106958SDamjan Jovanovic 
34*8a106958SDamjan Jovanovic namespace csv
35*8a106958SDamjan Jovanovic {
36*8a106958SDamjan Jovanovic 
37*8a106958SDamjan Jovanovic 
38*8a106958SDamjan Jovanovic template <class XX>
39*8a106958SDamjan Jovanovic class SweListElement
40*8a106958SDamjan Jovanovic {
41*8a106958SDamjan Jovanovic   public:
42*8a106958SDamjan Jovanovic     typedef SweListElement<XX> self;
43*8a106958SDamjan Jovanovic 
SweListElement(const XX & in_aObj)44*8a106958SDamjan Jovanovic                         SweListElement(
45*8a106958SDamjan Jovanovic                             const XX &          in_aObj )
46*8a106958SDamjan Jovanovic                                                 :   aObj(in_aObj), pNext(0) {}
47*8a106958SDamjan Jovanovic 
Obj() const48*8a106958SDamjan Jovanovic     const XX &          Obj() const             { return aObj; }
Obj()49*8a106958SDamjan Jovanovic     XX &                Obj()                   { return aObj; }
Next() const50*8a106958SDamjan Jovanovic     self *              Next() const            { return pNext; }
51*8a106958SDamjan Jovanovic 
SetNext(self * i_pNext)52*8a106958SDamjan Jovanovic     void                SetNext(
53*8a106958SDamjan Jovanovic                             self *              i_pNext )
54*8a106958SDamjan Jovanovic                                                 { pNext = i_pNext; }
55*8a106958SDamjan Jovanovic   private:
56*8a106958SDamjan Jovanovic     XX                  aObj;
57*8a106958SDamjan Jovanovic     self *              pNext;
58*8a106958SDamjan Jovanovic };
59*8a106958SDamjan Jovanovic 
60*8a106958SDamjan Jovanovic 
61*8a106958SDamjan Jovanovic 
62*8a106958SDamjan Jovanovic template <class XX>  class SweListIterator;
63*8a106958SDamjan Jovanovic template <class XX>  class SweListCIterator;
64*8a106958SDamjan Jovanovic 
65*8a106958SDamjan Jovanovic 
66*8a106958SDamjan Jovanovic template <class XX>
67*8a106958SDamjan Jovanovic class SweList
68*8a106958SDamjan Jovanovic {
69*8a106958SDamjan Jovanovic   public:
70*8a106958SDamjan Jovanovic     // TYPES
71*8a106958SDamjan Jovanovic     typedef SweList<XX>             self;
72*8a106958SDamjan Jovanovic     typedef XX                      value_type;
73*8a106958SDamjan Jovanovic     typedef SweListIterator<XX>     iterator;
74*8a106958SDamjan Jovanovic     typedef SweListCIterator<XX>    const_iterator;
75*8a106958SDamjan Jovanovic   private:
76*8a106958SDamjan Jovanovic     typedef SweListElement<XX>      elem;
77*8a106958SDamjan Jovanovic 
78*8a106958SDamjan Jovanovic   public:
79*8a106958SDamjan Jovanovic     // LIFECYCLE
SweList()80*8a106958SDamjan Jovanovic                         SweList()               : pTop(0), pTail(0) {}
~SweList()81*8a106958SDamjan Jovanovic                         ~SweList()              { erase_all(); }
82*8a106958SDamjan Jovanovic     // OPERATIONS
83*8a106958SDamjan Jovanovic     void                push_front(
84*8a106958SDamjan Jovanovic                             const XX &          i_aObj );
85*8a106958SDamjan Jovanovic     void                pop_front();
86*8a106958SDamjan Jovanovic     void                push_back(
87*8a106958SDamjan Jovanovic                             const XX &          i_aObj );
88*8a106958SDamjan Jovanovic     void                erase_all();
89*8a106958SDamjan Jovanovic 
90*8a106958SDamjan Jovanovic     // INQUIRY
begin() const91*8a106958SDamjan Jovanovic     const_iterator      begin() const           { return pTop; }
begin()92*8a106958SDamjan Jovanovic     iterator            begin()                 { return pTop; }
end() const93*8a106958SDamjan Jovanovic     const_iterator      end() const             { return (elem*)0; }
end()94*8a106958SDamjan Jovanovic     iterator            end()                   { return (elem*)0; }
front() const95*8a106958SDamjan Jovanovic     const XX &          front() const           { return pTop->Obj(); }
front()96*8a106958SDamjan Jovanovic     XX &                front()                 { return pTop->Obj(); }
back() const97*8a106958SDamjan Jovanovic     const XX &          back() const            { return pTail->Obj(); }
back()98*8a106958SDamjan Jovanovic     XX &                back()                  { return pTail->Obj(); }
99*8a106958SDamjan Jovanovic 
empty() const100*8a106958SDamjan Jovanovic     bool                empty() const           { return pTop == 0; }
101*8a106958SDamjan Jovanovic     uintt               size() const;
102*8a106958SDamjan Jovanovic 
103*8a106958SDamjan Jovanovic 
104*8a106958SDamjan Jovanovic   private:
105*8a106958SDamjan Jovanovic     // Forbiddden methods.
106*8a106958SDamjan Jovanovic                         SweList(
107*8a106958SDamjan Jovanovic                             const self &        i_rList );
108*8a106958SDamjan Jovanovic     self &              operator=(
109*8a106958SDamjan Jovanovic                             const self &        i_rList );
110*8a106958SDamjan Jovanovic 
111*8a106958SDamjan Jovanovic     // DATA
112*8a106958SDamjan Jovanovic     DYN elem *          pTop;
113*8a106958SDamjan Jovanovic     elem *              pTail;
114*8a106958SDamjan Jovanovic };
115*8a106958SDamjan Jovanovic 
116*8a106958SDamjan Jovanovic template <class XX>
117*8a106958SDamjan Jovanovic class SweList_dyn
118*8a106958SDamjan Jovanovic {
119*8a106958SDamjan Jovanovic   public:
120*8a106958SDamjan Jovanovic     // TYPES
121*8a106958SDamjan Jovanovic     typedef SweList_dyn<XX>         self;
122*8a106958SDamjan Jovanovic     typedef SweListElement< XX* >   elem;
123*8a106958SDamjan Jovanovic     typedef SweListIterator< XX* >  iterator;
124*8a106958SDamjan Jovanovic 
125*8a106958SDamjan Jovanovic     // LIFECYCLE
SweList_dyn()126*8a106958SDamjan Jovanovic                         SweList_dyn()       : pTop(0), pTail(0) {}
~SweList_dyn()127*8a106958SDamjan Jovanovic                         ~SweList_dyn()      { erase_all(); }
128*8a106958SDamjan Jovanovic     // OPERATIONS
129*8a106958SDamjan Jovanovic     void                push_front(
130*8a106958SDamjan Jovanovic                             XX *            i_pObj );
131*8a106958SDamjan Jovanovic     void                push_back(
132*8a106958SDamjan Jovanovic                             XX *            i_pObj );
133*8a106958SDamjan Jovanovic     void                pop_front();
134*8a106958SDamjan Jovanovic     void                erase_all();
135*8a106958SDamjan Jovanovic 
136*8a106958SDamjan Jovanovic     // INQUIRY
begin() const137*8a106958SDamjan Jovanovic     iterator            begin() const       { return pTop; }
end() const138*8a106958SDamjan Jovanovic     iterator            end() const         { return (elem*)0; }
front() const139*8a106958SDamjan Jovanovic     XX *                front() const       { return pTop->Obj(); }
back() const140*8a106958SDamjan Jovanovic     XX *                back() const        { return pTail->Obj(); }
141*8a106958SDamjan Jovanovic 
empty() const142*8a106958SDamjan Jovanovic     bool                empty() const       { return pTop == 0; }
143*8a106958SDamjan Jovanovic     uintt               size() const;
144*8a106958SDamjan Jovanovic 
145*8a106958SDamjan Jovanovic   private:
146*8a106958SDamjan Jovanovic     // Forbiddden methods.
147*8a106958SDamjan Jovanovic                         SweList_dyn(
148*8a106958SDamjan Jovanovic                             const self &        i_rList );
149*8a106958SDamjan Jovanovic     self &              operator=(
150*8a106958SDamjan Jovanovic                             const self &        i_rList );
151*8a106958SDamjan Jovanovic 
152*8a106958SDamjan Jovanovic     DYN elem *          pTop;
153*8a106958SDamjan Jovanovic     elem *              pTail;
154*8a106958SDamjan Jovanovic };
155*8a106958SDamjan Jovanovic 
156*8a106958SDamjan Jovanovic 
157*8a106958SDamjan Jovanovic 
158*8a106958SDamjan Jovanovic 
159*8a106958SDamjan Jovanovic template<class XX>
160*8a106958SDamjan Jovanovic class SweListIterator
161*8a106958SDamjan Jovanovic {
162*8a106958SDamjan Jovanovic   public:
163*8a106958SDamjan Jovanovic     typedef SweListIterator<XX> self;
164*8a106958SDamjan Jovanovic     typedef SweListElement<XX>  elem;
165*8a106958SDamjan Jovanovic 
SweListIterator(elem * i_pElem=0)166*8a106958SDamjan Jovanovic                         SweListIterator(
167*8a106958SDamjan Jovanovic                             elem *              i_pElem = 0)
168*8a106958SDamjan Jovanovic                                                 :   pElem(i_pElem) { }
169*8a106958SDamjan Jovanovic 
170*8a106958SDamjan Jovanovic     // OPERATORS
operator *() const171*8a106958SDamjan Jovanovic     XX &                operator*() const       { return pElem->Obj(); }
operator ++()172*8a106958SDamjan Jovanovic     self &              operator++()            { if (pElem != 0) pElem = pElem->Next();
173*8a106958SDamjan Jovanovic                                                   return *this; }
operator ==(const self & i_rIter) const174*8a106958SDamjan Jovanovic     bool                operator==(
175*8a106958SDamjan Jovanovic                             const self &        i_rIter ) const
176*8a106958SDamjan Jovanovic                                                 { return pElem == i_rIter.pElem; }
operator !=(const self & i_rIter) const177*8a106958SDamjan Jovanovic     bool                operator!=(
178*8a106958SDamjan Jovanovic                             const self &        i_rIter ) const
179*8a106958SDamjan Jovanovic                                                 { return pElem != i_rIter.pElem; }
180*8a106958SDamjan Jovanovic   private:
181*8a106958SDamjan Jovanovic     friend class SweListCIterator<XX>;
182*8a106958SDamjan Jovanovic 
183*8a106958SDamjan Jovanovic     elem *              pElem;
184*8a106958SDamjan Jovanovic };
185*8a106958SDamjan Jovanovic 
186*8a106958SDamjan Jovanovic template<class XX>
187*8a106958SDamjan Jovanovic class SweListCIterator
188*8a106958SDamjan Jovanovic {
189*8a106958SDamjan Jovanovic   public:
190*8a106958SDamjan Jovanovic     typedef SweListCIterator<XX> self;
191*8a106958SDamjan Jovanovic     typedef SweListElement<XX>  elem;
192*8a106958SDamjan Jovanovic 
SweListCIterator(const elem * i_pElem=0)193*8a106958SDamjan Jovanovic                         SweListCIterator(
194*8a106958SDamjan Jovanovic                             const elem *        i_pElem = 0)
195*8a106958SDamjan Jovanovic                                                 :   pElem(i_pElem) { }
196*8a106958SDamjan Jovanovic 
197*8a106958SDamjan Jovanovic     // OPERATORS
operator =(const SweListIterator<XX> & i_rIter)198*8a106958SDamjan Jovanovic     self &              operator=(
199*8a106958SDamjan Jovanovic                             const SweListIterator<XX> &
200*8a106958SDamjan Jovanovic                                                 i_rIter )
201*8a106958SDamjan Jovanovic                                                 { pElem = i_rIter.pElem; return *this; }
202*8a106958SDamjan Jovanovic 
operator *() const203*8a106958SDamjan Jovanovic     const XX &          operator*() const       { return pElem->Obj(); }
operator ++()204*8a106958SDamjan Jovanovic     self &              operator++()            { if (pElem != 0) pElem = pElem->Next();
205*8a106958SDamjan Jovanovic                                                   return *this; }
operator ==(const self & i_rIter) const206*8a106958SDamjan Jovanovic     bool                operator==(
207*8a106958SDamjan Jovanovic                             const self &        i_rIter ) const
208*8a106958SDamjan Jovanovic                                                 { return pElem == i_rIter.pElem; }
operator !=(const self & i_rIter) const209*8a106958SDamjan Jovanovic     bool                operator!=(
210*8a106958SDamjan Jovanovic                             const self &        i_rIter ) const
211*8a106958SDamjan Jovanovic                                                 { return pElem != i_rIter.pElem; }
212*8a106958SDamjan Jovanovic   private:
213*8a106958SDamjan Jovanovic     const elem *        pElem;
214*8a106958SDamjan Jovanovic };
215*8a106958SDamjan Jovanovic 
216*8a106958SDamjan Jovanovic // Implementierung
217*8a106958SDamjan Jovanovic 
218*8a106958SDamjan Jovanovic template <class XX>
219*8a106958SDamjan Jovanovic void
push_front(const XX & i_aObj)220*8a106958SDamjan Jovanovic SweList<XX>::push_front( const XX & i_aObj )
221*8a106958SDamjan Jovanovic {
222*8a106958SDamjan Jovanovic     DYN elem * dpNew = new elem(i_aObj);
223*8a106958SDamjan Jovanovic     dpNew->SetNext(pTop);
224*8a106958SDamjan Jovanovic     pTop = dpNew;
225*8a106958SDamjan Jovanovic     if (pTail == 0)
226*8a106958SDamjan Jovanovic         pTail = pTop;
227*8a106958SDamjan Jovanovic }
228*8a106958SDamjan Jovanovic 
229*8a106958SDamjan Jovanovic template <class XX>
230*8a106958SDamjan Jovanovic void
push_back(const XX & i_aObj)231*8a106958SDamjan Jovanovic SweList<XX>::push_back( const XX & i_aObj)
232*8a106958SDamjan Jovanovic {
233*8a106958SDamjan Jovanovic     if (pTail != 0)
234*8a106958SDamjan Jovanovic     {
235*8a106958SDamjan Jovanovic         pTail->SetNext(new elem(i_aObj));
236*8a106958SDamjan Jovanovic         pTail = pTail->Next();
237*8a106958SDamjan Jovanovic     }
238*8a106958SDamjan Jovanovic     else
239*8a106958SDamjan Jovanovic     {
240*8a106958SDamjan Jovanovic         pTop = pTail = new elem(i_aObj);
241*8a106958SDamjan Jovanovic     }
242*8a106958SDamjan Jovanovic }
243*8a106958SDamjan Jovanovic 
244*8a106958SDamjan Jovanovic template <class XX>
245*8a106958SDamjan Jovanovic void
pop_front()246*8a106958SDamjan Jovanovic SweList<XX>::pop_front()
247*8a106958SDamjan Jovanovic {
248*8a106958SDamjan Jovanovic     if (pTop != 0)
249*8a106958SDamjan Jovanovic     {
250*8a106958SDamjan Jovanovic         elem * pDel = pTop;
251*8a106958SDamjan Jovanovic         pTop = pTop->Next();
252*8a106958SDamjan Jovanovic         delete pDel;
253*8a106958SDamjan Jovanovic         if (pTop == 0)
254*8a106958SDamjan Jovanovic             pTail = 0;
255*8a106958SDamjan Jovanovic     }
256*8a106958SDamjan Jovanovic }
257*8a106958SDamjan Jovanovic 
258*8a106958SDamjan Jovanovic template <class XX>
259*8a106958SDamjan Jovanovic uintt
size() const260*8a106958SDamjan Jovanovic SweList<XX>::size() const
261*8a106958SDamjan Jovanovic {
262*8a106958SDamjan Jovanovic     uintt ret = 0;
263*8a106958SDamjan Jovanovic     for ( const_iterator iter = begin();
264*8a106958SDamjan Jovanovic           iter != end();
265*8a106958SDamjan Jovanovic           ++iter )
266*8a106958SDamjan Jovanovic     {
267*8a106958SDamjan Jovanovic         ++ret;
268*8a106958SDamjan Jovanovic     }
269*8a106958SDamjan Jovanovic     return ret;
270*8a106958SDamjan Jovanovic }
271*8a106958SDamjan Jovanovic 
272*8a106958SDamjan Jovanovic 
273*8a106958SDamjan Jovanovic template <class XX>
274*8a106958SDamjan Jovanovic void
erase_all()275*8a106958SDamjan Jovanovic SweList<XX>::erase_all()
276*8a106958SDamjan Jovanovic {
277*8a106958SDamjan Jovanovic     for (pTail = pTop ; pTop != 0; pTail = pTop)
278*8a106958SDamjan Jovanovic     {
279*8a106958SDamjan Jovanovic         pTop = pTop->Next();
280*8a106958SDamjan Jovanovic         delete pTail;
281*8a106958SDamjan Jovanovic     }
282*8a106958SDamjan Jovanovic     pTop = pTail = 0;
283*8a106958SDamjan Jovanovic }
284*8a106958SDamjan Jovanovic 
285*8a106958SDamjan Jovanovic 
286*8a106958SDamjan Jovanovic template <class XX>
287*8a106958SDamjan Jovanovic void
push_front(XX * i_pObj)288*8a106958SDamjan Jovanovic SweList_dyn<XX>::push_front( XX * i_pObj )
289*8a106958SDamjan Jovanovic {
290*8a106958SDamjan Jovanovic     DYN elem * dpNew = new elem(i_pObj);
291*8a106958SDamjan Jovanovic     dpNew->SetNext(pTop);
292*8a106958SDamjan Jovanovic     pTop = dpNew;
293*8a106958SDamjan Jovanovic     if (pTail == 0)
294*8a106958SDamjan Jovanovic         pTail = pTop;
295*8a106958SDamjan Jovanovic }
296*8a106958SDamjan Jovanovic 
297*8a106958SDamjan Jovanovic template <class XX>
298*8a106958SDamjan Jovanovic void
push_back(XX * i_pObj)299*8a106958SDamjan Jovanovic SweList_dyn<XX>::push_back( XX * i_pObj )
300*8a106958SDamjan Jovanovic {
301*8a106958SDamjan Jovanovic     if (pTail != 0)
302*8a106958SDamjan Jovanovic     {
303*8a106958SDamjan Jovanovic         pTail->SetNext(new elem(i_pObj));
304*8a106958SDamjan Jovanovic         pTail = pTail->Next();
305*8a106958SDamjan Jovanovic     }
306*8a106958SDamjan Jovanovic     else
307*8a106958SDamjan Jovanovic     {
308*8a106958SDamjan Jovanovic         pTop = pTail = new elem(i_pObj);
309*8a106958SDamjan Jovanovic     }
310*8a106958SDamjan Jovanovic }
311*8a106958SDamjan Jovanovic 
312*8a106958SDamjan Jovanovic template <class XX>
313*8a106958SDamjan Jovanovic void
pop_front()314*8a106958SDamjan Jovanovic SweList_dyn<XX>::pop_front()
315*8a106958SDamjan Jovanovic {
316*8a106958SDamjan Jovanovic     if (pTop != 0)
317*8a106958SDamjan Jovanovic     {
318*8a106958SDamjan Jovanovic         elem * pDel = pTop;
319*8a106958SDamjan Jovanovic         pTop = pTop->Next();
320*8a106958SDamjan Jovanovic         if (pDel->Obj() != 0)
321*8a106958SDamjan Jovanovic             Delete_dyn(pDel->Obj());
322*8a106958SDamjan Jovanovic         delete pDel;
323*8a106958SDamjan Jovanovic         if (pTop == 0)
324*8a106958SDamjan Jovanovic             pTail = 0;
325*8a106958SDamjan Jovanovic     }
326*8a106958SDamjan Jovanovic }
327*8a106958SDamjan Jovanovic 
328*8a106958SDamjan Jovanovic 
329*8a106958SDamjan Jovanovic template <class XX>
330*8a106958SDamjan Jovanovic void
erase_all()331*8a106958SDamjan Jovanovic SweList_dyn<XX>::erase_all()
332*8a106958SDamjan Jovanovic {
333*8a106958SDamjan Jovanovic     for (pTail = pTop ; pTop != 0; pTail = pTop)
334*8a106958SDamjan Jovanovic     {
335*8a106958SDamjan Jovanovic         pTop = pTop->Next();
336*8a106958SDamjan Jovanovic         if (pTail->Obj() != 0)
337*8a106958SDamjan Jovanovic         {
338*8a106958SDamjan Jovanovic             delete pTail->Obj();
339*8a106958SDamjan Jovanovic         }
340*8a106958SDamjan Jovanovic         delete pTail;
341*8a106958SDamjan Jovanovic     }
342*8a106958SDamjan Jovanovic     pTop = pTail = 0;
343*8a106958SDamjan Jovanovic }
344*8a106958SDamjan Jovanovic 
345*8a106958SDamjan Jovanovic template <class XX>
346*8a106958SDamjan Jovanovic uintt
size() const347*8a106958SDamjan Jovanovic SweList_dyn<XX>::size() const
348*8a106958SDamjan Jovanovic {
349*8a106958SDamjan Jovanovic     uintt ret = 0;
350*8a106958SDamjan Jovanovic     for ( iterator iter = begin();
351*8a106958SDamjan Jovanovic           iter != end();
352*8a106958SDamjan Jovanovic           ++iter )
353*8a106958SDamjan Jovanovic     {
354*8a106958SDamjan Jovanovic         ++ret;
355*8a106958SDamjan Jovanovic     }
356*8a106958SDamjan Jovanovic     return ret;
357*8a106958SDamjan Jovanovic }
358*8a106958SDamjan Jovanovic 
359*8a106958SDamjan Jovanovic 
360*8a106958SDamjan Jovanovic }   // namespace csv
361*8a106958SDamjan Jovanovic 
362*8a106958SDamjan Jovanovic 
363*8a106958SDamjan Jovanovic #endif
364