initial commit for version 1.5.x patch release
[OpenFOAM-1.5.x.git] / src / OpenFOAM / containers / Lists / BiIndirectList / BiIndirectList.H
blob1b6f667e614ec58a3e4a3eefbc3ecf88c138c994
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 Class
26     Foam::BiIndirectList
28 Description
29     Indexes into left list (negative index) or right list (zero or positive
30     index).
32 SourceFiles
33     BiIndirectListI.H
35 \*---------------------------------------------------------------------------*/
37 #ifndef BiIndirectList_H
38 #define BiIndirectList_H
40 #include "List.H"
42 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
44 namespace Foam
47 /*---------------------------------------------------------------------------*\
48                            Class BiIndirectList Declaration
49 \*---------------------------------------------------------------------------*/
51 template<class T>
52 class BiIndirectList
54     // Private data
56         UList<T>& posList_;
57         UList<T>& negList_;
58         List<label> addressing_;
61 public:
63     // Constructors
65         //- Construct given the complete lists and the addressing array
66         inline BiIndirectList
67         (
68             const UList<T>& posList,
69             const UList<T>& negList,
70             const List<label>&
71         );
74     // Member Functions
76         // Access
78             inline label size() const;
79             inline const UList<T>& posList() const;
80             inline const UList<T>& negList() const;
81             inline const List<label>& addressing() const;
82             inline List<label>& addressing();
84             //- Calculate index given whether index is into posList or negList
85             inline static label posIndex(const label i);
86             inline static label negIndex(const label i);
89         // Member Operators
91             //- Return the addressed elements as a List
92             inline List<T> operator()() const;
94             //- Return non-const access to an element
95             inline T& operator[](const label);
97             //- Return const access to an element
98             inline const T& operator[](const label) const;
100             //- Assignment from UList of addressed elements
101             inline void operator=(const UList<T>&);
103             //- Assignment of all entries to the given value
104             inline void operator=(const T&);
108 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
110 } // End namespace Foam
112 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
114 #include "BiIndirectListI.H"
116 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
118 #endif
120 // ************************************************************************* //