38 #include <blitz/array/asexpr.h>
59 class nilArraySection;
71 typedef unwrapET<T_typeprop>::T_unwrapped
T_result;
109 explicit Range(T_numtype slicePosition)
112 last_ = slicePosition;
119 BZPRECHECK((first == fromStart) || (last == toEnd) ||
120 ((first < last) && (
stride > 0)) ||
121 ((first > last) && (
stride < 0)) ||
122 (first == last), (*
this) <<
" is an invalid range.");
123 BZPRECHECK((first == fromStart) || (last == toEnd) ||
124 (last-first) %
stride == 0,
125 (*
this) <<
": the stride must evenly divide the range");
128 T_numtype
operator*()
const { BZPRECONDITION(0);
return 0; }
133 int lbound(
const int)
const {
return 0; }
138 bool assertInRange(
const T_index& BZ_DEBUG_PARAM(index))
const;
140 #ifdef BZ_ARRAY_EXPR_PASS_INDEX_BY_VALUE
161 BZPRECONDITION(0);
return *
this;
171 { BZPRECONDITION(0);
return 0; }
180 { BZPRECONDITION(0);
return 0; }
184 { BZPRECONDITION(0);
return 0; }
200 void moveTo(
int)
const { BZPRECONDITION(0); }
202 T_numtype
shift(
int offset,
int dim)
const {
205 T_numtype
shift(
int offset1,
int dim1,
int offset2,
int dim2)
const
206 { BZPRECONDITION(0);
return T_numtype(); }
215 std::ostringstream ostr;
228 T_numtype
first(T_numtype lowRange = 0)
const
235 T_numtype
last(T_numtype highRange = 0)
const
244 BZPRECONDITION(
first_ != fromStart);
245 BZPRECONDITION(
last_ != toEnd);
260 BZPRECONDITION(((first < last) && (
stride > 0)) ||
261 ((first > last) && (
stride < 0)) ||
263 BZPRECONDITION((last-first) %
stride == 0);
270 {
return Range(fromStart,toEnd,1); }
279 BZPRECONDITION(
first_ != fromStart);
280 BZPRECONDITION(
last_ != toEnd);
286 BZPRECONDITION(
first_ != fromStart);
287 BZPRECONDITION(
last_ != toEnd);
293 os <<
"Range(" << range.
first() <<
"," << range.
last() <<
","
300 template<
typename T1,
typename T2 = nilArraySection,
301 class T3 = nilArraySection,
typename T4 = nilArraySection,
302 class T5 = nilArraySection,
typename T6 = nilArraySection,
303 class T7 = nilArraySection,
typename T8 = nilArraySection,
304 class T9 = nilArraySection,
typename T10 = nilArraySection,
305 class T11 = nilArraySection>
311 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
312 typename T7,
typename T8,
typename T9,
typename T10,
typename T11>
313 typename SliceInfo<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11>::T_slice
314 operator()(T1 r1, T2 r2, T3 r3, T4 r4, T5 r5, T6 r6, T7 r7, T8 r8, T9 r9, T10 r10, T11 r11)
const
Range operator+(T_numtype shift) const
Definition: range.h:284
void pop(int)
Definition: range.h:165
bool isAscendingContiguous() const
Definition: range.h:253
_bz_global blitz::IndexPlaceholder< 9 > r
Definition: indexexpr.h:265
T_numtype last_
Definition: range.h:320
bool assertInRange(const T_index &BZ_DEBUG_PARAM(index)) const
Range(const Range &r)
Definition: range.h:102
opType< T_numtype >::T_optype T_optype
Definition: range.h:68
int ascending(const int) const
Definition: range.h:131
_bz_global blitz::IndexPlaceholder< 0 > i
Definition: indexexpr.h:256
int length(int=0) const
Definition: range.h:242
bool isUnitStride() const
Definition: range.h:273
diffType stride() const
Definition: range.h:250
Helper class that defines the width of the simd instructions for a given type.
Definition: simdtypes.h:31
int T_numtype
Definition: range.h:67
void prettyPrint(std::string &str, prettyPrintFormat &format) const
Definition: range.h:211
int ubound(const int) const
Definition: range.h:134
diffType suggestStride(int) const
Definition: range.h:194
bool canCollapse(int, int) const
Definition: range.h:176
static Range all()
Definition: range.h:269
void setRange(T_numtype first, T_numtype last, diffType stride=1)
Definition: range.h:258
T_numtype first_
Definition: range.h:320
Range operator-(T_numtype shift) const
Definition: range.h:277
static const int numIndexPlaceholders
Definition: range.h:81
const int toEnd
Definition: range.h:62
static const int minWidth
Definition: range.h:82
void T_slice
Definition: range.h:308
FastTV2Iterator< T_numtype, N > Type
Definition: range.h:92
SliceInfo< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 >::T_slice operator()(T1 r1, T2 r2, T3 r3, T4 r4, T5 r5, T6 r6, T7 r7, T8 r8, T9 r9, T10 r10, T11 r11) const
Definition: range.h:314
static const int numArrayOperands
Definition: range.h:78
friend ostream & operator<<(ostream &os, const Range &range)
Definition: range.h:291
Definition: et-forward.h:10
void _bz_offsetData(sizeType offset1, int dim1, sizeType offset2, int dim2) const
Definition: range.h:192
T_numtype operator()(const TinyVector< int, N_rank > &i) const
Definition: range.h:146
void advance()
Definition: range.h:166
int ordering(const int) const
Definition: range.h:132
T_numtype fastRead(diffType) const
Definition: range.h:179
void moveTo(const TinyVector< int, N_rank > &) const
Definition: range.h:209
Definition: et-forward.h:20
Definition: array-impl.h:66
T_numtype last(T_numtype highRange=0) const
Definition: range.h:235
T_numtype operator[](int i) const
ptrdiff_t diffType
Definition: blitz.h:111
Range(T_numtype slicePosition)
Definition: range.h:109
T_numtype shift(int offset1, int dim1, int offset2, int dim2) const
Definition: range.h:205
Range()
Definition: range.h:95
void T_ctorArg1
Definition: range.h:73
void advanceUnitStride()
Definition: range.h:173
size_t sizeType
Definition: blitz.h:110
diffType stride_
Definition: range.h:321
T_numtype operator*() const
Definition: range.h:128
tvresult< N >::Type fastRead_tv(diffType) const
Definition: range.h:183
static const int maxWidth
Definition: range.h:83
void moveTo(int) const
Definition: range.h:200
Range(T_numtype first, T_numtype last, diffType stride=1)
Definition: range.h:116
Range T_range_result
Definition: range.h:76
void push(int)
Definition: range.h:164
asET< T_numtype >::T_wrapped T_typeprop
Definition: range.h:70
unwrapET< T_typeprop >::T_unwrapped T_result
Definition: range.h:71
T_numtype operator()(int i) const
Definition: range.h:152
char T_ctorArg2
Definition: range.h:74
void _bz_offsetData(sizeType offset, int dim) const
Definition: range.h:190
bool isStride(int, diffType) const
Definition: range.h:197
TinyVector< int, 1 > T_index
Definition: range.h:75
T_numtype shift(int offset, int dim) const
Definition: range.h:202
int lbound(const int) const
Definition: range.h:133
RectDomain< rank_ > domain() const
void loadStride(int)
Definition: range.h:168
void advance(int)
Definition: range.h:167
static const int numTVOperands
Definition: range.h:79
static const int rank_
Definition: range.h:84
The vectorized return type for a Range should be another range, but that's not useful since a vectori...
Definition: range.h:91
The TinyVector class is a one-dimensional, fixed length vector that implements the blitz expression t...
Definition: et-forward.h:14
static const int numTMOperands
Definition: range.h:80
bool isUnitStride(int) const
Definition: range.h:170
void _bz_offsetData(sizeType i) const
Definition: range.h:187
T_numtype first(T_numtype lowRange=0) const
Definition: range.h:228
T_numtype first_value() const
Definition: range.h:129
const int fromStart
Definition: range.h:61
const Range operator()(const RectDomain< N_rank > &d) const
Definition: range.h:159