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_ctorArg2 T_ctorArg2
Definition tm2fastiter.h:435
FastTM2CopyIterator(const FastTM2CopyIterator &x)
Definition tm2fastiter.h:447
T_base::T_iterator T_iterator
Definition tm2fastiter.h:433
T_base::T_ctorArg1 T_ctorArg1
Definition tm2fastiter.h:434
FastTM2CopyIterator(const T_matrix &array)
Definition tm2fastiter.h:451
FastTM2IteratorBase< P_numtype, N_rows, N_columns, const TinyMatrix< P_numtype, N_rows, N_columns > > T_base
Definition tm2fastiter.h:430
T_base::T_numtype T_numtype
Definition tm2fastiter.h:431
T_base::T_matrix T_matrix
Definition tm2fastiter.h:432
T_base::T_range_result T_range_result
Definition tm2fastiter.h:436
Definition tm2fastiter.h:349
void T_slice
Definition tm2fastiter.h:351
Definition tm2fastiter.h:53
void advance(int n)
Definition tm2fastiter.h:194
unwrapET< T_tvtypeprop >::T_unwrapped T_tvresult
Definition tm2fastiter.h:66
static int ascending(const int r)
Definition tm2fastiter.h:118
tvresult< N >::Type fastRead_tv(diffType i) const
Definition tm2fastiter.h:164
~FastTM2IteratorBase()
Definition tm2fastiter.h:110
static const int minWidth
Definition tm2fastiter.h:79
static int ordering(const int r)
Definition tm2fastiter.h:126
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
int T_ctorArg2
Definition tm2fastiter.h:71
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
asET< T_numtype >::T_wrapped T_typeprop
Definition tm2fastiter.h:59
void _bz_offsetData(sizeType i)
Definition tm2fastiter.h:215
unwrapET< T_typeprop >::T_unwrapped T_result
Definition tm2fastiter.h:60
static int lbound(const int r)
Definition tm2fastiter.h:134
P_numtype T_numtype
Definition tm2fastiter.h:55
FastTM2IteratorBase< P_numtype, N_rows, N_columns, P_arraytype > T_iterator
Definition tm2fastiter.h:69
void _bz_setData(const T_numtype *ptr)
Definition tm2fastiter.h:211
FastTM2IteratorBase(const T_matrix &array)
Definition tm2fastiter.h:104
TinyMatrix< T_numtype, N_rows, N_columns > T_matrix
Definition tm2fastiter.h:68
diffType stride_
Definition tm2fastiter.h:358
void pop(int position)
Definition tm2fastiter.h:184
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
const T_matrix & T_ctorArg1
Definition tm2fastiter.h:70
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
FastTM2CopyIterator< P_numtype, N_rows, N_columns > T_range_result
Definition tm2fastiter.h:72
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
FastTM2IteratorBase(const T_iterator &x)
Definition tm2fastiter.h:89
static int ubound(const int r)
Definition tm2fastiter.h:142
ETBase< FastTV2Iterator< T_numtype, simdTypes< T_numtype >::vecWidth > > T_tvtypeprop
Result type for fastRead_tv is a FastTVIterator.
Definition tm2fastiter.h:65
ConstPointerStack< T_numtype, rank_ > stack_
Definition tm2fastiter.h:357
bool canCollapse(int outerLoopRank, int innerLoopRank) const
Definition tm2fastiter.h:238
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
opType< T_numtype >::T_optype T_optype
Definition tm2fastiter.h:56
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
FastTM2Iterator(const FastTM2Iterator &x)
Definition tm2fastiter.h:389
FastTM2IteratorBase< P_numtype, N_rows, N_columns, const TinyMatrix< P_numtype, N_rows, N_columns > & > T_base
Definition tm2fastiter.h:373
T_base::T_numtype T_numtype
Definition tm2fastiter.h:374
T_base::T_iterator T_iterator
Definition tm2fastiter.h:376
T_base::T_ctorArg1 T_ctorArg1
Definition tm2fastiter.h:377
FastTM2Iterator(const T_matrix &array)
Definition tm2fastiter.h:393
T_base::T_ctorArg2 T_ctorArg2
Definition tm2fastiter.h:378
Definition tv2fastiter.h:383
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