31 #ifndef BZ_ARRAY_TV2FASTITER_H
32 #define BZ_ARRAY_TV2FASTITER_H
39 #include <strstream.h>
43 #include <blitz/bzdebug.h>
51 template<
typename,
int>
class FastTV2Iterator;
52 template<
typename,
int>
class FastTV2CopyIterator;
55 template<
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_; }
176 { BZPRECONDITION(r==0);
return stride==
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>
318 T_result
shift(
int offset,
int dim)
const
324 T_result
shift(
int offset1,
int dim1,
int offset2,
int dim2)
const
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>
380 template<
typename P_numtype,
int N_length>
408 using T_base::operator=;
414 using T_base::operator();
437 template<
typename P_numtype,
int N_length>
438 class FastTV2CopyIterator :
439 public FastTV2IteratorBase<P_numtype, N_length, const TinyVector<P_numtype, N_length> >
466 using T_base::operator=;
472 using T_base::operator();
494 #endif // BZ_ARRAY_FASTITER_H
const T_vector & array() const
Definition: tv2fastiter.h:207
const T_numtype *restrict data_
Definition: tv2fastiter.h:371
T_result first_value() const
Definition: tv2fastiter.h:151
_bz_global blitz::IndexPlaceholder< 9 > r
Definition: indexexpr.h:265
opType< T_numtype >::T_optype T_optype
Definition: tv2fastiter.h:59
Definition: et-forward.h:21
void advance(int n)
Definition: tv2fastiter.h:193
bool isUnitStride(int r) const
Definition: tv2fastiter.h:232
T_base::T_iterator T_iterator
Definition: tv2fastiter.h:389
int ubound(const int r) const
Definition: tv2fastiter.h:143
_bz_global blitz::IndexPlaceholder< 0 > i
Definition: indexexpr.h:256
int suggestStride(int r) const
Definition: tv2fastiter.h:172
static const int numTMOperands
Definition: tv2fastiter.h:80
FastTV2CopyIterator< P_numtype, N_length > T_range_result
Definition: tv2fastiter.h:75
int lbound(const int r) const
Definition: tv2fastiter.h:137
Helper class that defines the width of the simd instructions for a given type.
Definition: simdtypes.h:31
TinyVector< T_numtype, N_length > T_vector
Definition: tv2fastiter.h:71
static const int maxWidth
Definition: tv2fastiter.h:83
FastTV2IteratorBase< P_numtype, N_length, const TinyVector< P_numtype, N_length > > T_base
Definition: tv2fastiter.h:443
FastTV2IteratorBase< P_numtype, N_length, const TinyVector< P_numtype, N_length > & > T_base
Definition: tv2fastiter.h:386
FastTV2IteratorBase< P_numtype, N_length, P_arraytype > T_iterator
Definition: tv2fastiter.h:72
T_base::T_ctorArg1 T_ctorArg1
Definition: tv2fastiter.h:447
int T_ctorArg2
Definition: tv2fastiter.h:74
const T_vector & T_ctorArg1
Definition: tv2fastiter.h:73
ConstPointerStack< T_numtype, rank_ > stack_
Definition: tv2fastiter.h:373
bool isStride(int r, diffType stride) const
Definition: tv2fastiter.h:175
void _bz_setData(const T_numtype *ptr)
Definition: tv2fastiter.h:210
static const diffType stride_
Definition: tv2fastiter.h:374
FastTV2IteratorBase(const T_iterator &x)
Definition: tv2fastiter.h:92
int ascending(const int r) const
Definition: tv2fastiter.h:125
Definition: et-forward.h:10
void advanceUnitStride()
Definition: tv2fastiter.h:238
For an iterator, the vectorized result for width N is always a TinyVector.
Definition: tv2fastiter.h:88
FastTV2Iterator< T_numtype, N > Type
Definition: tv2fastiter.h:89
void prettyPrint(std::string &str, prettyPrintFormat &format) const
Definition: tv2fastiter.h:330
T_base::T_numtype T_numtype
Definition: tv2fastiter.h:387
void _bz_offsetData(sizeType i)
Definition: tv2fastiter.h:215
void _bz_offsetData(sizeType offset, int dim)
Definition: tv2fastiter.h:220
void push(int position)
Definition: tv2fastiter.h:178
static const int numTVOperands
Definition: tv2fastiter.h:79
int stride() const
Definition: tv2fastiter.h:229
T_result operator()(TinyVector< int, 1 > i) const
Definition: tv2fastiter.h:119
T_base::T_vector T_vector
Definition: tv2fastiter.h:445
T_numtype operator()(int i) const
Definition: tv2fastiter.h:116
void operator=(const FastTV2Iterator< P_numtype, N_length > &x)
Definition: tv2fastiter.h:409
Definition: et-forward.h:20
T_result fastRead(diffType i) const
Definition: tv2fastiter.h:159
FastTV2CopyIterator(const FastTV2CopyIterator< P_numtype, N_length > &x)
Definition: tv2fastiter.h:460
Definition: array-impl.h:66
T_base::T_ctorArg2 T_ctorArg2
Definition: tv2fastiter.h:448
T_base::T_range_result T_range_result
Definition: tv2fastiter.h:392
void pop(int position)
Definition: tv2fastiter.h:183
ptrdiff_t diffType
Definition: blitz.h:111
~FastTV2IteratorBase()
Definition: tv2fastiter.h:113
T_base::T_numtype T_numtype
Definition: tv2fastiter.h:444
static const int numArrayOperands
Definition: tv2fastiter.h:78
bool areShapesConformable(const T_shape1 &, const T_shape2 &)
Definition: shapecheck.h:50
FastTV2Iterator(const FastTV2Iterator< P_numtype, N_length > &x)
Definition: tv2fastiter.h:402
bool shapeCheck(const T_shape &s) const
Definition: tv2fastiter.h:249
static const int rank_
Definition: tv2fastiter.h:84
T_base::T_vector T_vector
Definition: tv2fastiter.h:388
int ordering(const int r) const
Definition: tv2fastiter.h:131
size_t sizeType
Definition: blitz.h:110
FastTV2IteratorBase(const T_vector &array)
Definition: tv2fastiter.h:107
Definition: tv2fastiter.h:365
P_numtype T_numtype
Definition: tv2fastiter.h:58
asET< T_numtype >::T_wrapped T_typeprop
Definition: tv2fastiter.h:62
T_base::T_ctorArg1 T_ctorArg1
Definition: tv2fastiter.h:390
void operator=(const T_iterator &x)
Definition: tv2fastiter.h:96
T_result shift(int offset1, int dim1, int offset2, int dim2) const
Definition: tv2fastiter.h:324
const T_numtype *restrict data() const
Definition: tv2fastiter.h:204
bool canCollapse(int outerLoopRank, int innerLoopRank) const
Definition: tv2fastiter.h:241
void T_slice
Definition: tv2fastiter.h:367
T_result operator[](int i) const
Definition: tv2fastiter.h:156
T_base::T_iterator T_iterator
Definition: tv2fastiter.h:446
T_result shift(int offset, int dim) const
Definition: tv2fastiter.h:318
unwrapET< T_tvtypeprop >::T_unwrapped T_tvresult
Definition: tv2fastiter.h:69
FastTV2Iterator(const T_vector &array)
Definition: tv2fastiter.h:406
void _bz_offsetData(sizeType offset1, int dim1, sizeType offset2, int dim2)
Definition: tv2fastiter.h:224
void loadStride(int r)
Definition: tv2fastiter.h:198
_bz_global blitz::IndexPlaceholder< 10 > s
Definition: indexexpr.h:266
ETBase< FastTV2Iterator< T_numtype, simdTypes< T_numtype >::vecWidth > > T_tvtypeprop
Result type for fastRead_tv is a FastTVIterator.
Definition: tv2fastiter.h:68
T_base::T_ctorArg2 T_ctorArg2
Definition: tv2fastiter.h:391
bool isUnitStride() const
Definition: tv2fastiter.h:235
bool isVectorAligned(diffType offset) const
Since data_ is simd aligned by construction, we just have to check the offest.
Definition: tv2fastiter.h:169
T_base::T_range_result T_range_result
Definition: tv2fastiter.h:449
FastTV2CopyIterator(const T_vector &array)
Definition: tv2fastiter.h:464
#define restrict
Definition: compiler.h:95
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
T_result operator*() const
Definition: tv2fastiter.h:153
unwrapET< T_typeprop >::T_unwrapped T_result
Definition: tv2fastiter.h:63
static const int numIndexPlaceholders
Definition: tv2fastiter.h:81
Definition: tv2fastiter.h:56
void advance()
Definition: tv2fastiter.h:188
static const int minWidth
Definition: tv2fastiter.h:82
P_arraytype array_
Definition: tv2fastiter.h:372
void operator=(const FastTV2CopyIterator &x)
Definition: tv2fastiter.h:467
tvresult< N >::Type fastRead_tv(diffType i) const
Definition: tv2fastiter.h:163