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 using namespace std; 00071 00072 namespace libdap 00073 { 00074 00075 class DDS; 00076 class ConstraintEvaluator; 00077 00096 enum Part { 00097 nil, // nil is for types that don't have parts... 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, // Added `dods_' to fix clash with IRIX 5.3. 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; // name of the instance 00192 Type _type; // instance's type 00193 string _dataset; // name of the dataset used to create this BaseType 00194 00195 bool _read_p; // true if the value has been read 00196 bool _send_p; // Is the variable in the projection? 00197 bool d_in_selection; // Is the variable in the selection? 00198 bool _synthesized_p; // true if the variable is synthesized 00199 00200 // d_parent points to the Constructor or Vector which holds a particular 00201 // variable. It is null for simple variables. The Vector and Constructor 00202 // classes must maintain this variable. 00203 BaseType *d_parent; 00204 00205 // Attributes for this variable. Added 05/20/03 jhrg 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 // I put this comment here because the version in BaseType.cc does not 00268 // include the exact_match or s variables since they are not used. Doxygen 00269 // was gaging on the comment. 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 //#if FILE_METHODS 00313 virtual void print_decl(FILE *out, string space = " ", 00314 bool print_semi = true, 00315 bool constraint_info = false, 00316 bool constrained = false); 00317 //#endif 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 //#if FILE_METHODS 00324 virtual void print_xml(FILE *out, string space = " ", 00325 bool constrained = false); 00326 //#endif 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 //#if FILE_METHODS 00485 virtual void print_val(FILE *out, string space = "", 00486 bool print_decl_p = true) = 0; 00487 //#endif 00488 00503 virtual void print_val(ostream &out, string space = "", 00504 bool print_decl_p = true) = 0; 00506 }; 00507 00508 } // namespace libdap 00509 00510 #endif // _basetype_h