initial commit for version 1.5.x patch release
[OpenFOAM-1.5.x.git] / src / OpenFOAM / containers / Lists / IndirectList / IndirectListI.H
blob385ef489fb073fcc32223cbbe2ab99538872a6d8
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 1991-2008 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 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
29 template<class T>
30 inline Foam::IndirectList<T>::IndirectList
32     const UList<T>& completeList,
33     const List<label>& addr
36     completeList_(const_cast<UList<T>&>(completeList)),
37     addressing_(addr)
41 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
43 template<class T>
44 inline Foam::label Foam::IndirectList<T>::size() const
46     return addressing_.size();
50 template<class T>
51 inline const Foam::UList<T>& Foam::IndirectList<T>::completeList() const
53     return completeList_;
57 template<class T>
58 inline const Foam::List<Foam::label>& Foam::IndirectList<T>::addressing() const
60     return addressing_;
64 template<class T>
65 inline void Foam::IndirectList<T>::resetAddressing
67     const List<label>& addr
70     addressing_ = addr;
74 // * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
76 template<class T>
77 inline Foam::List<T> Foam::IndirectList<T>::operator()() const
79     List<T> result(size());
81     forAll(*this, i)
82     {
83         result[i] = operator[](i);
84     }
86     return result;
90 template<class T>
91 inline T& Foam::IndirectList<T>::operator[](const label i)
93     return completeList_[addressing_[i]];
97 template<class T>
98 inline const T& Foam::IndirectList<T>::operator[](const label i) const
100     return completeList_[addressing_[i]];
104 template<class T>
105 inline void Foam::IndirectList<T>::operator=(const UList<T>& ae)
107     if (addressing_.size() != ae.size())
108     {
109         FatalErrorIn("IndirectList<T>::operator=(const UList<T>&)")
110             << "Addressing and list of addressed elements "
111                "have different sizes: "
112             << addressing_.size() << " " << ae.size()
113             << abort(FatalError);
114     }
116     forAll(addressing_, i)
117     {
118         completeList_[addressing_[i]] = ae[i];
119     }
123 template<class T>
124 inline void Foam::IndirectList<T>::operator=(const T& t)
126     forAll(addressing_, i)
127     {
128         completeList_[addressing_[i]] = t;
129     }
133 // ************************************************************************* //