59 typedef std::vector<unsigned int> shape;
64 size_t d_highest_offset;
80 explicit Odometer(shape shape) : d_shape(std::move(shape))
82 d_rank = d_shape.size();
86 for (
unsigned int i = 0; i < d_rank; ++i) {
87 d_highest_offset *= d_shape.at(i);
90 d_indices.resize(d_rank, 0);
99 for (
unsigned int i = 0; i < d_rank; ++i)
118 auto si = d_shape.rbegin();
119 for (
auto i = d_indices.rbegin(), e = d_indices.rend(); i != e; ++i, ++si) {
132 unsigned int next_safe();
148 auto shape_index = d_shape.rbegin();
149 auto index = d_indices.rbegin(), index_end = d_indices.rend();
151 unsigned int chunk_size = *shape_index++;
152 while (index != index_end) {
153 d_offset += chunk_size * *index++;
154 chunk_size *= *shape_index++;
163 std::copy(
indices.begin(),
indices.end(), std::back_inserter(temp));
196 return d_highest_offset;
unsigned int set_indices(const shape &indices)
void indices(shape &indices)