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 // 00010 // This library is free software; you can redistribute it and/or 00011 // modify it under the terms of the GNU Lesser General Public 00012 // License as published by the Free Software Foundation; either 00013 // version 2.1 of the License, or (at your option) any later version. 00014 // 00015 // This library is distributed in the hope that it will be useful, 00016 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00018 // Lesser General Public License for more details. 00019 // 00020 // You should have received a copy of the GNU Lesser General Public 00021 // License along with this library; if not, write to the Free Software 00022 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00023 // 00024 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112. 00025 00026 // (c) COPYRIGHT URI/MIT 1994-1999 00027 // Please read the full copyright statement in the file COPYRIGHT_URI. 00028 // 00029 // Authors: 00030 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu> 00031 00032 // Interface to the Grid ctor class. Grids contain a single array (the `main' 00033 // array) of dimension N and N single dimension arrays (map arrays). For any 00034 // dimension n of the main array, the size of the nth map array must match 00035 // the size of the main array's nth dimension. Grids are used to map 00036 // non-integer scales to multidimensional point data. 00037 // 00038 // jhrg 9/15/94 00039 00040 #ifndef _grid_h 00041 #define _grid_h 1 00042 00043 #include <vector> 00044 00045 //#include "Pix.h" 00046 00047 #ifndef _basetype_h 00048 #include "BaseType.h" 00049 #endif 00050 00051 #ifndef _array_h 00052 #include "Array.h" 00053 #endif 00054 00055 #ifndef _constructor_h 00056 #include "Constructor.h" 00057 #endif 00058 00059 #ifndef constraint_evaluator_h 00060 #include "ConstraintEvaluator.h" 00061 #endif 00062 00063 #define FILE_METHODS 1 00064 00065 namespace libdap 00066 { 00067 00123 class Grid: public Constructor 00124 { 00125 private: 00126 BaseType *_array_var; 00127 std::vector<BaseType *> _map_vars; 00128 00129 protected: // subclasses need access [mjohnson 11 nov 2009] 00130 void _duplicate(const Grid &s); 00131 00132 public: 00133 00134 Grid(const string &n); 00135 Grid(const string &n, const string &d); 00136 Grid(const Grid &rhs); 00137 virtual ~Grid(); 00138 00139 typedef std::vector<BaseType *>::const_iterator Map_citer ; 00140 typedef std::vector<BaseType *>::iterator Map_iter ; 00141 typedef std::vector<BaseType *>::reverse_iterator Map_riter ; 00142 00143 00144 Grid &operator=(const Grid &rhs); 00145 virtual BaseType *ptr_duplicate(); 00146 00147 virtual int element_count(bool leaves = false); 00148 00149 virtual void set_send_p(bool state); 00150 virtual void set_read_p(bool state); 00151 virtual void set_in_selection(bool state); 00152 00153 virtual BaseType *var(const string &n, bool exact = true, 00154 btp_stack *s = 0); 00155 00156 virtual BaseType *var(const string &n, btp_stack &s); 00157 00158 virtual void add_var(BaseType *bt, Part part); 00159 00160 virtual void set_array(Array* p_new_arr); 00161 virtual Array* add_map(Array* p_new_map, bool add_copy); 00162 virtual Array* prepend_map(Array* p_new_map, bool add_copy); 00163 00164 BaseType *array_var(); 00165 Array *get_array(); 00166 00167 00168 virtual unsigned int width(); 00169 00170 virtual int components(bool constrained = false); 00171 00172 virtual bool projection_yields_grid(); 00173 00174 virtual void clear_constraint(); 00175 00176 virtual void intern_data(ConstraintEvaluator &eval, DDS &dds); 00177 virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, 00178 Marshaller &m, bool ce_eval = true); 00179 virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false); 00180 00181 virtual unsigned int val2buf(void *buf, bool reuse = false); 00182 00183 virtual unsigned int buf2val(void **val); 00184 00185 virtual void print_decl(ostream &out, string space = " ", 00186 bool print_semi = true, 00187 bool constraint_info = false, 00188 bool constrained = false); 00189 00190 virtual void print_xml(ostream &out, string space = " ", 00191 bool constrained = false); 00192 00193 virtual void print_val(ostream &out, string space = "", 00194 bool print_decl_p = true); 00195 00196 #if FILE_METHODS 00197 virtual void print_decl(FILE *out, string space = " ", 00198 bool print_semi = true, 00199 bool constraint_info = false, 00200 bool constrained = false); 00201 virtual void print_xml(FILE *out, string space = " ", 00202 bool constrained = false); 00203 virtual void print_val(FILE *out, string space = "", 00204 bool print_decl_p = true); 00205 #endif 00206 00207 virtual void transfer_attributes(AttrTable *at_container); 00208 00209 virtual bool check_semantics(string &msg, bool all = false); 00210 00211 Map_iter map_begin() ; 00212 Map_iter map_end() ; 00213 Map_riter map_rbegin() ; 00214 Map_riter map_rend() ; 00215 Map_iter get_map_iter(int i); 00216 00217 virtual void dump(ostream &strm) const ; 00218 }; 00219 00220 } // namespace libdap 00221 00222 #endif // _grid_h 00223