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 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 &copy_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

Generated on Wed Apr 15 19:20:22 2009 for libdap++ by  doxygen 1.4.7