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>
121 return T_matrix::isRankStoredAscending(r);
129 return T_matrix::ordering(r);
137 return T_matrix::lbound(r);
145 return T_matrix::ubound(r);
161 {
return array_.fastRead(i); }
174 {
return T_matrix::stride(r); }
177 {
return T_matrix::stride(r) ==
stride; }
201 stride_ = T_matrix::stride(rank);
230 {
return T_matrix::stride(r) == 1; }
241 template<
typename T_shape>
313 if (
format.tersePrintingSelected())
314 str +=
format.nextArrayOperandSymbol();
315 else if (
format.dumpArrayShapesMode())
318 std::ostringstream
ostr;
322 ostr << T_matrix::shape();
326 str +=
"TinyMatrix<";
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 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 memblock.h:307
T_type *restrict data_
Definition memblock.h:313
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
bool areShapesConformable(const T_shape1 &, const T_shape2 &)
Definition shapecheck.h:50
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