/
mappedList.H
198 lines (142 loc) · 5.54 KB
/
mappedList.H
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | OpenQBMM - www.openqbmm.org
\\/ M anipulation |
-------------------------------------------------------------------------------
Code created 2015-2018 by Alberto Passalacqua
Contributed 2018-07-31 to the OpenFOAM Foundation
Copyright (C) 2018 OpenFOAM Foundation
Copyright (C) 2019 Alberto Passalacqua
-------------------------------------------------------------------------------
License
This file is derivative work of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::mappedList
Description
Stores a list, with a Map<label> that takes a label key and returns
the index into the list.
Example
Lookup | Label Key | Index
0 0 0 0 0
1 0 0 100 1
0 1 0 10 2
0 0 1 1 3
2 0 0 200 4
2 1 0 210 5
The operator () is overloaded in order to hide the above mapping.
SourceFiles
mappedListI.H
mappedList.C
\*---------------------------------------------------------------------------*/
#ifndef mappedList_H
#define mappedList_H
#include "scalar.H"
#include "vector.H"
#include "labelList.H"
#include "Map.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class mappedList Declaration
\*---------------------------------------------------------------------------*/
template <class mappedType>
class mappedList
:
public List<mappedType>
{
// Private data
//- Map from the label to its index within the List
Map<label> map_;
//- Number of dimensions
label nDims_;
// Private Member Functions
//- Returns an element provided the indeces of the order
label calcMapIndex(std::initializer_list<label> indexes) const;
public:
// Constructors
//- Construct from size and labelListList
mappedList
(
const label size,
const labelListList& indexes
);
//- Construct from size and labelListList with initial value for
// all elements
mappedList
(
const label size,
const labelListList& indexes,
const mappedType& initValue
);
//- Construct from size and map with initial value for all elements
mappedList
(
const label size,
const Map<label>& map,
const mappedType& initValue
);
//- Construct from List<mappedType> and labelListList
mappedList
(
const List<mappedType>& initList,
const labelListList& indexes
);
//- Destructor
~mappedList();
// Member Functions
// Static member functions
//- Convert a list of labels to a word. {1, 2, 3} -> 123
static word listToWord(const labelList& lst);
//- Convert a list of labels to a single label. {0, 2, 3} -> 23
static label listToLabel
(
const labelList& lst,
const label nDims = 0
);
// Modifiers
//- Resize mapped list
void resize(const label newSize);
//- Set mapped list size
void setSize(const label newSize);
// Access
//- Is label list index used
bool found(const labelList& l) const;
//- Is label list index used
template <typename ...ArgsT>
bool found(ArgsT ...args) const;
//- Non-const access to a moment given the list of orders
template <typename ...ArgsT>
inline mappedType& operator()(ArgsT ...args);
//- Const access to a moment given the list of orders
template <typename ...ArgsT>
inline const mappedType& operator()(ArgsT ...args) const;
//- Constant access given a label list
inline const mappedType& operator()(const labelList& l) const;
//- Non-constant access given a label list
inline mappedType& operator()(const labelList& l);
//- Returns const access to the moment map
inline const Map<label>& map() const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
# include "mappedListI.H"
# include "mappedList.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //