27#include "D4EnumDefs.h"
32#include "dods-limits.h"
45 return (value >= DODS_SCHAR_MIN && value <= DODS_SCHAR_MAX);
48 return (value >= 0 &&
static_cast<unsigned long long>(value) <= DODS_UCHAR_MAX);
50 return (value >= DODS_SHRT_MIN && value <= DODS_SHRT_MAX);
52 return (value >= 0 &&
static_cast<unsigned long long>(value) <= DODS_USHRT_MAX);
54 return (value >= DODS_INT_MIN && value <= DODS_INT_MAX);
56 return (value >= 0 &&
static_cast<unsigned long long>(value) <= DODS_UINT_MAX);
70enum_def_name_eq(
D4EnumDef *d,
const string name)
72 return d->name() == name;
76D4EnumDef *D4EnumDefs::find_enum_def(
const string &name) {
77 auto d = find_if(d_enums.begin(), d_enums.end(), [name](
const D4EnumDef *def) { return name == def->name(); });
79 return (d != d_enums.end()) ? *d :
nullptr;
82void D4EnumDef::print_value(
XMLWriter &xml,
const D4EnumDef::tuple &tuple)
const {
83 if (xmlTextWriterStartElement(xml.get_writer(), (
const xmlChar *)
"EnumConst") < 0)
84 throw InternalErr(__FILE__, __LINE__,
"Could not write EnumConst element");
86 if (xmlTextWriterWriteAttribute(xml.get_writer(), (
const xmlChar *)
"name", (
const xmlChar *)tuple.label.c_str()) <
88 throw InternalErr(__FILE__, __LINE__,
"Could not write attribute for name");
92 if (xmlTextWriterWriteAttribute(xml.get_writer(), (
const xmlChar *)
"value", (
const xmlChar *)oss.str().c_str()) < 0)
93 throw InternalErr(__FILE__, __LINE__,
"Could not write attribute for value");
95 if (xmlTextWriterEndElement(xml.get_writer()) < 0)
96 throw InternalErr(__FILE__, __LINE__,
"Could not end EnumConst element");
99void D4EnumDef::print_dap4(
XMLWriter &xml)
const {
100 vector<D4EnumDef::tuple>::const_iterator i = d_tuples.begin();
101 while (i != d_tuples.end()) {
102 print_value(xml, *i++);
107 if (xmlTextWriterStartElement(xml.get_writer(), (
const xmlChar *)
"Enumeration") < 0)
108 throw InternalErr(__FILE__, __LINE__,
"Could not write Enumeration element");
110 if (xmlTextWriterWriteAttribute(xml.get_writer(), (
const xmlChar *)
"name", (
const xmlChar *)e->name().c_str()) < 0)
111 throw InternalErr(__FILE__, __LINE__,
"Could not write attribute for name");
113 if (xmlTextWriterWriteAttribute(xml.get_writer(), (
const xmlChar *)
"basetype",
114 (
const xmlChar *)
D4type_name(e->type()).c_str()) < 0)
115 throw InternalErr(__FILE__, __LINE__,
"Could not write attribute for name");
120 if (xmlTextWriterEndElement(xml.get_writer()) < 0)
121 throw InternalErr(__FILE__, __LINE__,
"Could not end Enumeration element");
124void D4EnumDefs::print_dap4(
XMLWriter &xml,
bool constrained)
const {
125 D4EnumDefCIter i = d_enums.begin();
126 while (i != d_enums.end()) {
127 if (!constrained || parent()->find_first_var_that_uses_enumeration(*i))
128 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...