56 #include "Structure.h" 60 #include "D4Attributes.h" 62 #include "XMLWriter.h" 63 #include "D4BaseTypeFactory.h" 65 #include "InternalErr.h" 69 #include "DapIndent.h" 88 DBG(cerr <<
"In BaseType::m_duplicate for " << bt.
name() << endl);
92 d_dataset = bt.d_dataset;
93 d_is_read = bt.d_is_read;
94 d_is_send = bt.d_is_send;
95 d_in_selection = bt.d_in_selection;
96 d_is_synthesized = bt.d_is_synthesized;
98 d_parent = bt.d_parent;
107 d_is_dap4 = bt.d_is_dap4;
109 DBG(cerr <<
"Exiting BaseType::m_duplicate for " << bt.
name() << endl);
126 BaseType::BaseType(
const string &n,
const Type &t,
bool is_dap4)
127 : d_name(n), d_type(t), d_dataset(
""), d_is_read(false), d_is_send(false),
128 d_parent(0), d_attributes(0), d_is_dap4(is_dap4),
129 d_in_selection(false), d_is_synthesized(false)
145 : d_name(n), d_type(t), d_dataset(d), d_is_read(false), d_is_send(false),
146 d_parent(0), d_attributes(0), d_is_dap4(is_dap4),
147 d_in_selection(false), d_is_synthesized(false)
153 DBG(cerr <<
"In BaseTpe::copy_ctor for " << copy_from.
name() << endl);
157 BaseType::~BaseType()
159 DBG2(cerr <<
"Entering ~BaseType (" <<
this <<
")" << endl);
164 DBG2(cerr <<
"Exiting ~BaseType" << endl);
168 BaseType::operator=(
const BaseType &rhs)
170 DBG(cerr <<
"Entering BaseType::operator=" << endl);
176 DBG(cerr <<
"Exiting BaseType::operator=" << endl);
187 oss <<
"BaseType (" <<
this <<
"):" << endl
188 <<
" _name: " <<
name() << endl
190 <<
" _dataset: " << d_dataset << endl
191 <<
" _read_p: " << d_is_read << endl
192 <<
" _send_p: " << d_is_send << endl
193 <<
" _synthesized_p: " << d_is_synthesized << endl
194 <<
" d_parent: " << d_parent << endl
195 <<
" d_attr: " << hex << &d_attr << dec << endl;
222 dest->set_is_dap4(
true);
258 std::vector<BaseType *> *
274 dest->set_is_dap4(
false);
276 vector<BaseType *> *result =
new vector<BaseType *>();
277 result->push_back(dest);
293 strm << DapIndent::LMarg <<
"BaseType::dump - (" 294 << (
void *)
this <<
")" << endl ;
295 DapIndent::Indent() ;
297 strm << DapIndent::LMarg <<
"name: " <<
name() << endl ;
298 strm << DapIndent::LMarg <<
"type: " <<
type_name() << endl ;
299 strm << DapIndent::LMarg <<
"dataset: " << d_dataset << endl ;
300 strm << DapIndent::LMarg <<
"read_p: " << d_is_read << endl ;
301 strm << DapIndent::LMarg <<
"send_p: " << d_is_send << endl ;
302 strm << DapIndent::LMarg <<
"synthesized_p: " << d_is_synthesized << endl ;
303 strm << DapIndent::LMarg <<
"parent: " << (
void *)d_parent << endl ;
304 strm << DapIndent::LMarg <<
"attributes: " << endl ;
305 DapIndent::Indent() ;
308 d_attributes->
dump(strm);
312 DapIndent::UnIndent() ;
314 DapIndent::UnIndent() ;
454 return d_is_synthesized;
465 d_is_synthesized = state;
535 if (!d_is_synthesized) {
570 DBG2(cerr <<
"Calling BaseType::set_send_p() for: " << this->
name()
614 d_attributes = attrs;
646 DBG(cerr << __func__ <<
"() - BEGIN name:'" <<
name() <<
"'" << endl);
649 DBG(cerr << __func__ <<
"() - at: "<< (
void *) at << endl);
653 at->set_is_global_attribute(
false);
654 DBG(cerr << __func__ <<
"() - Processing AttrTable: " << at->
get_name() << endl);
658 DBG(cerr << __func__ <<
"() - Attribute '" << at->
get_name(at_p) <<
"' is type: " << at->
get_type(at_p) << endl);
670 DBG(cerr << __func__ <<
"() - Adding container '" << at->
get_name(at_p) << endl);
674 DBG(cerr << __func__ <<
"() - Found child var: '"<< bt->
type_name()<<
" " << bt->
name() <<
" (address:" << (
void *) bt <<
")" << endl);
675 DBG(cerr << __func__ <<
"() - Skipping container '" << at->
get_name(at_p) << endl);
679 DBG(cerr << __func__ <<
"() - Adding Attribute '" << at->
get_name(at_p) << endl);
686 DBG(cerr << __func__ <<
"() - Unable to locate AttrTable '" <<
name() <<
"' SKIPPING" << endl);
705 return d_in_selection;
720 d_in_selection = state;
735 if (!dynamic_cast<Constructor *>(parent)
736 && !dynamic_cast<Vector *>(parent)
738 throw InternalErr(
"Call to set_parent with incorrect variable type.");
817 throw InternalErr(__FILE__, __LINE__,
"BaseType::add_var unimplemented");
823 throw InternalErr(__FILE__, __LINE__,
"BaseType::add_var_nocopy unimplemented");
904 throw InternalErr(
"Unimplemented BaseType::read() method called for the variable named: " +
name());
910 #if USE_LOCAL_TIMEOUT_SCHEME 913 DBG2(cerr <<
"BaseType::intern_data: " <<
name() << endl);
916 #if USE_LOCAL_TIMEOUT_SCHEME 939 throw InternalErr(__FILE__, __LINE__,
"The DAP2 serialize() method has not been implemented for " +
type_name());
945 throw InternalErr(__FILE__, __LINE__,
"The DAP2 deserialize() method has not been implemented for " +
type_name());
951 throw InternalErr(__FILE__, __LINE__,
"The DAP4 serialize() method has not been implemented for " +
type_name());
957 throw InternalErr(__FILE__, __LINE__,
"The DAP4 deserialize() method has not been implemented for " +
type_name());
1004 bool constraint_info,
bool constrained)
1007 print_decl(oss, space, print_semi, constraint_info, constrained);
1008 fwrite(oss.str().data(),
sizeof(char), oss.str().length(), out);
1055 bool constraint_info,
bool constrained)
1059 if (constrained && !
send_p())
1064 if (constraint_info) {
1066 out <<
": Send True" ;
1068 out <<
": Send False" ;
1094 fwrite(oss.str().data(),
sizeof(char), oss.str().length(), out);
1109 fwrite(xml.get_doc(),
sizeof(char), xml.get_doc_size(), out);
1124 out << xml.get_doc();
1136 if (constrained && !
send_p())
1139 if (xmlTextWriterStartElement(xml.get_writer(), (
const xmlChar*)
type_name().c_str()) < 0)
1142 if (!
name().empty())
1143 if (xmlTextWriterWriteAttribute(xml.get_writer(), (
const xmlChar*)
"name", (
const xmlChar*)
name().c_str()) < 0)
1144 throw InternalErr(__FILE__, __LINE__,
"Could not write attribute for name");
1152 if (xmlTextWriterEndElement(xml.get_writer()) < 0)
1211 bool sem = (d_type != dods_null_c &&
name().length());
1214 msg =
"Every variable must have both a name and a type\n";
1262 throw InternalErr(__FILE__, __LINE__,
"Unimplemented operator.");
1284 throw InternalErr(__FILE__, __LINE__,
"Unimplemented operator.");
1301 throw InternalErr(__FILE__, __LINE__,
"not implemented");
virtual bool read()
Read data into a local buffer.
virtual bool read_p()
Has this variable been read?
virtual string name() const
Returns the name of the class instance.
abstract base class used to unmarshall/deserialize dap data objects
virtual void print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
virtual bool d4_ops(BaseType *b, int op)
Evaluator a relop for DAP4.
virtual void dump(ostream &strm) const
dumps information about this object
virtual void print_dap4(XMLWriter &xml, bool constrained=false)
virtual void dump(ostream &strm) const
dumps information about this object
virtual Attr_iter attr_end()
virtual void print_xml(FILE *out, string space=" ", bool constrained=false)
Part
Names the parts of multi-section constructor data types.
bool is_constructor_type(Type t)
Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable...
Contains the attributes for a dataset.
virtual void set_name(const string &n)
Sets the name of the class instance.
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
virtual string get_type(const string &name)
Get the type name of an attribute within this attribute table.
virtual void print_xml_writer(XMLWriter &xml, bool constrained=false)
virtual string get_name() const
Get the name of this attribute table.
Read data from the stream made by D4StreamMarshaller.
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
bool is_vector_type(Type t)
Returns true if the instance is a vector (i.e., array) type variable.
void print_xml_writer(XMLWriter &xml)
virtual bool is_simple_type() const
Returns true if the instance is a numeric, string or URL type variable.
virtual void add_var_nocopy(BaseType *bt, Part part=nil)
virtual void add_var(BaseType *bt, Part part=nil)
Add a variable.
Type
Identifies the data type.
virtual string toString()
virtual void set_in_selection(bool state)
virtual bool is_in_selection()
Is this variable part of the current selection?
virtual void set_parent(BaseType *parent)
top level DAP object to house generic methods
A class for software fault reporting.
virtual std::string FQN() const
void transform_attrs_to_dap2(AttrTable *d2_attr_table)
Copy the attributes from this D4Attributes object to a DAP2 AttrTable.
virtual BaseType * var(const string &name="", bool exact_match=true, btp_stack *s=0)
Returns a pointer to a member of a constructor class.
virtual bool is_vector_type() const
Returns true if the instance is a vector (i.e., array) type variable.
virtual void compute_checksum(Crc32 &checksum)=0
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
virtual int element_count(bool leaves=false)
Count the members of constructor types.
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4's receiv...
virtual void set_send_p(bool state)
virtual bool is_constructor_type() const
Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable...
virtual AttrTable * append_container(const string &name)
Add a container to the attribute table.
virtual AttrTable * get_attr_table(const string &name)
Get an attribute container.
virtual Type type() const
Returns the type of the class instance.
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...
virtual void set_type(const Type &t)
Sets the type of the class instance.
virtual void set_read_p(bool state)
Sets the value of the read_p property.
virtual void transform_to_dap4(D4Group *root, Constructor *container)
DAP2 to DAP4 transform.
bool is_simple_type(Type t)
Returns true if the instance is a numeric, string or URL type variable.
virtual D4Attributes * attributes()
virtual void intern_data()
Read data into this variable.
virtual bool synthesized_p()
virtual Attr_iter attr_begin()
virtual BaseType * ptr_duplicate()=0
string www2id(const string &in, const string &escape, const string &except)
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
DAP4 to DAP2 transform.
void m_duplicate(const BaseType &bt)
Perform a deep copy.
Evaluate a constraint expression.
virtual AttrTable & get_attr_table()
virtual BaseType * get_parent() const
virtual unsigned int append_attr(const string &name, const string &type, const string &value)
Add an attribute to the table.
The basic data type for the DODS DAP types.
string D2type_name(Type t)
Returns the type of the class instance as a string. Supports all DAP2 types and not the DAP4-only typ...
libdap base object for common functionality of libdap objects
virtual AttrType get_attr_type(const string &name)
Get the type of an attribute.
abstract base class used to marshal/serialize dap data objects
virtual string type_name() const
Returns the type of the class instance as a string.
virtual void set_attr_table(const AttrTable &at)
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
virtual vector< string > * get_attr_vector(const string &name)
Get a vector-valued attribute.
virtual unsigned int get_size() const
Get the number of entries in this attribute table.
virtual void set_name(const string &n)
Set the name of this attribute table.
virtual void dump(ostream &strm) const
dumps information about this object
virtual void transfer_attributes(AttrTable *at)
void transform_to_dap4(AttrTable &at)
copy attributes from DAP2 to DAP4
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
virtual bool send_p()
Should this variable be sent?
string id2www(string in, const string &allowable)
virtual string dataset() const
Returns the name of the dataset used to create this instance.
virtual bool check_semantics(string &msg, bool all=false)
Compare an object's current state with the semantics of its type.
virtual void set_synthesized_p(bool state)