40 template<
class T,
unsigned Dim>
47 for (
unsigned d=0; d<
Dim; ++d)
77 template<
unsigned Dim,
bool B=(Dim<=3)>
78 class CompressedLoopTag
83 CompressedLoopTag() {}
84 CompressedLoopTag(const CompressedLoopTag<Dim,B> &) {}
85 CompressedLoopTag<Dim,B>&
86 operator=(const CompressedLoopTag<Dim,B> &) { return *this; }
95 template<
class T,
unsigned Dim>
103 int n = iter.
size(0);
104 for (
int i=0; i<
n; ++i)
106 if ( val != iter.
offset(i) )
117 template<
class T,
unsigned Dim>
125 int n0 = iter.
size(0);
126 int n1 = iter.
size(1);
128 if ( (n0>0)&&(n1>0) )
129 for (
int i1=0; i1<n1; ++i1)
130 for (
int i0=0; i0<n0; ++i0)
133 if ( !(val == iter.
offset(i0,i1)) )
145 template<
class T,
unsigned Dim>
153 int n0 = iter.
size(0);
154 int n1 = iter.
size(1);
155 int n2 = iter.
size(2);
156 if ( (n0>0)&&(n1>0)&&(n2>0) )
157 for (
int i2=0; i2<n2; ++i2)
158 for (
int i1=0; i1<n1; ++i1)
159 for (
int i0=0; i0<n0; ++i0)
161 if ( !(val == iter.
offset(i0,i1,i2)) )
175 template<
class T,
unsigned Dim1,
unsigned Dim2>
182 int n = iter.
size(Dim2-1);
183 for (
int i=0; i<
n; ++i)
205 template<
class T,
unsigned Dim>
211 return *CompressedData == val;
227 template<
class T,
unsigned Dim>
238 for (
unsigned int i=0; i <
Dim; ++i)
252 template<
class T,
unsigned Dim>
263 for (
unsigned int i=0; i <
Dim; ++i) {
284 template<
class T,
unsigned D1,
unsigned D2>
304 for (d2=0; d2<D2; ++d2)
307 permute.SetCount(d2,perm[d2].length());
313 for (d1=0; d1<D1; ++d1)
315 if ( current[d1].sameBase( perm[d2] ) )
331 template<
class T,
unsigned Dim>
347 template<
class T,
unsigned Dim>
365 template<
class T,
unsigned Dim>
374 if (CompressedData != 0) {
376 *CompressedData = val;
379 CompressedData = &val;
383 for (
unsigned d=0; d<
Dim; ++d)
391 template<
class T,
unsigned Dim>
402 if ( CanCompress(val) )
Message & putMessage(Message &, bool makecopy=true)
Message & putMessage(Message &m, bool makecopy=true)
const CompressedBrickIterator< T, Dim > & operator=(const CompressedBrickIterator< T, Dim > &rhs)
bool IsCompressed() const
int GetStride(int d) const
bool all_values_equal(const CompressedBrickIterator< T, Dim > &iter, T val, CompressedLoopTag< 1, true >)
void getMessage_iter(Message &m, OutputIterator o)
Message & getMessage(Message &)
T & GetCompressedData() const
Message & getMessage(Message &m)
CompressedBrickIterator< T, D2 > permute(const CompressedBrickIterator< T, D1 > &, const NDIndex< D1 > &, const NDIndex< D2 > &)
int size(unsigned d) const
Message & get(const T &cval)
Message & put(const T &val)
bool CanCompress(const T &) const
void putMessage(Message &m, const T &t)
CompressedBrickIterator()