fixed writing out entries in advective bc
[OpenFOAM-1.6-ext.git] / src / OpenFOAM / containers / Lists / UIndirectList / UIndirectListI.H
blob8a2d317dc7f7a52030e970c033be2a1cb64e71fc
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright held by original author
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::UIndirectList<T>::UIndirectList
32     const UList<T>& completeList,
33     const UList<label>& addr
36     completeList_(const_cast<UList<T>&>(completeList)),
37     addressing_(addr)
41 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
43 template<class T>
44 inline Foam::label Foam::UIndirectList<T>::size() const
46     return addressing_.size();
50 template<class T>
51 inline bool Foam::UIndirectList<T>::empty() const
53     return addressing_.empty();
57 template<class T>
58 inline const Foam::UList<T>& Foam::UIndirectList<T>::completeList() const
60     return completeList_;
64 template<class T>
65 inline const Foam::List<Foam::label>& Foam::UIndirectList<T>::addressing() const
67     return addressing_;
71 // * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
73 template<class T>
74 inline Foam::List<T> Foam::UIndirectList<T>::operator()() const
76     List<T> result(size());
78     forAll(*this, i)
79     {
80         result[i] = operator[](i);
81     }
83     return result;
87 template<class T>
88 inline T& Foam::UIndirectList<T>::operator[](const label i)
90     return completeList_[addressing_[i]];
94 template<class T>
95 inline const T& Foam::UIndirectList<T>::operator[](const label i) const
97     return completeList_[addressing_[i]];
101 template<class T>
102 inline void Foam::UIndirectList<T>::operator=(const UList<T>& ae)
104     if (addressing_.size() != ae.size())
105     {
106         FatalErrorIn("UIndirectList<T>::operator=(const UList<T>&)")
107             << "Addressing and list of addressed elements "
108                "have different sizes: "
109             << addressing_.size() << " " << ae.size()
110             << abort(FatalError);
111     }
113     forAll(addressing_, i)
114     {
115         completeList_[addressing_[i]] = ae[i];
116     }
120 template<class T>
121 inline void Foam::UIndirectList<T>::operator=(const T& t)
123     forAll(addressing_, i)
124     {
125         completeList_[addressing_[i]] = t;
126     }
130 // ************************************************************************* //