initial commit for version 1.6.x patch release
[OpenFOAM-1.6.x.git] / src / OpenFOAM / containers / LinkedLists / linkTypes / SLListBase / SLListBase.C
blobf0fb24baac28e7863fec3a516ff3e9d5996101d3
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software; you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation; either version 2 of the License, or (at your
14     option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM; if not, write to the Free Software Foundation,
23     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 \*---------------------------------------------------------------------------*/
27 #include "error.H"
28 #include "SLListBase.H"
30 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
32 Foam::SLListBase::iterator Foam::SLListBase::endIter_
34     const_cast<SLListBase&>(static_cast<const SLListBase&>(SLListBase()))
37 Foam::SLListBase::const_iterator Foam::SLListBase::endConstIter_
39     static_cast<const SLListBase&>(SLListBase()),
40     reinterpret_cast<const link*>(0)
44 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
46 void Foam::SLListBase::insert(SLListBase::link* a)
48     nElmts_++;
50     if (last_)
51     {
52         a->next_ = last_->next_;
53     }
54     else
55     {
56         last_ = a;
57     }
59     last_->next_ = a;
63 void Foam::SLListBase::append(SLListBase::link* a)
65     nElmts_++;
67     if (last_)
68     {
69         a->next_ = last_->next_;
70         last_ = last_->next_ = a;
71     }
72     else
73     {
74         last_ = a->next_ = a;
75     }
79 Foam::SLListBase::link* Foam::SLListBase::removeHead()
81     nElmts_--;
83     if (last_ == 0)
84     {
85         FatalErrorIn("SLListBase::remove()")
86             << "remove from empty list"
87             << abort(FatalError);
88     }
90     SLListBase::link* f = last_->next_;
92     if (f == last_)
93     {
94         last_ = 0;
95     }
96     else
97     {
98         last_->next_ = f->next_;
99     }
101     return f;
105 Foam::SLListBase::link* Foam::SLListBase::remove(SLListBase::link* it)
107     SLListBase::iterator iter = begin();
108     SLListBase::link *prev = &(*iter);
110     if (it == prev)
111     {
112         return removeHead();
113     }
115     nElmts_--;
117     for (++iter; iter != end(); ++iter)
118     {
119         SLListBase::link *p = &(*iter);
121         if (p == it)
122         {
123             prev->next_ = p->next_;
125             if (p == last_)
126             {
127                 last_ = prev;
128             }
130             return it;
131         }
133         prev = p;
134     }
136     return 0;
140 // ************************************************************************* //