47#include "dods-datatypes.h"
57 for (std::vector<D4RValue *>::const_iterator i = src.d_rvalues.begin(), e = src.d_rvalues.end(); i != e; ++i) {
59 d_rvalues.push_back(
new D4RValue(*rv));
64 for (std::vector<D4RValue *>::iterator i = d_rvalues.begin(), e = d_rvalues.end(); i != e; ++i)
68void D4RValue::m_duplicate(
const D4RValue &src) {
69 d_value_kind = src.d_value_kind;
71 d_variable = src.d_variable;
74 d_args = (src.d_args != 0) ?
new D4RValueList(*src.d_args) : 0;
76 d_constant = (src.d_constant != 0) ? src.d_constant->
ptr_duplicate() : 0;
79template <
typename T,
class DAP_TYPE>
static BaseType *build_constant_array(vector<T> &values, DAP_TYPE &dt) {
80 Array *array =
new Array(
"", &dt);
81 array->append_dim(values.size());
86 array->set_value(values, values.size());
88 array->set_read_p(
true);
90 static unsigned long counter = 1;
97 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(
constant) {
116 Str *s =
new Str(
"constant");
122 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(
constant) {
124 d_constant = build_constant_array(byte_args, b);
128 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(
constant) {
130 d_constant = build_constant_array(byte_int8, b);
134 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(
constant) {
136 d_constant = build_constant_array(byte_uint16, b);
140 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(
constant) {
142 d_constant = build_constant_array(byte_int16, b);
146 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(
constant) {
148 d_constant = build_constant_array(byte_uint32, b);
152 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(
constant) {
154 d_constant = build_constant_array(byte_int32, b);
158 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(
constant) {
160 d_constant = build_constant_array(byte_uint64, b);
164 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(
constant) {
166 d_constant = build_constant_array(byte_int64, b);
170 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(
constant) {
172 d_constant = build_constant_array(byte_float32, b);
176 : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(
constant) {
178 d_constant = build_constant_array(byte_float64, b);
204 return new D4RValue(strtoull(cpps.c_str(), &ptr, 0));
206 return new D4RValue(strtoll(cpps.c_str(), &ptr, 0));
209 return new D4RValue(w32strtod(cpps.c_str(), &ptr));
211 return new D4RValue(strtod(cpps.c_str(), &ptr));
245 switch (d_value_kind) {
248 d_variable->set_read_p(
true);
252 return (*d_func)(d_args, dmr);
258 throw InternalErr(__FILE__, __LINE__,
"Unknown rvalue type.");
273 switch (d_value_kind) {
276 d_variable->set_read_p(
true);
281 "An expression that included a function call was used in a place where that won't work.");
287 throw InternalErr(__FILE__, __LINE__,
"Unknown rvalue type.");
#define malformed_expr
(400)
The basic data type for the DODS DAP types.
virtual BaseType * ptr_duplicate()=0
virtual BaseType * value()
Get the value for a RValue object.
friend class D4RValueList
A class for error processing.
Holds a 32-bit floating point value.
Holds a 64-bit (double precision) floating point value.
virtual bool set_value(dods_float64 val)
Holds a 16-bit signed integer value.
Holds a 32-bit signed integer.
Holds a64-bit signed integer.
virtual bool set_value(dods_int64 i)
Holds an 8-bit signed integer value.
A class for software fault reporting.
Holds character string data.
virtual bool set_value(const string &value)
Holds an unsigned 16-bit integer.
Holds a 32-bit unsigned integer.
Holds a 64-bit unsigned integer.
virtual bool set_value(dods_uint64 val)
int check_float64(const char *val)
int check_uint64(const char *val)
int check_int64(const char *val)
top level DAP object to house generic methods
string long_to_string(long val, int base)
string remove_quotes(const string &s)
D4RValue * D4RValueFactory(std::string cpps)
Build an appropriate RValue.