40template<
class T,
unsigned Dim>
47 for (
unsigned d=0; d<
Dim; ++d)
77template<
unsigned Dim,
bool B=(Dim<=3)>
78class CompressedLoopTag
87template<
class T,
unsigned Dim>
96 for (
int i=0; i<
n; ++i)
98 if ( val != iter.
offset(i) )
109template<
class T,
unsigned Dim>
117 int n0 = iter.
size(0);
118 int n1 = iter.
size(1);
120 if ( (n0>0)&&(n1>0) )
121 for (
int i1=0; i1<n1; ++i1)
122 for (
int i0=0; i0<n0; ++i0)
125 if ( !(val == iter.
offset(i0,i1)) )
137template<
class T,
unsigned Dim>
145 int n0 = iter.
size(0);
146 int n1 = iter.
size(1);
147 int n2 = iter.
size(2);
148 if ( (n0>0)&&(n1>0)&&(n2>0) )
149 for (
int i2=0; i2<n2; ++i2)
150 for (
int i1=0; i1<n1; ++i1)
151 for (
int i0=0; i0<n0; ++i0)
153 if ( !(val == iter.
offset(i0,i1,i2)) )
167template<
class T,
unsigned Dim1,
unsigned Dim2>
174 int n = iter.
size(Dim2-1);
175 for (
int i=0; i<
n; ++i)
197template<
class T,
unsigned Dim>
203 return *CompressedData == val;
219template<
class T,
unsigned Dim>
230 for (
unsigned int i=0; i <
Dim; ++i)
244template<
class T,
unsigned Dim>
255 for (
unsigned int i=0; i <
Dim; ++i) {
276template<
class T,
unsigned D1,
unsigned D2>
296 for (d2=0; d2<D2; ++d2)
299 permute.SetCount(d2,perm[d2].length());
305 for (d1=0; d1<D1; ++d1)
307 if ( current[d1].sameBase( perm[d2] ) )
323template<
class T,
unsigned Dim>
339template<
class T,
unsigned Dim>
357template<
class T,
unsigned Dim>
366 if (CompressedData != 0) {
368 *CompressedData = val;
371 CompressedData = &val;
375 for (
unsigned d=0; d<
Dim; ++d)
383template<
class T,
unsigned Dim>
394 if ( CanCompress(val) )
void putMessage(Message &m, const T &t)
void getMessage_iter(Message &m, OutputIterator o)
CompressedBrickIterator< T, D2 > permute(const CompressedBrickIterator< T, D1 > &iter, const NDIndex< D1 > ¤t, const NDIndex< D2 > &perm)
bool all_values_equal(const CompressedBrickIterator< T, Dim > &iter, T val, CompressedLoopTag< 1, true >)
bool CanCompress(const T &) const
Message & getMessage(Message &m)
CompressedBrickIterator()
T & GetCompressedData() const
Message & putMessage(Message &m, bool makecopy=true)
const CompressedBrickIterator< T, Dim > & operator=(const CompressedBrickIterator< T, Dim > &rhs)
int GetStride(int d) const
bool IsCompressed() const
int size(unsigned d) const
Message & getMessage(Message &)
Message & putMessage(Message &, bool makecopy=true)
Message & put(const T &val)
Message & get(const T &cval)