30template<
class T,
class Addr>
31template<
class ListType>
43 const label len = addr_.size();
45 if (len != rhs.size())
48 <<
"Addressing and list of addressed elements "
49 "have different sizes: " << len <<
" " << rhs.size()
54 for (label i = 0; i < len; ++i)
56 values_[addr_[i]] = rhs[i];
63template<
class T,
class Addr>
70 values_(const_cast<
UList<
T>&>(values)),
77template<
class T,
class Addr>
80 const label len = this->size();
87 const T& val = (*this)[0];
89 for (label i = 1; i < len; ++i)
91 if (val != (*
this)[i])
101template<
class T,
class Addr>
108 return (this->find(val,
pos) >= 0);
112template<
class T,
class Addr>
115 return (i == addr_.size()-1 ? 0 : i+1);
119template<
class T,
class Addr>
122 return (i ? i-1 : addr_.size()-1);
126template<
class T,
class Addr>
129 return values_[addr_.first()];
132template<
class T,
class Addr>
135 return values_[addr_.first()];
139template<
class T,
class Addr>
142 return values_[addr_.last()];
145template<
class T,
class Addr>
148 return values_[addr_.last()];
152template<
class T,
class Addr>
155 return values_[this->fcIndex(i)];
159template<
class T,
class Addr>
162 return values_[this->fcIndex(i)];
166template<
class T,
class Addr>
169 return values_[this->rcIndex(i)];
173template<
class T,
class Addr>
176 return values_[this->rcIndex(i)];
182template<
class T,
class Addr>
186 const label len = addr_.size();
191 for (label i = 0; i < len; ++i)
193 result[i] = values_[addr_[i]];
200template<
class T,
class Addr>
203 return values_[addr_[i]];
207template<
class T,
class Addr>
211 return values_[addr_[i]];
215template<
class T,
class Addr>
219 for (
const label idx : addr_)
226template<
class T,
class Addr>
230 for (
const label idx : addr_)
237template<
class T,
class Addr>
247template<
class T,
class Addr>
257template<
class T,
class Addr>
258template<
class AnyAddr>
Base for lists with indirect addressing, templated on the list contents type and the addressing type....
void copyList(const ListType &rhs)
Deep copy values from the list.
label rcIndex(const label i) const
void operator=(const T &val)
Assign all addressed elements to the given value.
const T & rcValue(const label i) const
Return reverse circular value (ie, previous value in the list)
label fcIndex(const label i) const
const T & last() const
The last element of the list.
const T & fcValue(const label i) const
Return forward circular value (ie, next value in the list)
IndirectListBase()=delete
No default construct.
const T & first() const
The first element of the list.
bool uniform() const
True if all entries have identical values, and list is non-empty.
List< T > operator()() const
Return the addressed elements as a List.
T & operator[](const label i)
Non-const access to an element in the list.
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
A 1D vector of objects of type <T>, where the size of the vector is known and can be used for subscri...
A class representing the concept of 0 (zero) that can be used to avoid manipulating objects known to ...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
dimensionedScalar pos(const dimensionedScalar &ds)
errorManip< error > abort(error &err)
static constexpr const zero Zero
Global zero (0)