libdap++ Updated for version 3.8.2

BaseType.h

Go to the documentation of this file.
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 &copy_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