37 #include <blitz/tinyvec2io.cc>
40 #include <blitz/array/slice.h>
45 #ifdef BZ_HAVE_BOOST_SERIALIZATION
46 #include <boost/serialization/serialization.hpp>
56 template<
typename P_numtype,
int N_rows,
int N_columns>
57 class FastTM2Iterator;
58 template<
typename P_numtype,
int N_rows,
int N_columns>
59 class FastTM2CopyIterator;
61 template<
typename P_expr>
65 class IndexPlaceholder;
71 template<
typename P_numtype,
int N_rows,
int N_columns>
72 class TinyMatrix :
public ETBase<TinyMatrix<P_numtype, N_rows, N_columns> >
94 template <
typename T_numtype2>
115 {
return N_columns; }
118 {
return N_columns; }
138 {
return data_+
size(); }
140 const_iterator
end()
const
141 {
return data_+
size(); }
144 { BZPRECONDITION(rank<2);
return rank==0 ? N_rows : N_columns; }
150 { BZPRECONDITION(rank<2);
return rank==0; }
152 { BZPRECONDITION(rank<2);
return rank==1; }
154 { BZPRECONDITION(rank<2);
return true; }
157 { BZPRECONDITION(rank<2);
return 0; }
162 { BZPRECONDITION(rank<2);
return rank==0 ? N_rows : N_columns; }
167 {
return N_rows*N_columns; }
170 { BZPRECONDITION(rank<2);
return 1-
rank; }
191 { BZPRECONDITION(rank<2);
return rank==0 ? N_columns : 1; }
194 {
return length(rank) - 1; }
220 BZPRECHECK(
isInRange(index),
"TinyMatrix index out of range: " << index
221 << endl <<
"Lower bounds: " <<
base() << endl
222 <<
"Length: " <<
length() << endl);
227 BZPRECHECK(
isInRange(i0,i1),
"TinyMatrix index out of range: ("
228 << i0 <<
", " << i1 <<
")"
229 << endl <<
"Lower bounds: " <<
base() << endl
230 <<
"Length: " <<
length() << endl);
240 {
return const_cast<T_matrix&
>(*this); }
245 return data_[i*N_columns +
j];
251 return data_[i*N_columns +
j];
257 return data_[i[0]*N_columns + i[1]];
263 return data_[i[0]*N_columns + i[1]];
266 template<
int N0,
int N1>
303 template<
typename T_expr>
306 template<
typename T> T_matrix&
operator+=(
const T&);
307 template<
typename T> T_matrix&
operator-=(
const T&);
308 template<
typename T> T_matrix&
operator*=(
const T&);
309 template<
typename T> T_matrix&
operator/=(
const T&);
310 template<
typename T> T_matrix&
operator%=(
const T&);
311 template<
typename T> T_matrix&
operator^=(
const T&);
312 template<
typename T> T_matrix&
operator&=(
const T&);
313 template<
typename T> T_matrix&
operator|=(
const T&);
314 template<
typename T> T_matrix&
operator>>=(
const T&);
315 template<
typename T> T_matrix&
operator<<=(
const T&);
318 #ifdef BZ_DEBUG_TRAVERSE
319 BZ_DEBUG_MESSAGE(
"stride(" << innerRank <<
")=" <<
stride(innerRank)
320 <<
", extent()=" <<
extent(innerRank) <<
", stride(outerRank)="
328 template<
typename T_expr,
typename T_update>
331 #ifdef BZ_HAVE_BOOST_SERIALIZATION
332 friend class boost::serialization::access;
334 template<
class T_arch>
335 void serialize(T_arch& ar,
const unsigned int version) {
345 #ifdef BZ_HAVE_BOOST_SERIALIZATION
348 template<
typename T>
struct is_mpi_datatype;
349 template <
typename T,
int N,
int M>
350 struct is_mpi_datatype<
blitz::TinyMatrix<T, N, M> >
351 :
public is_mpi_datatype<T> { };
357 #endif // BZ_TINYMAT_H
iterator end()
Definition: tinymat2.h:137
const_iterator end() const
Definition: tinymat2.h:140
static int dimensions()
Definition: tinymat2.h:132
FastTM2CopyIterator< P_numtype, N_rows, N_columns > T_range_result
Definition: tinymat2.h:83
T_matrix & operator&=(const T &)
T_numtype &restrict operator()(unsigned i, unsigned j)
Definition: tinymat2.h:248
T_matrix & noConst() const
Definition: tinymat2.h:239
static int base(int rank)
Definition: tinymat2.h:102
TinyVector< int, 2 > T_index
Definition: tinymat2.h:78
_bz_global blitz::IndexPlaceholder< 0 > i
Definition: indexexpr.h:256
Helper class that defines the width of the simd instructions for a given type.
Definition: simdtypes.h:31
static TinyVector< int, 2 > length()
Definition: tinymat2.h:163
T_matrix & operator+=(const T &)
const T_numtype *restrict dataFirst() const
Definition: tinymat2.h:126
_bz_global blitz::IndexPlaceholder< 1 > j
Definition: indexexpr.h:257
T_matrix & operator-=(const T &)
static TinyVector< int, 2 > base()
Definition: tinymat2.h:99
Definition: listinit.h:71
static sizeType size()
Definition: tinymat2.h:184
const T_numtype &restrict operator()(T_index i) const
Definition: tinymat2.h:254
Definition: et-forward.h:25
static int ordering(int rank)
Definition: tinymat2.h:169
static TinyVector< diffType, 2 > stride()
Definition: tinymat2.h:187
T_matrix & operator*=(const T &)
T_numtype * iterator
Definition: tinymat2.h:81
static int lbound(int rank)
Definition: tinymat2.h:156
static int ubound(int rank)
Definition: tinymat2.h:193
bool isVectorAligned(diffType offset) const
Since data_ is simd aligned by construction, we just have to check the offest.
Definition: tinymat2.h:278
Definition: et-forward.h:10
bool isInRange(int i0, int i1) const
Definition: tinymat2.h:214
static TinyVector< int, 2 > shape()
Definition: tinymat2.h:181
T_numtype *restrict dataFirst()
Definition: tinymat2.h:129
static int rank()
Definition: tinymat2.h:175
P_numtype T_numtype
Definition: tinymat2.h:75
T_matrix & initialize(T_numtype x)
static const int rank_
Definition: tinymat2.h:88
bool assertInRange(int BZ_DEBUG_PARAM(i0), int BZ_DEBUG_PARAM(i1)) const
Definition: tinymat2.h:226
static int length(int rank)
Definition: tinymat2.h:161
T_iterator beginFast() const
Definition: tinymat2.h:111
static RectDomain< 2 > domain()
static int extent(int rank)
Definition: tinymat2.h:143
static diffType stride(int rank)
Definition: tinymat2.h:190
static int columns()
Definition: tinymat2.h:117
Definition: et-forward.h:23
Definition: array-impl.h:82
T_numtype *restrict data()
Definition: tinymat2.h:123
TinyMatrix< T_numtype, N_rows, N_columns > T_matrix
Definition: tinymat2.h:79
static TinyVector< int, 2 > lbound()
Definition: tinymat2.h:158
Definition: array-impl.h:66
Definition: et-forward.h:48
TinyMatrix()
Definition: tinymat2.h:90
ptrdiff_t diffType
Definition: blitz.h:111
T_matrix & operator/=(const T &)
T_matrix & operator<<=(const T &)
static int rows()
Definition: tinymat2.h:178
static TinyVector< int, 2 > ordering()
Definition: tinymat2.h:172
ListInitializationSwitch< T_matrix, T_numtype * > operator=(T_numtype x)
Definition: tinymat2.h:293
size_t sizeType
Definition: blitz.h:110
T_matrix & operator^=(const T &)
T_numtype &restrict operator()(T_index i)
Definition: tinymat2.h:260
static bool isRankStoredAscending(int rank)
Definition: tinymat2.h:153
const T_numtype & fastRead(diffType i) const
Fastread must return reference so the iterator can turn it into an iterator for the contained in case...
Definition: tinymat2.h:273
static sizeType numElements()
Definition: tinymat2.h:166
T_matrix & operator%=(const T &)
FastTM2Iterator< T_numtype, N_rows, N_columns > T_iterator
Definition: tinymat2.h:80
iterator begin()
Definition: tinymat2.h:105
T_numtype *restrict getInitializationIterator()
Definition: tinymat2.h:300
static bool isMinorRank(int rank)
Definition: tinymat2.h:151
static const TinyVector< int, 2 > extent()
Definition: tinymat2.h:146
const_iterator begin() const
Definition: tinymat2.h:108
const T_numtype * const_iterator
Definition: tinymat2.h:82
void _tm_evaluate(const T_expr &expr, T_update)
bool isInRange(const T_index &index) const
Definition: tinymat2.h:206
#define BZ_SIMD_WIDTH
Definition: bzconfig.h:387
static int zeroOffset()
Definition: tinymat2.h:199
static TinyVector< int, 2 > ubound()
Definition: tinymat2.h:196
T_matrix & operator|=(const T &)
#define restrict
Definition: compiler.h:95
T_matrix & operator>>=(const T &)
The TinyVector class is a one-dimensional, fixed length vector that implements the blitz expression t...
Definition: et-forward.h:14
const T_numtype *restrict data() const
Definition: tinymat2.h:120
#define BZ_ALIGN_VARIABLE(vartype, varname, alignment)
Definition: bzconfig.h:22
static bool isMajorRank(int rank)
Definition: tinymat2.h:149
const T_numtype &restrict operator()(unsigned i, unsigned j) const
Definition: tinymat2.h:242
Definition: et-forward.h:15
bool assertInRange(const T_index &BZ_DEBUG_PARAM(index)) const
Definition: tinymat2.h:219
static bool canCollapse(int outerRank, int innerRank)
Definition: tinymat2.h:317
static int cols()
Definition: tinymat2.h:114