libdap++
Updated for version 3.8.2
|
00001 // -*- mode: c++; c-basic-offset:4 -*- 00002 00003 // This file is part of libdap, A C++ implementation of the OPeNDAP Data 00004 // Access Protocol. 00005 00006 // Copyright (c) 2002,2003 OPeNDAP, Inc. 00007 // Author: James Gallagher <jgallagher@opendap.org> 00008 // 00009 // This library is free software; you can redistribute it and/or 00010 // modify it under the terms of the GNU Lesser General Public 00011 // License as published by the Free Software Foundation; either 00012 // version 2.1 of the License, or (at your option) any later version. 00013 // 00014 // This library is distributed in the hope that it will be useful, 00015 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00017 // Lesser General Public License for more details. 00018 // 00019 // You should have received a copy of the GNU Lesser General Public 00020 // License along with this library; if not, write to the Free Software 00021 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00022 // 00023 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112. 00024 00025 // (c) COPYRIGHT URI/MIT 1994-1999 00026 // Please read the full copyright statement in the file COPYRIGHT_URI. 00027 // 00028 // Authors: 00029 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu> 00030 00031 // Provide access to the DDS. This class is used to parse DDS text files, to 00032 // produce a printed representation of the in-memory variable table, and to 00033 // update the table on a per-variable basis. 00034 // 00035 // jhrg 9/8/94 00036 00037 #ifndef _dds_h 00038 #define _dds_h 1 00039 00040 #include <cstdio> 00041 #include <iostream> 00042 #include <string> 00043 #include <vector> 00044 00045 #ifndef _basetype_h 00046 #include "BaseType.h" 00047 #endif 00048 00049 #ifndef _constructor_h 00050 #include "Constructor.h" 00051 #endif 00052 00053 #ifndef base_type_factory_h 00054 #include "BaseTypeFactory.h" 00055 #endif 00056 00057 #ifndef _das_h 00058 #include "DAS.h" 00059 #endif 00060 00061 #ifndef A_DapObj_h 00062 #include "DapObj.h" 00063 #endif 00064 00065 #ifndef KEYWORDS_H_ 00066 #include "Keywords2.h" 00067 #endif 00068 00069 using std::cout; 00070 00071 #define FILE_METHODS 1 00072 00073 namespace libdap 00074 { 00075 00178 class DDS : public DapObj 00179 { 00180 private: 00181 BaseTypeFactory *d_factory; 00182 00183 string name; // The dataset name 00184 string d_filename; // File name (or other OS identifier) for 00185 string d_container_name; // name of container structure 00186 Structure *d_container; // current container for container name 00187 // dataset or part of dataset. 00188 00189 int d_dap_major; // The protocol major version number 00190 int d_dap_minor; // ... and minor version number 00191 string d_dap_version; // String version of the protocol 00192 string d_request_xml_base; 00193 00194 AttrTable d_attr; // Global attributes. 00195 00196 vector<BaseType *> vars; // Variables at the top level 00197 00198 BaseType *find_hdf4_dimension_attribute_home(AttrTable::entry *source); 00199 00200 int d_timeout; // alarm time in seconds. If greater than 00201 // zero, raise the alarm signal if more than 00202 // d_timeout seconds are spent reading data. 00203 Keywords d_keywords; // Holds keywords parsed from the CE 00204 00205 friend class DDSTest; 00206 00207 protected: 00208 void duplicate(const DDS &dds); 00209 BaseType *leaf_match(const string &name, BaseType::btp_stack *s = 0); 00210 BaseType *exact_match(const string &name, BaseType::btp_stack *s = 0); 00211 00212 public: 00213 typedef std::vector<BaseType *>::const_iterator Vars_citer ; 00214 typedef std::vector<BaseType *>::iterator Vars_iter ; 00215 typedef std::vector<BaseType *>::reverse_iterator Vars_riter ; 00216 00217 DDS(BaseTypeFactory *factory, const string &n = ""); 00218 DDS(const DDS &dds); 00219 00220 virtual ~DDS(); 00221 00222 DDS & operator=(const DDS &rhs); 00223 00224 virtual void transfer_attributes(DAS *das); 00225 00226 string get_dataset_name() const; 00227 void set_dataset_name(const string &n); 00228 00233 BaseTypeFactory *get_factory() const 00234 { 00235 return d_factory; 00236 } 00237 00244 BaseTypeFactory *set_factory(BaseTypeFactory *factory) 00245 { 00246 BaseTypeFactory *t = d_factory; 00247 d_factory = factory; 00248 return t; 00249 } 00250 00251 virtual AttrTable &get_attr_table(); 00252 00253 string filename(); 00254 void filename(const string &fn); 00255 00257 int get_dap_major() const { return d_dap_major; } 00259 int get_dap_minor() const { return d_dap_minor; } 00260 00262 void set_dap_major(int p); 00264 void set_dap_minor(int p); 00265 00266 void set_dap_version(const string &version_string); 00267 void set_dap_version(double d); 00268 00269 string get_dap_version() const { return d_dap_version; } 00270 00271 Keywords &get_keywords() { return d_keywords; } 00272 00274 string get_request_xml_base() const { return d_request_xml_base; } 00275 00277 void set_request_xml_base(const string &xb) { d_request_xml_base = xb; } 00278 00279 string container_name() ; 00280 void container_name( const string &cn ) ; 00281 Structure *container() ; 00282 00283 void add_var(BaseType *bt); 00284 00286 void del_var(const string &n); 00287 00288 BaseType *var(const string &n, BaseType::btp_stack &s); 00289 BaseType *var(const string &n, BaseType::btp_stack *s = 0); 00290 int num_var(); 00291 00293 Vars_iter var_begin(); 00295 Vars_riter var_rbegin(); 00297 Vars_iter var_end(); 00299 Vars_riter var_rend(); 00301 Vars_iter get_vars_iter(int i); 00303 BaseType *get_var_index(int i); 00305 void del_var(Vars_iter i); 00307 void del_var(Vars_iter i1, Vars_iter i2); 00308 00309 void timeout_on(); 00310 void timeout_off(); 00311 void set_timeout(int t); 00312 int get_timeout(); 00313 00314 void parse(string fname); 00315 void parse(int fd); 00316 void parse(FILE *in = stdin); 00317 #if FILE_METHODS 00318 void print(FILE *out); 00319 void print_constrained(FILE *out); 00320 void print_xml(FILE *out, bool constrained, const string &blob = ""); 00321 #endif 00322 void print(ostream &out); 00323 void print_constrained(ostream &out); 00324 void print_xml(ostream &out, bool constrained, const string &blob = ""); 00325 00326 void mark_all(bool state); 00327 bool mark(const string &name, bool state); 00328 bool check_semantics(bool all = false); 00329 00330 void tag_nested_sequences(); 00331 00332 virtual void dump(ostream &strm) const ; 00333 }; 00334 00335 } // namespace libdap 00336 00337 #endif // _dds_h