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 #define FILE_METHODS 1
00071
00072 using namespace std;
00073
00074 namespace libdap
00075 {
00076
00077 class DDS;
00078 class ConstraintEvaluator;
00079
00098 enum Part {
00099 nil,
00100 array,
00101 maps
00102 };
00103
00131 enum Type {
00132 dods_null_c,
00133 dods_byte_c,
00134 dods_int16_c,
00135 dods_uint16_c,
00136 dods_int32_c,
00137 dods_uint32_c,
00138 dods_float32_c,
00139 dods_float64_c,
00140 dods_str_c,
00141 dods_url_c,
00142 dods_array_c,
00143 dods_structure_c,
00144 dods_sequence_c,
00145 dods_grid_c
00146 };
00147
00190 class BaseType : public DapObj
00191 {
00192 private:
00193 string _name;
00194 Type _type;
00195 string _dataset;
00196
00197 bool _read_p;
00198 bool _send_p;
00199 bool d_in_selection;
00200 bool _synthesized_p;
00201
00202
00203
00204
00205 BaseType *d_parent;
00206
00207
00208 AttrTable d_attr;
00209
00210 protected:
00211 void _duplicate(const BaseType &bt);
00212
00213 public:
00214 typedef stack<BaseType *> btp_stack;
00215
00216 BaseType(const string &n, const Type &t);
00217 BaseType(const string &n, const string &d, const Type &t);
00218
00219 BaseType(const BaseType ©_from);
00220 virtual ~BaseType();
00221
00222 virtual string toString();
00223
00224 virtual void dump(ostream &strm) const ;
00225
00226 BaseType &operator=(const BaseType &rhs);
00227
00234 virtual BaseType *ptr_duplicate() = 0;
00235
00236 string name() const;
00237 virtual void set_name(const string &n);
00238
00239 Type type() const;
00240 void set_type(const Type &t);
00241 string type_name() const;
00242
00243 string dataset() const ;
00244
00245 virtual bool is_simple_type();
00246 virtual bool is_vector_type();
00247 virtual bool is_constructor_type();
00248
00249 virtual bool synthesized_p();
00250 virtual void set_synthesized_p(bool state);
00251
00252 virtual int element_count(bool leaves = false);
00253
00254 virtual bool read_p();
00255 virtual void set_read_p(bool state);
00256
00257 virtual bool send_p();
00258 virtual void set_send_p(bool state);
00259
00260 virtual AttrTable &get_attr_table();
00261 virtual void set_attr_table(const AttrTable &at);
00262
00263 virtual bool is_in_selection();
00264 virtual void set_in_selection(bool state);
00265
00266 virtual void set_parent(BaseType *parent);
00267 virtual BaseType *get_parent();
00268
00269 virtual void transfer_attributes(AttrTable *at);
00270
00271
00272
00273
00274
00305 virtual BaseType *var(const string &name = "", bool exact_match = true,
00306 btp_stack *s = 0);
00307 virtual BaseType *var(const string &name, btp_stack &s);
00308
00309 virtual void add_var(BaseType *bt, Part part = nil);
00310
00311 virtual bool read();
00312
00313 virtual bool check_semantics(string &msg, bool all = false);
00314
00315 virtual bool ops(BaseType *b, int op);
00316 #if FILE_METHODS
00317 virtual void print_decl(FILE *out, string space = " ",
00318 bool print_semi = true,
00319 bool constraint_info = false,
00320 bool constrained = false);
00321
00322 virtual void print_xml(FILE *out, string space = " ",
00323 bool constrained = false);
00324 #endif
00325 virtual void print_decl(ostream &out, string space = " ",
00326 bool print_semi = true,
00327 bool constraint_info = false,
00328 bool constrained = false);
00329
00330 virtual void print_xml(ostream &out, string space = " ",
00331 bool constrained = false);
00332
00335
00347 virtual unsigned int width() = 0;
00348
00369 virtual unsigned int buf2val(void **val) = 0;
00370
00400 virtual unsigned int val2buf(void *val, bool reuse = false) = 0;
00401
00414 virtual void intern_data(ConstraintEvaluator &eval, DDS &dds);
00415
00443 virtual bool serialize(ConstraintEvaluator &eval, DDS &dds,
00444 Marshaller &m, bool ce_eval = true) = 0;
00445
00470 virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false) = 0;
00471
00472 #if FILE_METHODS
00473
00488 virtual void print_val(FILE *out, string space = "",
00489 bool print_decl_p = true) = 0;
00490 #endif
00491
00506 virtual void print_val(ostream &out, string space = "",
00507 bool print_decl_p = true) = 0;
00509 };
00510
00511 }
00512
00513 #endif // _basetype_h