51 tuple(
const string &l,
long long v) : label(l),
value(v) {}
54 vector<tuple> d_tuples;
56 void m_duplicate(
const D4EnumDef &rhs) {
59 d_parent = rhs.d_parent;
60 d_tuples = rhs.d_tuples;
63 void print_value(
XMLWriter &xml,
const D4EnumDef::tuple &tuple)
const;
66 typedef vector<tuple>::iterator D4EnumValueIter;
68 D4EnumDef() : d_name(
""), d_type(dods_null_c), d_parent(0) {}
69 D4EnumDef(
const string &n,
const Type &t,
D4EnumDefs *e = 0) : d_name(n), d_type(t), d_parent(e) {}
70 D4EnumDef(
const D4EnumDef &rhs) { m_duplicate(rhs); }
72 virtual ~D4EnumDef() {}
74 D4EnumDef &operator=(
const D4EnumDef &rhs) {
81 string name()
const {
return d_name; }
82 void set_name(
const string &n) { d_name = n; }
84 Type type()
const {
return d_type; }
85 void set_type(
Type t) { d_type = t; }
87 D4EnumDefs *parent()
const {
return d_parent; }
88 void set_parent(
D4EnumDefs *e) { d_parent = e; }
90 bool empty()
const {
return d_tuples.empty(); }
92 void add_value(
const string &label,
long long value) { d_tuples.push_back(tuple(label, value)); }
94 D4EnumValueIter value_begin() {
return d_tuples.begin(); }
95 D4EnumValueIter value_end() {
return d_tuples.end(); }
96 string &label(D4EnumValueIter i) {
return (*i).label; }
97 long long value(D4EnumValueIter i) {
return (*i).value; }
105 vector<D4EnumDef *> d_enums;
111 void m_duplicate(
const D4EnumDefs &rhs) {
112 D4EnumDefCIter i = rhs.d_enums.begin();
113 while (i != rhs.d_enums.end()) {
117 d_parent = rhs.d_parent;
121 typedef vector<D4EnumDef *>::iterator D4EnumDefIter;
122 typedef vector<D4EnumDef *>::const_iterator D4EnumDefCIter;
124 D4EnumDefs() : d_parent(0) {}
125 D4EnumDefs(
const D4EnumDefs &rhs) { m_duplicate(rhs); }
127 virtual ~D4EnumDefs() {
128 D4EnumDefIter i = d_enums.begin();
129 while (i != d_enums.end()) {
134 D4EnumDefs &operator=(
const D4EnumDefs &rhs) {
141 bool empty()
const {
return d_enums.empty(); }
143 D4Group *parent()
const {
return d_parent; }
144 void set_parent(
D4Group *p) { d_parent = p; }
151 void add_enum_nocopy(
D4EnumDef *enum_def) {
152 enum_def->set_parent(
this);
153 d_enums.push_back(enum_def);
162 D4EnumDef *find_enum_def(
const string &name);
174 enum_def_copy->set_parent(
this);
175 d_enums.insert(i, enum_def_copy);
178 void print_dap4(
XMLWriter &xml,
bool constrained =
false)
const;
bool is_valid_enum_value(long long value)
void insert_enum(D4EnumDef *enum_def, D4EnumDefIter i)
Insert a D4EnumDef. Insert a D4EnumDef before the position specified by the iterator.
D4EnumDefIter enum_end()
Get an iterator to the end of the enumerations.
void add_enum(D4EnumDef *enum_def)
D4EnumDefIter enum_begin()
Get an iterator to the start of the enumerations.
top level DAP object to house generic methods
Type
Identifies the data type.
virtual D4SeqValues value() const
Get the values for this D4Sequence This method returns a reference to the values held by the instance...