31 #ifndef BZ_ARRAY_TM2FASTITER_H
32 #define BZ_ARRAY_TM2FASTITER_H
37 #include <strstream.h>
41 #include <blitz/bzdebug.h>
48 template<
typename,
int,
int>
class FastTM2Iterator;
49 template<
typename,
int,
int>
class FastTM2CopyIterator;
52 template<
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>
298 T_result
shift(
int offset,
int dim)
const
304 T_result
shift(
int offset1,
int dim1,
int offset2,
int dim2)
const
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>
362 template<
typename P_numtype,
int N_rows,
int N_columns>
366 template<
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();
424 template<
typename P_numtype,
int N_rows,
int N_columns>
425 class FastTM2CopyIterator :
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();
481 #endif // BZ_ARRAY_FASTITER_H
_bz_global blitz::IndexPlaceholder< 9 > r
Definition: indexexpr.h:265
asET< T_numtype >::T_wrapped T_typeprop
Definition: tm2fastiter.h:59
Definition: tm2fastiter.h:53
T_base::T_matrix T_matrix
Definition: tm2fastiter.h:375
T_base::T_numtype T_numtype
Definition: tm2fastiter.h:431
FastTM2Iterator(const T_matrix &array)
Definition: tm2fastiter.h:393
ETBase< FastTV2Iterator< T_numtype, simdTypes< T_numtype >::vecWidth > > T_tvtypeprop
Result type for fastRead_tv is a FastTVIterator.
Definition: tm2fastiter.h:65
opType< T_numtype >::T_optype T_optype
Definition: tm2fastiter.h:56
T_result fastRead(diffType i) const
Definition: tm2fastiter.h:160
_bz_global blitz::IndexPlaceholder< 0 > i
Definition: indexexpr.h:256
bool shapeCheck(const T_shape &s) const
Definition: tm2fastiter.h:242
Helper class that defines the width of the simd instructions for a given type.
Definition: simdtypes.h:31
void _bz_offsetData(sizeType i)
Definition: tm2fastiter.h:215
static TinyVector< int, 2 > length()
Definition: tinymat2.h:163
unwrapET< T_typeprop >::T_unwrapped T_result
Definition: tm2fastiter.h:60
void operator=(const T_iterator &x)
Definition: tm2fastiter.h:93
T_base::T_iterator T_iterator
Definition: tm2fastiter.h:376
void push(int position)
Definition: tm2fastiter.h:179
Definition: et-forward.h:25
T_base::T_range_result T_range_result
Definition: tm2fastiter.h:379
T_result operator*() const
Definition: tm2fastiter.h:154
static TinyVector< diffType, 2 > stride()
Definition: tinymat2.h:187
T_base::T_ctorArg2 T_ctorArg2
Definition: tm2fastiter.h:435
void advance(int n)
Definition: tm2fastiter.h:194
TinyMatrix< T_numtype, N_rows, N_columns > T_matrix
Definition: tm2fastiter.h:68
static int suggestStride(int r)
Definition: tm2fastiter.h:173
static int ordering(const int r)
Definition: tm2fastiter.h:126
T_result operator()(TinyVector< int, 2 > i) const
Definition: tm2fastiter.h:113
static const int numArrayOperands
Definition: tm2fastiter.h:75
bool isVectorAligned(diffType offset) const
Since data_ is simd aligned by construction, we just have to check the offest.
Definition: tm2fastiter.h:170
int stride() const
Definition: tm2fastiter.h:226
Definition: et-forward.h:10
static TinyVector< int, 2 > shape()
Definition: tinymat2.h:181
const T_matrix & T_ctorArg1
Definition: tm2fastiter.h:70
FastTM2IteratorBase< P_numtype, N_rows, N_columns, const TinyMatrix< P_numtype, N_rows, N_columns > & > T_base
Definition: tm2fastiter.h:373
bool canCollapse(int outerLoopRank, int innerLoopRank) const
Definition: tm2fastiter.h:238
T_base::T_numtype T_numtype
Definition: tm2fastiter.h:374
P_numtype T_numtype
Definition: tm2fastiter.h:55
FastTM2CopyIterator(const T_matrix &array)
Definition: tm2fastiter.h:451
P_arraytype array_
Definition: tm2fastiter.h:356
void _bz_setData(const T_numtype *ptr)
Definition: tm2fastiter.h:211
void T_slice
Definition: tm2fastiter.h:351
T_base::T_ctorArg2 T_ctorArg2
Definition: tm2fastiter.h:378
Definition: et-forward.h:20
static bool isStride(int r, diffType stride)
Definition: tm2fastiter.h:176
Definition: et-forward.h:23
static int ascending(const int r)
Definition: tm2fastiter.h:118
static TinyVector< int, 2 > lbound()
Definition: tinymat2.h:158
Definition: array-impl.h:66
void _bz_offsetData(sizeType offset, int dim)
Definition: tm2fastiter.h:219
For an iterator, the vectorized result for width N is always a TinyVector.
Definition: tm2fastiter.h:85
ptrdiff_t diffType
Definition: blitz.h:111
FastTM2IteratorBase(const T_matrix &array)
Definition: tm2fastiter.h:104
T_result first_value() const
Definition: tm2fastiter.h:152
~FastTM2IteratorBase()
Definition: tm2fastiter.h:110
static TinyVector< int, 2 > ordering()
Definition: tinymat2.h:172
tvresult< N >::Type fastRead_tv(diffType i) const
Definition: tm2fastiter.h:164
FastTM2IteratorBase< P_numtype, N_rows, N_columns, P_arraytype > T_iterator
Definition: tm2fastiter.h:69
bool areShapesConformable(const T_shape1 &, const T_shape2 &)
Definition: shapecheck.h:50
void advance()
Definition: tm2fastiter.h:189
ConstPointerStack< T_numtype, rank_ > stack_
Definition: tm2fastiter.h:357
size_t sizeType
Definition: blitz.h:110
static const int minWidth
Definition: tm2fastiter.h:79
void pop(int position)
Definition: tm2fastiter.h:184
void _bz_offsetData(sizeType offset1, int dim1, sizeType offset2, int dim2)
Definition: tm2fastiter.h:222
static const int maxWidth
Definition: tm2fastiter.h:80
T_base::T_ctorArg1 T_ctorArg1
Definition: tm2fastiter.h:434
static bool isRankStoredAscending(int rank)
Definition: tinymat2.h:153
FastTM2CopyIterator< P_numtype, N_rows, N_columns > T_range_result
Definition: tm2fastiter.h:72
Definition: tm2fastiter.h:349
static const int numTMOperands
Definition: tm2fastiter.h:77
T_base::T_iterator T_iterator
Definition: tm2fastiter.h:433
T_result shift(int offset, int dim) const
Definition: tm2fastiter.h:298
diffType stride_
Definition: tm2fastiter.h:358
FastTM2Iterator(const FastTM2Iterator &x)
Definition: tm2fastiter.h:389
static int lbound(const int r)
Definition: tm2fastiter.h:134
void advanceUnitStride()
Definition: tm2fastiter.h:235
int T_ctorArg2
Definition: tm2fastiter.h:71
const T_numtype *restrict data() const
Definition: tm2fastiter.h:205
T_result shift(int offset1, int dim1, int offset2, int dim2) const
Definition: tm2fastiter.h:304
FastTV2Iterator< T_numtype, N > Type
Definition: tm2fastiter.h:86
void loadStride(int rank)
Definition: tm2fastiter.h:199
static TinyVector< int, 2 > ubound()
Definition: tinymat2.h:196
const T_matrix & array() const
Definition: tm2fastiter.h:208
T_base::T_range_result T_range_result
Definition: tm2fastiter.h:436
static const int numTVOperands
Definition: tm2fastiter.h:76
bool isUnitStride() const
Definition: tm2fastiter.h:232
_bz_global blitz::IndexPlaceholder< 10 > s
Definition: indexexpr.h:266
T_base::T_ctorArg1 T_ctorArg1
Definition: tm2fastiter.h:377
unwrapET< T_tvtypeprop >::T_unwrapped T_tvresult
Definition: tm2fastiter.h:66
T_base::T_matrix T_matrix
Definition: tm2fastiter.h:432
void prettyPrint(std::string &str, prettyPrintFormat &format) const
Definition: tm2fastiter.h:310
FastTM2IteratorBase< P_numtype, N_rows, N_columns, const TinyMatrix< P_numtype, N_rows, N_columns > > T_base
Definition: tm2fastiter.h:430
static const int rank_
Definition: tm2fastiter.h:81
static bool isUnitStride(int r)
Definition: tm2fastiter.h:229
#define restrict
Definition: compiler.h:95
void operator=(const FastTM2CopyIterator &x)
Definition: tm2fastiter.h:454
The TinyVector class is a one-dimensional, fixed length vector that implements the blitz expression t...
Definition: et-forward.h:14
_bz_global blitz::IndexPlaceholder< 5 > n
Definition: indexexpr.h:261
static int ubound(const int r)
Definition: tm2fastiter.h:142
FastTM2IteratorBase(const T_iterator &x)
Definition: tm2fastiter.h:89
const T_numtype *restrict data_
Definition: tm2fastiter.h:355
static const int numIndexPlaceholders
Definition: tm2fastiter.h:78
void operator=(const FastTM2Iterator< P_numtype, N_rows, N_columns > &x)
Definition: tm2fastiter.h:396
FastTM2CopyIterator(const FastTM2CopyIterator &x)
Definition: tm2fastiter.h:447
Definition: et-forward.h:15
T_result operator[](int i) const
Definition: tm2fastiter.h:157
static bool canCollapse(int outerRank, int innerRank)
Definition: tinymat2.h:317