namespace std {
class gslice {
public:
gslice();
gslice(size_t s, const valarray<size_t>& l, const valarray<size_t>& d);
size_t start() const;
valarray<size_t> size() const;
valarray<size_t> stride() const;
};
}This class represents a generalized slice out of an array. A gslice is defined by a starting offset (s), a set of lengths (), and a set of strides (). The number of lengths shall equal the number of strides.
A gslice represents a mapping from a set of indices (), equal in number to the number of strides, to a single index k. It is useful for building multidimensional array classes using the valarray template, which is one-dimensional. The set of one-dimensional index values specified by a gslice are
where the multidimensional indices range in value from 0 to .
[ Example: The gslice specification
start = 3
length = {2, 4, 3}
stride = {19, 4, 1}yields the sequence of one-dimensional indices
which are ordered as shown in the following table:
, , , , , , , , , , , , , , …
That is, the highest-ordered index turns fastest. — end example ]
[ Example: If the stride parameters in the previous example are changed to {1, 1, 1}, the first few elements of the resulting sequence of indices will be
, , , , , , …
— end example ]