libdap++  Updated for version 3.11.7
Array.h
Go to the documentation of this file.
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Class for array variables. The dimensions of the array are stored in the
33 // list SHAPE.
34 //
35 // jhrg 9/6/94
36 
37 #ifndef _array_h
38 #define _array_h 1
39 
40 #include <string>
41 #include <vector>
42 
43 #ifndef _dods_limits_h
44 #include "dods-limits.h"
45 #endif
46 
47 #ifndef _vector_h
48 #include "Vector.h"
49 #endif
50 
51 #ifndef XMLWRITER_H_
52 #include "XMLWriter.h"
53 #endif
54 
55 #define FILE_METHODS 1
56 
57 namespace libdap
58 {
59 
61 
105 class Array: public Vector
106 {
107 public:
118  struct dimension
119  {
120  int size;
121  string name;
122  int start;
123  int stop;
124  int stride;
125  int c_size;
126  };
127 
128 private:
129  std::vector<dimension> _shape; // list of dimensions (i.e., the shape)
130 
131  friend class ArrayTest;
132 
133 protected:
134  void _duplicate(const Array &a);
135 
136 #if FILE_METHODS
137  unsigned int print_array(FILE *out, unsigned int index,
138  unsigned int dims, unsigned int shape[]);
139 #endif
140  unsigned int print_array(ostream &out, unsigned int index,
141  unsigned int dims, unsigned int shape[]);
142 
143 public:
149  typedef std::vector<dimension>::const_iterator Dim_citer ;
156  typedef std::vector<dimension>::iterator Dim_iter ;
157 
158  Array(const string &n, BaseType *v);
159  Array(const string &n, const string &d, BaseType *v);
160  Array(const Array &rhs);
161  virtual ~Array();
162 
163  Array &operator=(const Array &rhs);
164  virtual BaseType *ptr_duplicate();
165 
166  void add_var(BaseType *v, Part p = nil);
167  void add_var_nocopy(BaseType *v, Part p = nil);
168 
169  void append_dim(int size, string name = "");
170  void prepend_dim(int size, const string& name = "");
171 
172  virtual void add_constraint(Dim_iter i, int start, int stride, int stop);
173  virtual void reset_constraint();
174 
175  virtual void clear_constraint();
176 
177  virtual void update_length(int size);
178  virtual unsigned int width(bool constrained = true);
179 
180  Dim_iter dim_begin() ;
181  Dim_iter dim_end() ;
182 
183  virtual int dimension_size(Dim_iter i, bool constrained = false);
184  virtual int dimension_start(Dim_iter i, bool constrained = false);
185  virtual int dimension_stop(Dim_iter i, bool constrained = false);
186  virtual int dimension_stride(Dim_iter i, bool constrained = false);
187  virtual string dimension_name(Dim_iter i);
188 
189  virtual unsigned int dimensions(bool constrained = false);
190 
191  virtual void print_decl(ostream &out, string space = " ",
192  bool print_semi = true,
193  bool constraint_info = false,
194  bool constrained = false);
195 
196  virtual void print_xml(ostream &out, string space = " ",
197  bool constrained = false);
198 
199  virtual void print_xml_writer(XMLWriter &xml, bool constrained = false);
200  virtual void print_xml_writer_core(XMLWriter &out, bool constrained, string tag);
201  virtual void print_as_map_xml_writer(XMLWriter &xml, bool constrained);
202 
203 #if FILE_METHODS
204  virtual void print_xml_core(FILE *out, string space, bool constrained, string tag);
205 #endif
206  virtual void print_xml_core(ostream &out, string space, bool constrained, string tag);
207 
208  // not used (?)
209  virtual void print_as_map_xml(ostream &out, string space = " ",
210  bool constrained = false);
211 
212  virtual void print_val(ostream &out, string space = "",
213  bool print_decl_p = true);
214 
215 #if FILE_METHODS
216  virtual void print_xml(FILE *out, string space = " ",
217  bool constrained = false);
218  virtual void print_as_map_xml(FILE *out, string space = " ",
219  bool constrained = false);
220  virtual void print_val(FILE *out, string space = "",
221  bool print_decl_p = true);
222  virtual void print_decl(FILE *out, string space = " ",
223  bool print_semi = true,
224  bool constraint_info = false,
225  bool constrained = false);
226 #endif
227 
228  virtual bool check_semantics(string &msg, bool all = false);
229 
230  virtual void dump(ostream &strm) const ;
231 };
232 
233 } // namespace libdap
234 
235 #endif // _array_h
virtual void print_xml_writer(XMLWriter &xml, bool constrained=false)
Definition: Array.cc:775
virtual void reset_constraint()
Reset constraint to select entire array.
Definition: Array.cc:277
virtual void add_constraint(Dim_iter i, int start, int stride, int stop)
Adds a constraint to an Array dimension.
Definition: Array.cc:333
virtual bool check_semantics(string &msg, bool all=false)
Check semantic features of the Array.
Definition: Array.cc:999
virtual void print_xml_core(FILE *out, string space, bool constrained, string tag)
Definition: Array.cc:701
virtual unsigned int dimensions(bool constrained=false)
Return the total number of dimensions in the array.
Definition: Array.cc:382
Part
Names the parts of multi-section constructor data types.
Definition: BaseType.h:102
void add_var(BaseType *v, Part p=nil)
Add the BaseType pointer to this constructor type instance.
Definition: Array.cc:176
int stop
The constraint end index.
Definition: Array.h:123
Holds a one-dimensional collection of DAP2 data types.
Definition: Vector.h:78
std::vector< dimension >::const_iterator Dim_citer
Definition: Array.h:149
int start
The constraint start index.
Definition: Array.h:122
Array & operator=(const Array &rhs)
Definition: Array.cc:144
void _duplicate(const Array &a)
Definition: Array.cc:54
Dim_iter dim_end()
Definition: Array.cc:367
virtual void print_as_map_xml(ostream &out, string space=" ", bool constrained=false)
Definition: Array.cc:669
friend class ArrayTest
Definition: Array.h:131
virtual int dimension_size(Dim_iter i, bool constrained=false)
Returns the size of the dimension.
Definition: Array.cc:410
void append_dim(int size, string name="")
Add a dimension of a given size.
Definition: Array.cc:225
std::vector< dimension >::iterator Dim_iter
Definition: Array.h:156
virtual string dimension_name(Dim_iter i)
Returns the name of the specified dimension.
Definition: Array.cc:508
virtual BaseType * ptr_duplicate()
Definition: Array.cc:138
virtual int dimension_stride(Dim_iter i, bool constrained=false)
Returns the stride value of the constraint.
Definition: Array.cc:492
int stride
The constraint stride.
Definition: Array.h:124
virtual void print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Prints a DDS entry for the Array.
Definition: Array.cc:608
int c_size
Size of dimension once constrained.
Definition: Array.h:125
virtual void print_as_map_xml_writer(XMLWriter &xml, bool constrained)
Definition: Array.cc:781
void prepend_dim(int size, const string &name="")
Definition: Array.cc:250
string name() const
Returns the name of the class instance.
Definition: BaseType.cc:210
virtual void print_xml(ostream &out, string space=" ", bool constrained=false)
Definition: Array.cc:649
Array(const string &n, BaseType *v)
Array constructor.
Definition: Array.cc:100
virtual int dimension_stop(Dim_iter i, bool constrained=false)
Return the stop index of the constraint.
Definition: Array.cc:467
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Array.cc:1018
virtual int dimension_start(Dim_iter i, bool constrained=false)
Return the start index of a dimension.
Definition: Array.cc:443
virtual ~Array()
The Array destructor.
Definition: Array.cc:131
int size
The unconstrained dimension size.
Definition: Array.h:120
string name
The name of this dimension.
Definition: Array.h:121
const int DODS_MAX_ARRAY
Definition: Array.h:60
The basic data type for the DODS DAP types.
Definition: BaseType.h:194
Dim_iter dim_begin()
Definition: Array.cc:360
void add_var_nocopy(BaseType *v, Part p=nil)
Definition: Array.cc:195
virtual void update_length(int size)
Definition: Array.cc:72
virtual void print_xml_writer_core(XMLWriter &out, bool constrained, string tag)
Definition: Array.cc:813
virtual unsigned int width()
Returns the width of the data, in bytes.
Definition: Vector.cc:486
unsigned int print_array(FILE *out, unsigned int index, unsigned int dims, unsigned int shape[])
Print the value given the current constraint.
Definition: Array.cc:852
A multidimensional array of identical data types.
Definition: Array.h:105
virtual void print_val(ostream &out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Array.cc:962
#define DODS_INT_MAX
Definition: dods-limits.h:49
virtual void clear_constraint()
Clears the projection; add each projected dimension explicitly using add_constraint.
Definition: Array.cc:302