libdap++ Updated for version 3.8.2
|
00001 00002 // -*- mode: c++; c-basic-offset:4 -*- 00003 00004 // This file is part of libdap, A C++ implementation of the OPeNDAP Data 00005 // Access Protocol. 00006 00007 // Copyright (c) 2002,2003 OPeNDAP, Inc. 00008 // Author: James Gallagher <jgallagher@opendap.org> 00009 // Dan Holloway <dan@hollywood.gso.uri.edu> 00010 // Reza Nekovei <reza@intcomm.net> 00011 // 00012 // This library is free software; you can redistribute it and/or 00013 // modify it under the terms of the GNU Lesser General Public 00014 // License as published by the Free Software Foundation; either 00015 // version 2.1 of the License, or (at your option) any later version. 00016 // 00017 // This library is distributed in the hope that it will be useful, 00018 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00019 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00020 // Lesser General Public License for more details. 00021 // 00022 // You should have received a copy of the GNU Lesser General Public 00023 // License along with this library; if not, write to the Free Software 00024 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00025 // 00026 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112. 00027 00028 // (c) COPYRIGHT URI/MIT 1994-1999 00029 // Please read the full copyright statement in the file COPYRIGHT_URI. 00030 // 00031 // Authors: 00032 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu> 00033 // dan Dan Holloway <dan@hollywood.gso.uri.edu> 00034 // reza Reza Nekovei <reza@intcomm.net> 00035 00036 // Abstract base class for the variables in a dataset. This is used to store 00037 // the type-invariant information that describes a variable as given in the 00038 // DODS API. 00039 // 00040 // jhrg 9/6/94 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, // nil is for types that don't have parts... 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, // Added `dods_' to fix clash with IRIX 5.3. 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; // name of the instance 00194 Type _type; // instance's type 00195 string _dataset; // name of the dataset used to create this BaseType 00196 00197 bool _read_p; // true if the value has been read 00198 bool _send_p; // Is the variable in the projection? 00199 bool d_in_selection; // Is the variable in the selection? 00200 bool _synthesized_p; // true if the variable is synthesized 00201 00202 // d_parent points to the Constructor or Vector which holds a particular 00203 // variable. It is null for simple variables. The Vector and Constructor 00204 // classes must maintain this variable. 00205 BaseType *d_parent; 00206 00207 // Attributes for this variable. Added 05/20/03 jhrg 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 // I put this comment here because the version in BaseType.cc does not 00272 // include the exact_match or s variables since they are not used. Doxygen 00273 // was gaging on the comment. 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 } // namespace libdap 00512 00513 #endif // _basetype_h