28#include "D4EnumDefs.h"
32#include "dods-limits.h"
47 return (value >= DODS_SCHAR_MIN && value <= DODS_SCHAR_MAX);
50 return (value >= 0 &&
static_cast<unsigned long long>(value) <= DODS_UCHAR_MAX);
52 return (value >= DODS_SHRT_MIN && value <= DODS_SHRT_MAX);
54 return (value >= 0 &&
static_cast<unsigned long long>(value) <= DODS_USHRT_MAX);
56 return (value >= DODS_INT_MIN && value <= DODS_INT_MAX);
58 return (value >= 0 &&
static_cast<unsigned long long>(value) <= DODS_UINT_MAX);
72enum_def_name_eq(
D4EnumDef *d,
const string name)
74 return d->name() == name;
79D4EnumDefs::find_enum_def(
const string &name)
81 auto d = find_if(d_enums.begin(), d_enums.end(),
82 [name](
const D4EnumDef *def) { return name == def->name(); });
84 return (d != d_enums.end()) ? *d:
nullptr;
87void D4EnumDef::print_value(XMLWriter &xml,
const D4EnumDef::tuple &tuple)
const
89 if (xmlTextWriterStartElement(xml.get_writer(), (
const xmlChar*)
"EnumConst") < 0)
90 throw InternalErr(__FILE__, __LINE__,
"Could not write EnumConst element");
92 if (xmlTextWriterWriteAttribute(xml.get_writer(), (
const xmlChar*)
"name", (
const xmlChar*)tuple.label.c_str()) < 0)
93 throw InternalErr(__FILE__, __LINE__,
"Could not write attribute for name");
97 if (xmlTextWriterWriteAttribute(xml.get_writer(), (
const xmlChar*)
"value", (
const xmlChar*)oss.str().c_str()) < 0)
98 throw InternalErr(__FILE__, __LINE__,
"Could not write attribute for value");
100 if (xmlTextWriterEndElement(xml.get_writer()) < 0)
101 throw InternalErr(__FILE__, __LINE__,
"Could not end EnumConst element");
104void D4EnumDef::print_dap4(XMLWriter &xml)
const
106 vector<D4EnumDef::tuple>::const_iterator i = d_tuples.begin();
107 while(i != d_tuples.end()) {
108 print_value(xml, *i++);
112void D4EnumDefs::m_print_enum(XMLWriter &xml, D4EnumDef *e)
const
114 if (xmlTextWriterStartElement(xml.get_writer(), (
const xmlChar*)
"Enumeration") < 0)
115 throw InternalErr(__FILE__, __LINE__,
"Could not write Enumeration element");
117 if (xmlTextWriterWriteAttribute(xml.get_writer(), (
const xmlChar*)
"name", (
const xmlChar*)e->name().c_str()) < 0)
118 throw InternalErr(__FILE__, __LINE__,
"Could not write attribute for name");
120 if (xmlTextWriterWriteAttribute(xml.get_writer(), (
const xmlChar*)
"basetype", (
const xmlChar*)
D4type_name(e->type()).c_str()) < 0)
121 throw InternalErr(__FILE__, __LINE__,
"Could not write attribute for name");
126 if (xmlTextWriterEndElement(xml.get_writer()) < 0)
127 throw InternalErr(__FILE__, __LINE__,
"Could not end Enumeration element");
130void D4EnumDefs::print_dap4(XMLWriter &xml,
bool constrained)
const
132 D4EnumDefCIter i = d_enums.begin();
133 while (i != d_enums.end()) {
134 if (!constrained || parent()->find_first_var_that_uses_enumeration(*i))
135 m_print_enum(xml, *i);
bool is_valid_enum_value(long long value)
top level DAP object to house generic methods
string D4type_name(Type t)
Returns the type of the class instance as a string. Supports all DAP4 types and not the DAP2-only typ...