31#ifndef BZ_ARRAY_TV2FASTITER_H
32#define BZ_ARRAY_TV2FASTITER_H
39 #include <strstream.h>
43#include <blitz/bzdebug.h>
51template<
typename,
int>
class FastTV2Iterator;
52template<
typename,
int>
class FastTV2CopyIterator;
55template<
typename P_numtype,
int N_length,
typename P_arraytype>
59 typedef typename opType<T_numtype>::T_optype
T_optype;
63 typedef typename unwrapET<T_typeprop>::T_unwrapped
T_result;
69 typedef typename unwrapET<T_tvtypeprop>::T_unwrapped
T_tvresult;
121 BZPRECONDITION(
array_.lengthCheck(i[0]));
127 BZPRECONDITION(r==0);
133 BZPRECONDITION(r==0);
139 BZPRECONDITION(r==0);
145 BZPRECONDITION(r==0);
160 {
return array_.fastRead(i); }
173 { BZPRECONDITION(r==0);
return stride_; }
180 BZPRECONDITION(position==0);
stack_[position] =
data_;
185 BZPRECONDITION(position==0);
data_ =
stack_[position];
200 BZPRECONDITION(r==0);
233 { BZPRECONDITION(r==0);
return stride_ == 1; }
243 BZPRECONDITION(outerLoopRank==0);
244 BZPRECONDITION(innerLoopRank==0);
248 template<
typename T_shape>
327 + offset2*
array_.stride(dim2)];
338 std::ostringstream ostr;
346 str +=
"TinyVector<";
347 str += BZ_DEBUG_TEMPLATE_AS_STRING_LITERAL(
T_numtype);
351 sprintf(tmpBuf,
"%d", N_length);
359 template<
typename T1,
typename T2 = nilArraySection,
360 class T3 = nilArraySection,
typename T4 = nilArraySection,
361 class T5 = nilArraySection,
typename T6 = nilArraySection,
362 class T7 = nilArraySection,
typename T8 = nilArraySection,
363 class T9 = nilArraySection,
typename T10 = nilArraySection,
364 class T11 = nilArraySection>
380template<
typename P_numtype,
int N_length>
408 using T_base::operator=;
414 using T_base::operator();
437template<
typename P_numtype,
int N_length>
466 using T_base::operator=;
472 using T_base::operator();
Definition constpointerstack.h:10
Definition tv2fastiter.h:440
T_base::T_range_result T_range_result
Definition tv2fastiter.h:449
void operator=(const FastTV2CopyIterator &x)
Definition tv2fastiter.h:467
FastTV2CopyIterator(const FastTV2CopyIterator< P_numtype, N_length > &x)
Definition tv2fastiter.h:460
FastTV2IteratorBase< P_numtype, N_length, const TinyVector< P_numtype, N_length > > T_base
Definition tv2fastiter.h:443
T_base::T_ctorArg1 T_ctorArg1
Definition tv2fastiter.h:447
T_base::T_numtype T_numtype
Definition tv2fastiter.h:444
FastTV2CopyIterator(const T_vector &array)
Definition tv2fastiter.h:464
T_base::T_vector T_vector
Definition tv2fastiter.h:445
T_base::T_iterator T_iterator
Definition tv2fastiter.h:446
T_base::T_ctorArg2 T_ctorArg2
Definition tv2fastiter.h:448
Definition tv2fastiter.h:365
void T_slice
Definition tv2fastiter.h:367
Definition tv2fastiter.h:56
const T_numtype *restrict data() const
Definition tv2fastiter.h:204
bool shapeCheck(const T_shape &s) const
Definition tv2fastiter.h:249
int ordering(const int r) const
Definition tv2fastiter.h:131
T_result first_value() const
Definition tv2fastiter.h:151
P_numtype T_numtype
Definition tv2fastiter.h:58
static const int maxWidth
Definition tv2fastiter.h:83
static const diffType stride_
Definition tv2fastiter.h:374
FastTV2CopyIterator< P_numtype, N_length > T_range_result
Definition tv2fastiter.h:75
FastTV2IteratorBase(const T_iterator &x)
Definition tv2fastiter.h:92
void prettyPrint(std::string &str, prettyPrintFormat &format) const
Definition tv2fastiter.h:330
const T_vector & array() const
Definition tv2fastiter.h:207
bool canCollapse(int outerLoopRank, int innerLoopRank) const
Definition tv2fastiter.h:241
tvresult< N >::Type fastRead_tv(diffType i) const
Definition tv2fastiter.h:163
T_result operator()(TinyVector< int, 1 > i) const
Definition tv2fastiter.h:119
FastTV2IteratorBase(const T_vector &array)
Definition tv2fastiter.h:107
static const int rank_
Definition tv2fastiter.h:84
T_numtype operator()(int i) const
Definition tv2fastiter.h:116
bool isUnitStride() const
Definition tv2fastiter.h:235
ConstPointerStack< T_numtype, rank_ > stack_
Definition tv2fastiter.h:373
bool isVectorAligned(diffType offset) const
Since data_ is simd aligned by construction, we just have to check the offest.
Definition tv2fastiter.h:169
void _bz_offsetData(sizeType i)
Definition tv2fastiter.h:215
int suggestStride(int r) const
Definition tv2fastiter.h:172
void _bz_offsetData(sizeType offset, int dim)
Definition tv2fastiter.h:220
static const int numArrayOperands
Definition tv2fastiter.h:78
const T_vector & T_ctorArg1
Definition tv2fastiter.h:73
asET< T_numtype >::T_wrapped T_typeprop
Definition tv2fastiter.h:62
bool isStride(int r, diffType stride) const
Definition tv2fastiter.h:175
opType< T_numtype >::T_optype T_optype
Definition tv2fastiter.h:59
int ascending(const int r) const
Definition tv2fastiter.h:125
T_result operator[](int i) const
Definition tv2fastiter.h:156
~FastTV2IteratorBase()
Definition tv2fastiter.h:113
void _bz_offsetData(sizeType offset1, int dim1, sizeType offset2, int dim2)
Definition tv2fastiter.h:224
void operator=(const T_iterator &x)
Definition tv2fastiter.h:96
void loadStride(int r)
Definition tv2fastiter.h:198
int stride() const
Definition tv2fastiter.h:229
void pop(int position)
Definition tv2fastiter.h:183
bool isUnitStride(int r) const
Definition tv2fastiter.h:232
int lbound(const int r) const
Definition tv2fastiter.h:137
P_arraytype array_
Definition tv2fastiter.h:372
static const int minWidth
Definition tv2fastiter.h:82
int T_ctorArg2
Definition tv2fastiter.h:74
unwrapET< T_typeprop >::T_unwrapped T_result
Definition tv2fastiter.h:63
int ubound(const int r) const
Definition tv2fastiter.h:143
static const int numTMOperands
Definition tv2fastiter.h:80
T_result operator*() const
Definition tv2fastiter.h:153
TinyVector< T_numtype, N_length > T_vector
Definition tv2fastiter.h:71
FastTV2IteratorBase< P_numtype, N_length, P_arraytype > T_iterator
Definition tv2fastiter.h:72
unwrapET< T_tvtypeprop >::T_unwrapped T_tvresult
Definition tv2fastiter.h:69
T_result fastRead(diffType i) const
Definition tv2fastiter.h:159
void _bz_setData(const T_numtype *ptr)
Definition tv2fastiter.h:210
ETBase< FastTV2Iterator< T_numtype, simdTypes< T_numtype >::vecWidth > > T_tvtypeprop
Result type for fastRead_tv is a FastTVIterator.
Definition tv2fastiter.h:68
const T_numtype *restrict data_
Definition tv2fastiter.h:371
void advanceUnitStride()
Definition tv2fastiter.h:238
void advance()
Definition tv2fastiter.h:188
static const int numTVOperands
Definition tv2fastiter.h:79
static const int numIndexPlaceholders
Definition tv2fastiter.h:81
void push(int position)
Definition tv2fastiter.h:178
void advance(int n)
Definition tv2fastiter.h:193
T_result shift(int offset1, int dim1, int offset2, int dim2) const
Definition tv2fastiter.h:324
T_result shift(int offset, int dim) const
Definition tv2fastiter.h:318
Definition tv2fastiter.h:383
T_base::T_vector T_vector
Definition tv2fastiter.h:388
void operator=(const FastTV2Iterator< P_numtype, N_length > &x)
Definition tv2fastiter.h:409
FastTV2IteratorBase< P_numtype, N_length, const TinyVector< P_numtype, N_length > & > T_base
Definition tv2fastiter.h:386
FastTV2Iterator(const T_vector &array)
Definition tv2fastiter.h:406
T_base::T_iterator T_iterator
Definition tv2fastiter.h:389
T_base::T_range_result T_range_result
Definition tv2fastiter.h:392
T_base::T_ctorArg1 T_ctorArg1
Definition tv2fastiter.h:390
FastTV2Iterator(const FastTV2Iterator< P_numtype, N_length > &x)
Definition tv2fastiter.h:402
T_base::T_numtype T_numtype
Definition tv2fastiter.h:387
T_base::T_ctorArg2 T_ctorArg2
Definition tv2fastiter.h:391
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 tv2fastiter.h:88
FastTV2Iterator< T_numtype, N > Type
Definition tv2fastiter.h:89