30#ifndef __NCML_MODULE__SHAPE_H__
31#define __NCML_MODULE__SHAPE_H__
35#include <libdap/Array.h>
61 typedef std::vector<unsigned int> IndexTuple;
71 class IndexIterator:
public std::iterator<std::forward_iterator_tag, IndexTuple> {
83 return (!((*
this) == rhs));
101 inline const Shape::IndexTuple& operator*()
103 NCML_ASSERT_MSG(!_end,
"Can't reference end iterator!");
109 void advanceCurrent();
112 void setCurrentToStart();
128 Shape(
const Array& copyDimsFrom);
140 return !(*
this == rhs);
149 inline unsigned int getNumDimensions()
const
156 static bool areDimensionsEqual(
const Array::dimension& lhs,
const Array::dimension& rhs);
161 unsigned int size = 1;
162 for (
unsigned int i = 0; i < _dims.size(); ++i) {
163 size *= _dims[i].size;
171 unsigned int c_size = 1;
172 for (
unsigned int i = 0; i < _dims.size(); ++i) {
173 c_size *= _dims[i].c_size;
194 unsigned int getRowMajorIndex(
const IndexTuple& indices,
bool validate =
true)
const;
216 void print(std::ostream& strm)
const;
219 static void printDimension(std::ostream& strm,
const Array::dimension& dim);
230 std::vector<Array::dimension> _dims;
A wrapper class for a vector of Array::dimension structs.
Shape::IndexIterator endSpaceEnumeration() const
void setToUnconstrained()
unsigned int getConstrainedSpaceSize() const
std::string toString() const
bool operator!=(const Shape &rhs) const
static bool areDimensionsEqual(const Array::dimension &lhs, const Array::dimension &rhs)
bool validateIndices(const IndexTuple &indices) const
bool isConstrained() const
unsigned int getRowMajorIndex(const IndexTuple &indices, bool validate=true) const
Shape::IndexIterator beginSpaceEnumeration() const
bool operator==(const Shape &rhs) const
unsigned int getUnconstrainedSpaceSize() const
static void printDimension(std::ostream &strm, const Array::dimension &dim)
void print(std::ostream &strm) const
NcML Parser for adding/modifying/removing metadata (attributes) to existing local datasets using NcML...