00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef _array_h
00038 #define _array_h 1
00039
00040 #include <string>
00041 #include <vector>
00042
00043 #ifndef _dods_limits_h
00044 #include "dods-limits.h"
00045 #endif
00046
00047 #ifndef _vector_h
00048 #include "Vector.h"
00049 #endif
00050
00051 namespace libdap
00052 {
00053
00054 const int DODS_MAX_ARRAY = DODS_INT_MAX;
00055
00099 class Array: public Vector
00100 {
00101 public:
00112 struct dimension
00113 {
00114 int size;
00115 string name;
00116 int start;
00117 int stop;
00118 int stride;
00119 int c_size;
00120 #if array_selected
00121 bool selected;
00122 #endif
00123 };
00124
00125 private:
00126 std::vector<dimension> _shape;
00127 unsigned int print_array(FILE *out, unsigned int index,
00128 unsigned int dims, unsigned int shape[]);
00129 unsigned int print_array(ostream &out, unsigned int index,
00130 unsigned int dims, unsigned int shape[]);
00131
00132 friend class ArrayTest;
00133
00134 protected:
00135 void _duplicate(const Array &a);
00136 void print_xml_core(FILE *out, string space, bool constrained, string tag);
00137 void print_xml_core(ostream &out, string space, bool constrained, string tag);
00138
00139 public:
00145 typedef std::vector<dimension>::const_iterator Dim_citer ;
00152 typedef std::vector<dimension>::iterator Dim_iter ;
00153
00154 Array(const string &n = "", BaseType *v = 0);
00155 Array(const Array &rhs);
00156 virtual ~Array();
00157
00158 Array &operator=(const Array &rhs);
00159 virtual BaseType *ptr_duplicate();
00160
00161 void add_var(BaseType *v, Part p = nil);
00162
00163 void update_length(int size);
00164
00165 void append_dim(int size, string name = "");
00166
00167 void add_constraint(Dim_iter i, int start, int stride, int stop);
00168 void reset_constraint();
00169
00170 void clear_constraint();
00171
00172 Dim_iter dim_begin() ;
00173 Dim_iter dim_end() ;
00174
00175 int dimension_size(Dim_iter i, bool constrained = false);
00176 int dimension_start(Dim_iter i, bool constrained = false);
00177 int dimension_stop(Dim_iter i, bool constrained = false);
00178 int dimension_stride(Dim_iter i, bool constrained = false);
00179 string dimension_name(Dim_iter i);
00180
00181 unsigned int dimensions(bool constrained = false);
00182
00183 virtual void print_decl(FILE *out, string space = " ",
00184 bool print_semi = true,
00185 bool constraint_info = false,
00186 bool constrained = false);
00187 virtual void print_decl(ostream &out, string space = " ",
00188 bool print_semi = true,
00189 bool constraint_info = false,
00190 bool constrained = false);
00191
00192 virtual void print_xml(FILE *out, string space = " ",
00193 bool constrained = false);
00194 virtual void print_xml(ostream &out, string space = " ",
00195 bool constrained = false);
00196
00197 virtual void print_as_map_xml(FILE *out, string space = " ",
00198 bool constrained = false);
00199 virtual void print_as_map_xml(ostream &out, string space = " ",
00200 bool constrained = false);
00201
00202 virtual void print_val(FILE *out, string space = "",
00203 bool print_decl_p = true);
00204 virtual void print_val(ostream &out, string space = "",
00205 bool print_decl_p = true);
00206
00207 virtual bool check_semantics(string &msg, bool all = false);
00208
00209 virtual void dump(ostream &strm) const ;
00210 };
00211
00212 }
00213
00214 #endif // _array_h