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 class BaseType;   // Forward declarations
00073 class DDS;
00074 class ConstraintEvaluator;
00075 
00076 typedef stack<BaseType *> btp_stack;
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 
00194     bool _read_p;  // true if the value has been read
00195     bool _send_p;  // Is the variable in the projection?
00196     bool d_in_selection; // Is the variable in the selection?
00197     bool _synthesized_p; // true if the variable is synthesized
00198 
00199     // d_parent points to the Constructor or Vector which holds a particular
00200     // variable. It is null for simple variables. The Vector and Constructor
00201     // classes must maintain this variable.
00202     BaseType *d_parent;
00203 
00204     // Attributes for this variable. Added 05/20/03 jhrg
00205     AttrTable d_attr;
00206 
00207 protected:
00208     void _duplicate(const BaseType &bt);
00209 
00210 public:
00211     BaseType(const string &n = "", const Type &t = dods_null_c);
00212 
00213     BaseType(const BaseType &copy_from);
00214     virtual ~BaseType();
00215 
00216     virtual string toString();
00217 
00218     virtual void dump(ostream &strm) const ;
00219 
00220     BaseType &operator=(const BaseType &rhs);
00221 
00228     virtual BaseType *ptr_duplicate() = 0;
00229 
00230     string name() const;
00231     virtual void set_name(const string &n);
00232 
00233     Type type() const;
00234     void set_type(const Type &t);
00235     string type_name() const;
00236 
00237     virtual bool is_simple_type();
00238     virtual bool is_vector_type();
00239     virtual bool is_constructor_type();
00240 
00241     virtual bool synthesized_p();
00242     virtual void set_synthesized_p(bool state);
00243 
00244     virtual int element_count(bool leaves = false);
00245 
00246     virtual bool read_p();
00247     virtual void set_read_p(bool state);
00248 
00249     virtual bool send_p();
00250     virtual void set_send_p(bool state);
00251 
00252     virtual AttrTable &get_attr_table();
00253     virtual void set_attr_table(const AttrTable &at);
00254 
00255     virtual bool is_in_selection();
00256     virtual void set_in_selection(bool state);
00257 
00258     virtual void set_parent(BaseType *parent);
00259     virtual BaseType *get_parent();
00260 
00261     // I put this comment here because the version in BaseType.cc does not
00262     // include the exact_match or s variables since they are not used. Doxygen
00263     // was gaging on the comment.
00264 
00295     virtual BaseType *var(const string &name = "", bool exact_match = true,
00296                           btp_stack *s = 0);
00297     virtual BaseType *var(const string &name, btp_stack &s);
00298 
00299     virtual void add_var(BaseType *bt, Part part = nil);
00300 
00301     virtual bool read(const string &dataset);
00302 
00303     virtual bool check_semantics(string &msg, bool all = false);
00304 
00305     virtual bool ops(BaseType *b, int op, const string &dataset);
00306 
00307     virtual void print_decl(FILE *out, string space = "    ",
00308                             bool print_semi = true,
00309                             bool constraint_info = false,
00310                             bool constrained = false);
00311 
00312     virtual void print_decl(ostream &out, string space = "    ",
00313                             bool print_semi = true,
00314                             bool constraint_info = false,
00315                             bool constrained = false);
00316 
00317     virtual void print_xml(FILE *out, string space = "    ",
00318                            bool constrained = false);
00319 
00320     virtual void print_xml(ostream &out, string space = "    ",
00321                            bool constrained = false);
00322 
00325 
00337     virtual unsigned int width() = 0;
00338 
00359     virtual unsigned int buf2val(void **val) = 0;
00360 
00390     virtual unsigned int val2buf(void *val, bool reuse = false) = 0;
00391 
00405     virtual void intern_data(const string &dataset, ConstraintEvaluator &eval,
00406                              DDS &dds);
00407 
00436     virtual bool serialize(const string &dataset, ConstraintEvaluator &eval,
00437                            DDS &dds, Marshaller &m, bool ce_eval = true) = 0;
00438 
00463     virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false) = 0;
00464 
00479     virtual void print_val(FILE *out, string space = "",
00480                            bool print_decl_p = true) = 0;
00481 
00496     virtual void print_val(ostream &out, string space = "",
00497                            bool print_decl_p = true) = 0;
00499 };
00500 
00501 #endif // _basetype_h

Generated on Wed Jan 2 04:13:15 2008 for libdap++ by  doxygen 1.5.4