1#ifndef DUNE_SPGRID_MULTIINDEX_HH
2#define DUNE_SPGRID_MULTIINDEX_HH
32 typedef typename std::array< int, dimension >::const_iterator
ConstIterator;
33 typedef typename std::array< int, dimension >::iterator
Iterator;
54 SPMultiIndex (
const std::array< int, dimension > &index ) { *
this = index; }
73 index_[ i ] = other.index_[ i ];
81 index_[ i ] = index[ i ];
88 index_[ i ] = index[ i ];
96 index_[ i ] += other.index_[ i ];
104 index_[ i ] -= other.index_[ i ];
125 const int &
operator[] (
int i )
const {
return index_[ i ]; }
135 equals &= (index_[ i ] == other.index_[ i ]);
144 equals |= (index_[ i ] != other.index_[ i ]);
152 index_[ i ] += a*other.index_[ i ];
178 if( index_[ i ] < bound[ i ] )
189 codim -= (index_[ i ] & 1);
202 std::array< int, dimension > index_;
210 template<
class char_type,
class traits,
int dim >
211 inline std::basic_ostream< char_type, traits > &
212 operator<< ( std::basic_ostream< char_type, traits > &out,
const SPMultiIndex< dim > &multiIndex )
214 out <<
"( " << multiIndex[ 0 ];
215 for(
int i = 1; i < dim; ++i )
216 out <<
", " << multiIndex[ i ];
221 template<
class char_type,
class traits,
int dim >
222 inline std::basic_istream< char_type, traits > &
226 in >>
match(
'(' ) >> m[ 0 ];
227 for(
int i = 1; i < dim; ++i )
228 in >>
match(
',' ) >> m[ i ];
237 inline SPMultiIndex< dim >
247 inline SPMultiIndex< dim >
257 inline SPMultiIndex< dim >
267 inline SPMultiIndex< dim >
275 inline SPMultiIndex< dim >
297 for(
int i = 0; i < dim; ++i )
298 c[ i ] =
min( a[ i ], b[ i ] );
308 for(
int i = 0; i < dim; ++i )
309 c[ i ] =
max( a[ i ], b[ i ] );
miscellaneous helper functions
Dune::SPMultiIndex< dim > min(const Dune::SPMultiIndex< dim > &a, const Dune::SPMultiIndex< dim > &b)
Definition: multiindex.hh:294
Dune::SPMultiIndex< dim > max(const Dune::SPMultiIndex< dim > &a, const Dune::SPMultiIndex< dim > &b)
Definition: multiindex.hh:305
Definition: iostream.hh:7
SPMesh< dim > operator-(const SPMesh< dim > &mesh, const SPMultiIndex< dim > &shift)
Definition: mesh.hh:245
SPMesh< dim > operator+(const SPMesh< dim > &mesh, const SPMultiIndex< dim > &shift)
Definition: mesh.hh:236
SPMultiIndex< dim > operator/(const SPMultiIndex< dim > &a, const int &b)
Definition: multiindex.hh:276
std::basic_ostream< char_type, traits > & operator<<(std::basic_ostream< char_type, traits > &out, const SPCube< ct, dim > &cube)
Definition: cube.hh:148
SPMultiIndex< dim > operator*(const SPMultiIndex< dim > &a, const int &b)
Definition: multiindex.hh:258
std::basic_istream< char_type, traits > & operator>>(std::basic_istream< char_type, traits > &in, SPCube< ct, dim > &cube)
Definition: cube.hh:162
iostream::Match< typename iostream::MatchTraits< T >::Type > match(const T &value)
Definition: iostream.hh:87
multiindex
Definition: multiindex.hh:25
This & operator=(const This &other)
copy assignment
Definition: multiindex.hh:70
Iterator begin()
Definition: multiindex.hh:156
void increment(const This &bound, const int k=1)
Definition: multiindex.hh:173
static const int dimension
dimension of the multiindex
Definition: multiindex.hh:30
SPMultiIndex(const int(&index)[dimension])
constructor from int array
Definition: multiindex.hh:45
static This zero()
obtain the zero multiindex
Definition: multiindex.hh:194
SPMultiIndex()
default constructor
Definition: multiindex.hh:36
Iterator end()
Definition: multiindex.hh:161
SPMultiIndex(const std::array< int, dimension > &index)
constructor from int array
Definition: multiindex.hh:54
This & operator-=(const This &other)
subtract another multiindex from this one (vector operation)
Definition: multiindex.hh:101
void clear()
initialize to zero
Definition: multiindex.hh:166
ConstIterator end() const
Definition: multiindex.hh:160
std::array< int, dimension >::iterator Iterator
Definition: multiindex.hh:33
const int & operator[](int i) const
access i-th component
Definition: multiindex.hh:125
bool operator==(const This &other) const
compare two multiindices for equality
Definition: multiindex.hh:131
ConstIterator cbegin() const
Definition: multiindex.hh:158
ConstIterator cend() const
Definition: multiindex.hh:163
std::array< int, dimension >::const_iterator ConstIterator
Definition: multiindex.hh:32
void axpy(const int a, const This &other)
add multiple of a multiindex to this one (vector operation)
Definition: multiindex.hh:149
This & operator/=(int a)
scale this multiindex (vector operation)
Definition: multiindex.hh:117
This & operator*=(int a)
scale this multiindex (vector operation)
Definition: multiindex.hh:109
This & operator+=(const This &other)
add another multiindex to this one (vector operation)
Definition: multiindex.hh:93
SPMultiIndex(const This &other)
copy constructor
Definition: multiindex.hh:62
ConstIterator begin() const
Definition: multiindex.hh:155
int codimension() const
Definition: multiindex.hh:185
bool operator!=(const This &other) const
compare two multiindices for inequality
Definition: multiindex.hh:140