00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef _basetype_h
00043 #define _basetype_h 1
00044
00045
00046 #include <vector>
00047 #include <stack>
00048 #include <iostream>
00049 #include <string>
00050
00051 #ifndef _attrtable_h
00052 #include "AttrTable.h"
00053 #endif
00054
00055 #ifndef _internalerr_h
00056 #include "InternalErr.h"
00057 #endif
00058
00059 #ifndef __DODS_DATATYPES_
00060 #include "dods-datatypes.h"
00061 #endif
00062
00063 #ifndef A_DapObj_h
00064 #include "DapObj.h"
00065 #endif
00066
00067 #include "Marshaller.h"
00068 #include "UnMarshaller.h"
00069
00070 using namespace std;
00071
00072 namespace libdap
00073 {
00074
00075 class DDS;
00076 class ConstraintEvaluator;
00077
00096 enum Part {
00097 nil,
00098 array,
00099 maps
00100 };
00101
00129 enum Type {
00130 dods_null_c,
00131 dods_byte_c,
00132 dods_int16_c,
00133 dods_uint16_c,
00134 dods_int32_c,
00135 dods_uint32_c,
00136 dods_float32_c,
00137 dods_float64_c,
00138 dods_str_c,
00139 dods_url_c,
00140 dods_array_c,
00141 dods_structure_c,
00142 dods_sequence_c,
00143 dods_grid_c
00144 };
00145
00188 class BaseType : public DapObj
00189 {
00190 private:
00191 string _name;
00192 Type _type;
00193 string _dataset;
00194
00195 bool _read_p;
00196 bool _send_p;
00197 bool d_in_selection;
00198 bool _synthesized_p;
00199
00200
00201
00202
00203 BaseType *d_parent;
00204
00205
00206 AttrTable d_attr;
00207
00208 protected:
00209 void _duplicate(const BaseType &bt);
00210
00211 public:
00212 typedef stack<BaseType *> btp_stack;
00213
00214 BaseType(const string &n, const Type &t);
00215 BaseType(const string &n, const string &d, const Type &t);
00216
00217 BaseType(const BaseType ©_from);
00218 virtual ~BaseType();
00219
00220 virtual string toString();
00221
00222 virtual void dump(ostream &strm) const ;
00223
00224 BaseType &operator=(const BaseType &rhs);
00225
00232 virtual BaseType *ptr_duplicate() = 0;
00233
00234 string name() const;
00235 virtual void set_name(const string &n);
00236
00237 Type type() const;
00238 void set_type(const Type &t);
00239 string type_name() const;
00240
00241 string dataset() const ;
00242
00243 virtual bool is_simple_type();
00244 virtual bool is_vector_type();
00245 virtual bool is_constructor_type();
00246
00247 virtual bool synthesized_p();
00248 virtual void set_synthesized_p(bool state);
00249
00250 virtual int element_count(bool leaves = false);
00251
00252 virtual bool read_p();
00253 virtual void set_read_p(bool state);
00254
00255 virtual bool send_p();
00256 virtual void set_send_p(bool state);
00257
00258 virtual AttrTable &get_attr_table();
00259 virtual void set_attr_table(const AttrTable &at);
00260
00261 virtual bool is_in_selection();
00262 virtual void set_in_selection(bool state);
00263
00264 virtual void set_parent(BaseType *parent);
00265 virtual BaseType *get_parent();
00266
00267
00268
00269
00270
00301 virtual BaseType *var(const string &name = "", bool exact_match = true,
00302 btp_stack *s = 0);
00303 virtual BaseType *var(const string &name, btp_stack &s);
00304
00305 virtual void add_var(BaseType *bt, Part part = nil);
00306
00307 virtual bool read();
00308
00309 virtual bool check_semantics(string &msg, bool all = false);
00310
00311 virtual bool ops(BaseType *b, int op);
00312
00313 virtual void print_decl(FILE *out, string space = " ",
00314 bool print_semi = true,
00315 bool constraint_info = false,
00316 bool constrained = false);
00317
00318 virtual void print_decl(ostream &out, string space = " ",
00319 bool print_semi = true,
00320 bool constraint_info = false,
00321 bool constrained = false);
00322
00323
00324 virtual void print_xml(FILE *out, string space = " ",
00325 bool constrained = false);
00326
00327 virtual void print_xml(ostream &out, string space = " ",
00328 bool constrained = false);
00329
00332
00344 virtual unsigned int width() = 0;
00345
00366 virtual unsigned int buf2val(void **val) = 0;
00367
00397 virtual unsigned int val2buf(void *val, bool reuse = false) = 0;
00398
00411 virtual void intern_data(ConstraintEvaluator &eval, DDS &dds);
00412
00440 virtual bool serialize(ConstraintEvaluator &eval, DDS &dds,
00441 Marshaller &m, bool ce_eval = true) = 0;
00442
00467 virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false) = 0;
00468
00469
00485 virtual void print_val(FILE *out, string space = "",
00486 bool print_decl_p = true) = 0;
00487
00488
00503 virtual void print_val(ostream &out, string space = "",
00504 bool print_decl_p = true) = 0;
00506 };
00507
00508 }
00509
00510 #endif // _basetype_h