46 #include "InternalErr.h" 48 #include "dods-datatypes.h" 49 #include "dods-limits.h" 56 D4RValueList::~D4RValueList()
58 for (std::vector<D4RValue *>::iterator i = d_rvalues.begin(), e = d_rvalues.end(); i != e; ++i)
62 template<
typename T,
class DAP_TYPE>
64 build_constant_array(vector<T> &values, DAP_TYPE &dt)
66 Array *array =
new Array(
"", &dt);
67 array->append_dim(values.size());
72 array->set_value(values, values.size());
74 array->set_read_p(
true);
76 static unsigned long counter = 1;
77 array->set_name(
string(
"g") + long_to_string(counter++));
82 D4RValue::D4RValue(
unsigned long long ull) : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
84 UInt64 *ui =
new UInt64(
"constant");
89 D4RValue::D4RValue(
long long ll) : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
91 Int64 *i =
new Int64(
"constant");
96 D4RValue::D4RValue(
double r) : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
98 Float64 *f =
new Float64(
"constant");
103 D4RValue::D4RValue(std::string cpps) : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
105 Str *s =
new Str(
"constant");
110 D4RValue::D4RValue(std::vector<dods_byte> &byte_args)
111 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
114 d_constant = build_constant_array(byte_args, b);
117 D4RValue::D4RValue(std::vector<dods_int8> &byte_int8)
118 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
121 d_constant = build_constant_array(byte_int8, b);
124 D4RValue::D4RValue(std::vector<dods_uint16> &byte_uint16)
125 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
128 d_constant = build_constant_array(byte_uint16, b);
131 D4RValue::D4RValue(std::vector<dods_int16> &byte_int16)
132 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
135 d_constant = build_constant_array(byte_int16, b);
138 D4RValue::D4RValue(std::vector<dods_uint32> &byte_uint32)
139 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
142 d_constant = build_constant_array(byte_uint32, b);
145 D4RValue::D4RValue(std::vector<dods_int32> &byte_int32)
146 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
149 d_constant = build_constant_array(byte_int32, b);
152 D4RValue::D4RValue(std::vector<dods_uint64> &byte_uint64)
153 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
156 d_constant = build_constant_array(byte_uint64, b);
159 D4RValue::D4RValue(std::vector<dods_int64> &byte_int64)
160 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
163 d_constant = build_constant_array(byte_int64, b);
166 D4RValue::D4RValue(std::vector<dods_float32> &byte_float32)
167 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
170 d_constant = build_constant_array(byte_float32, b);
173 D4RValue::D4RValue(std::vector<dods_float64> &byte_float64)
174 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
177 d_constant = build_constant_array(byte_float64, b);
180 D4RValue::~D4RValue() {
200 switch (d_value_kind) {
203 d_variable->set_read_p(
true);
207 return (*d_func)(d_args, dmr);
213 throw InternalErr(__FILE__, __LINE__,
"Unknown rvalue type.");
virtual bool read()
Read data into a local buffer.
A class for software fault reporting.
BaseType * value(DMR &dmr)
string remove_quotes(const string &s)