31#ifndef BZ_ARRAY_TM2FASTITER_H
32#define BZ_ARRAY_TM2FASTITER_H
37 #include <strstream.h>
41#include <blitz/bzdebug.h>
48template<
typename,
int,
int>
class FastTM2Iterator;
49template<
typename,
int,
int>
class FastTM2CopyIterator;
52template<
typename P_numtype,
int N_rows,
int N_columns,
typename P_arraytype>
56 typedef typename opType<T_numtype>::T_optype
T_optype;
60 typedef typename unwrapET<T_typeprop>::T_unwrapped
T_result;
66 typedef typename unwrapET<T_tvtypeprop>::T_unwrapped
T_tvresult;
161 {
return array_.fastRead(i); }
241 template<
typename T_shape>
318 std::ostringstream ostr;
326 str +=
"TinyMatrix<";
327 str += BZ_DEBUG_TEMPLATE_AS_STRING_LITERAL(
T_numtype);
331 sprintf(tmpBuf,
"%d", N_rows);
335 sprintf(tmpBuf,
"%d", N_columns);
343 template<
typename T1,
typename T2 = nilArraySection,
344 class T3 = nilArraySection,
typename T4 = nilArraySection,
345 class T5 = nilArraySection,
typename T6 = nilArraySection,
346 class T7 = nilArraySection,
typename T8 = nilArraySection,
347 class T9 = nilArraySection,
typename T10 = nilArraySection,
348 class T11 = nilArraySection>
362template<
typename P_numtype,
int N_rows,
int N_columns>
366template<
typename P_numtype,
int N_rows,
int N_columns>
369 const TinyMatrix<P_numtype, N_rows, N_columns>&>
395 using T_base::operator=;
401 using T_base::operator();
424template<
typename P_numtype,
int N_rows,
int N_columns>
426 public FastTM2IteratorBase<P_numtype, N_rows, N_columns, const TinyMatrix<P_numtype, N_rows, N_columns> >
453 using T_base::operator=;
459 using T_base::operator();
Definition: constpointerstack.h:10
Definition: tm2fastiter.h:427
void operator=(const FastTM2CopyIterator &x)
Definition: tm2fastiter.h:454
T_base::T_range_result T_range_result
Definition: tm2fastiter.h:436
T_base::T_matrix T_matrix
Definition: tm2fastiter.h:432
T_base::T_iterator T_iterator
Definition: tm2fastiter.h:433
FastTM2CopyIterator(const FastTM2CopyIterator &x)
Definition: tm2fastiter.h:447
T_base::T_ctorArg1 T_ctorArg1
Definition: tm2fastiter.h:434
T_base::T_numtype T_numtype
Definition: tm2fastiter.h:431
FastTM2CopyIterator(const T_matrix &array)
Definition: tm2fastiter.h:451
T_base::T_ctorArg2 T_ctorArg2
Definition: tm2fastiter.h:435
FastTM2IteratorBase< P_numtype, N_rows, N_columns, const TinyMatrix< P_numtype, N_rows, N_columns > > T_base
Definition: tm2fastiter.h:430
Definition: tm2fastiter.h:349
void T_slice
Definition: tm2fastiter.h:351
Definition: tm2fastiter.h:53
void advance(int n)
Definition: tm2fastiter.h:194
static int ascending(const int r)
Definition: tm2fastiter.h:118
TinyMatrix< T_numtype, N_rows, N_columns > T_matrix
Definition: tm2fastiter.h:68
tvresult< N >::Type fastRead_tv(diffType i) const
Definition: tm2fastiter.h:164
~FastTM2IteratorBase()
Definition: tm2fastiter.h:110
FastTM2CopyIterator< P_numtype, N_rows, N_columns > T_range_result
Definition: tm2fastiter.h:72
static const int minWidth
Definition: tm2fastiter.h:79
static int ordering(const int r)
Definition: tm2fastiter.h:126
asET< T_numtype >::T_wrapped T_typeprop
Definition: tm2fastiter.h:59
void _bz_offsetData(sizeType offset1, int dim1, sizeType offset2, int dim2)
Definition: tm2fastiter.h:222
void advanceUnitStride()
Definition: tm2fastiter.h:235
static const int numArrayOperands
Definition: tm2fastiter.h:75
static bool isStride(int r, diffType stride)
Definition: tm2fastiter.h:176
void advance()
Definition: tm2fastiter.h:189
static bool isUnitStride(int r)
Definition: tm2fastiter.h:229
static const int numTMOperands
Definition: tm2fastiter.h:77
const T_matrix & T_ctorArg1
Definition: tm2fastiter.h:70
opType< T_numtype >::T_optype T_optype
Definition: tm2fastiter.h:56
bool isVectorAligned(diffType offset) const
Since data_ is simd aligned by construction, we just have to check the offest.
Definition: tm2fastiter.h:170
T_result fastRead(diffType i) const
Definition: tm2fastiter.h:160
static int suggestStride(int r)
Definition: tm2fastiter.h:173
T_result operator*() const
Definition: tm2fastiter.h:154
void loadStride(int rank)
Definition: tm2fastiter.h:199
void _bz_offsetData(sizeType i)
Definition: tm2fastiter.h:215
unwrapET< T_typeprop >::T_unwrapped T_result
Definition: tm2fastiter.h:60
int T_ctorArg2
Definition: tm2fastiter.h:71
static int lbound(const int r)
Definition: tm2fastiter.h:134
void _bz_setData(const T_numtype *ptr)
Definition: tm2fastiter.h:211
FastTM2IteratorBase(const T_matrix &array)
Definition: tm2fastiter.h:104
diffType stride_
Definition: tm2fastiter.h:358
void pop(int position)
Definition: tm2fastiter.h:184
FastTM2IteratorBase< P_numtype, N_rows, N_columns, P_arraytype > T_iterator
Definition: tm2fastiter.h:69
P_numtype T_numtype
Definition: tm2fastiter.h:55
T_result operator[](int i) const
Definition: tm2fastiter.h:157
void prettyPrint(std::string &str, prettyPrintFormat &format) const
Definition: tm2fastiter.h:310
P_arraytype array_
Definition: tm2fastiter.h:356
const T_matrix & array() const
Definition: tm2fastiter.h:208
static const int rank_
Definition: tm2fastiter.h:81
const T_numtype *restrict data() const
Definition: tm2fastiter.h:205
T_result first_value() const
Definition: tm2fastiter.h:152
int stride() const
Definition: tm2fastiter.h:226
void operator=(const T_iterator &x)
Definition: tm2fastiter.h:93
const T_numtype *restrict data_
Definition: tm2fastiter.h:355
void push(int position)
Definition: tm2fastiter.h:179
void _bz_offsetData(sizeType offset, int dim)
Definition: tm2fastiter.h:219
unwrapET< T_tvtypeprop >::T_unwrapped T_tvresult
Definition: tm2fastiter.h:66
FastTM2IteratorBase(const T_iterator &x)
Definition: tm2fastiter.h:89
static int ubound(const int r)
Definition: tm2fastiter.h:142
ConstPointerStack< T_numtype, rank_ > stack_
Definition: tm2fastiter.h:357
bool canCollapse(int outerLoopRank, int innerLoopRank) const
Definition: tm2fastiter.h:238
ETBase< FastTV2Iterator< T_numtype, simdTypes< T_numtype >::vecWidth > > T_tvtypeprop
Result type for fastRead_tv is a FastTVIterator.
Definition: tm2fastiter.h:65
T_result shift(int offset, int dim) const
Definition: tm2fastiter.h:298
bool shapeCheck(const T_shape &s) const
Definition: tm2fastiter.h:242
static const int numTVOperands
Definition: tm2fastiter.h:76
static const int maxWidth
Definition: tm2fastiter.h:80
T_result operator()(TinyVector< int, 2 > i) const
Definition: tm2fastiter.h:113
bool isUnitStride() const
Definition: tm2fastiter.h:232
static const int numIndexPlaceholders
Definition: tm2fastiter.h:78
T_result shift(int offset1, int dim1, int offset2, int dim2) const
Definition: tm2fastiter.h:304
Definition: tm2fastiter.h:370
T_base::T_matrix T_matrix
Definition: tm2fastiter.h:375
void operator=(const FastTM2Iterator< P_numtype, N_rows, N_columns > &x)
Definition: tm2fastiter.h:396
T_base::T_range_result T_range_result
Definition: tm2fastiter.h:379
T_base::T_ctorArg1 T_ctorArg1
Definition: tm2fastiter.h:377
T_base::T_iterator T_iterator
Definition: tm2fastiter.h:376
FastTM2Iterator(const FastTM2Iterator &x)
Definition: tm2fastiter.h:389
T_base::T_ctorArg2 T_ctorArg2
Definition: tm2fastiter.h:378
FastTM2IteratorBase< P_numtype, N_rows, N_columns, const TinyMatrix< P_numtype, N_rows, N_columns > & > T_base
Definition: tm2fastiter.h:373
FastTM2Iterator(const T_matrix &array)
Definition: tm2fastiter.h:393
T_base::T_numtype T_numtype
Definition: tm2fastiter.h:374
Definition: tv2fastiter.h:383
Definition: tinymat2.h:73
static TinyVector< int, 2 > shape()
Definition: tinymat2.h:181
static TinyVector< int, 2 > lbound()
Definition: tinymat2.h:158
static TinyVector< int, 2 > length()
Definition: tinymat2.h:163
static bool canCollapse(int outerRank, int innerRank)
Definition: tinymat2.h:317
static bool isRankStoredAscending(int rank)
Definition: tinymat2.h:153
static TinyVector< int, 2 > ubound()
Definition: tinymat2.h:196
static TinyVector< diffType, 2 > stride()
Definition: tinymat2.h:187
static TinyVector< int, 2 > ordering()
Definition: tinymat2.h:172
The TinyVector class is a one-dimensional, fixed length vector that implements the blitz expression t...
Definition: tinyvec2.h:73
Helper class that defines the width of the simd instructions for a given type.
Definition: simdtypes.h:31
#define restrict
Definition: compiler.h:95
#define true
Definition: compiler.h:101
Definition: array-impl.h:66
ptrdiff_t diffType
Definition: blitz.h:111
bool areShapesConformable(const T_shape1 &, const T_shape2 &)
Definition: shapecheck.h:50
size_t sizeType
Definition: blitz.h:110
For an iterator, the vectorized result for width N is always a TinyVector<T_numtype,...
Definition: tm2fastiter.h:85
FastTV2Iterator< T_numtype, N > Type
Definition: tm2fastiter.h:86