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
00038
00039
00040
00041
00042 #ifndef _sequence_h
00043 #define _sequence_h 1
00044
00045
00046 #include <stack>
00047
00048 #ifndef _basetype_h
00049 #include "BaseType.h"
00050 #endif
00051
00052 #ifndef _constructor_h
00053 #include "Constructor.h"
00054 #endif
00055
00056 #ifndef constraint_evaluator_h
00057 #include "ConstraintEvaluator.h"
00058 #endif
00059
00060
00061 #include "XDRUtils.h"
00062
00063 #define FILE_METHODS 1
00064
00065 namespace libdap
00066 {
00067
00070 typedef vector<BaseType *> BaseTypeRow;
00071
00073 typedef vector<BaseTypeRow *> SequenceValues;
00074
00173 class Sequence: public Constructor
00174 {
00175 private:
00176
00177
00178 SequenceValues d_values;
00179
00180
00181
00182 int d_row_number;
00183
00184
00185
00186
00187
00188
00189
00190
00191 int d_starting_row_number;
00192 int d_row_stride;
00193 int d_ending_row_number;
00194
00195
00196 bool d_unsent_data;
00197
00198
00199
00200
00201 bool d_wrote_soi;
00202
00203
00204 bool d_leaf_sequence;
00205
00206
00207 bool d_top_most;
00208
00209 void _duplicate(const Sequence &s);
00210 BaseType *m_leaf_match(const string &name, btp_stack *s = 0);
00211 BaseType *m_exact_match(const string &name, btp_stack *s = 0);
00212
00213 bool is_end_of_rows(int i);
00214
00215 friend class SequenceTest;
00216
00217 protected:
00218
00219 typedef stack<SequenceValues*> sequence_values_stack_t;
00220
00221 virtual bool serialize_parent_part_one(DDS &dds,
00222 ConstraintEvaluator &eval,
00223 Marshaller &m);
00224 virtual void serialize_parent_part_two(DDS &dds,
00225 ConstraintEvaluator &eval,
00226 Marshaller &m);
00227 virtual bool serialize_leaf(DDS &dds,
00228 ConstraintEvaluator &eval,
00229 Marshaller &m, bool ce_eval);
00230
00231 virtual void intern_data_private( ConstraintEvaluator &eval,
00232 DDS &dds,
00233 sequence_values_stack_t &sequence_values_stack);
00234 virtual void intern_data_for_leaf(DDS &dds,
00235 ConstraintEvaluator &eval,
00236 sequence_values_stack_t &sequence_values_stack);
00237
00238 virtual void intern_data_parent_part_one(DDS &dds,
00239 ConstraintEvaluator &eval,
00240 sequence_values_stack_t &sequence_values_stack);
00241
00242 virtual void intern_data_parent_part_two(DDS &dds,
00243 ConstraintEvaluator &eval,
00244 sequence_values_stack_t &sequence_values_stack);
00245
00246 public:
00247
00248 Sequence(const string &n);
00249 Sequence(const string &n, const string &d);
00250
00251 Sequence(const Sequence &rhs);
00252
00253 virtual ~Sequence();
00254
00255 Sequence &operator=(const Sequence &rhs);
00256
00257 virtual BaseType *ptr_duplicate();
00258
00259 virtual string toString();
00260
00261 virtual int element_count(bool leaves = false);
00262
00263 virtual bool is_linear();
00264
00265 virtual void set_send_p(bool state);
00266 virtual void set_read_p(bool state);
00267 virtual void set_in_selection(bool state);
00268
00269 virtual unsigned int width();
00270
00271 virtual int length();
00272
00273 virtual int number_of_rows();
00274
00275 virtual bool read_row(int row, DDS &dds,
00276 ConstraintEvaluator &eval, bool ce_eval = true);
00277
00278 virtual void intern_data(ConstraintEvaluator &eval, DDS &dds);
00279 virtual bool serialize(ConstraintEvaluator &eval, DDS &dds,
00280 Marshaller &m, bool ce_eval = true);
00281 virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false);
00282
00284 void reset_row_number();
00285
00286 int get_starting_row_number();
00287
00288 virtual int get_row_stride();
00289
00290 virtual int get_ending_row_number();
00291
00292 virtual void set_row_number_constraint(int start, int stop, int stride = 1);
00293
00295 bool get_unsent_data()
00296 {
00297 return d_unsent_data;
00298 }
00299
00301 void set_unsent_data(bool usd)
00302 {
00303 d_unsent_data = usd;
00304 }
00305
00306
00307 virtual unsigned int val2buf(void *val, bool reuse = false);
00308 virtual unsigned int buf2val(void **val);
00309
00310 virtual void set_value(SequenceValues &values);
00311 virtual SequenceValues value();
00312
00313 virtual BaseType *var(const string &name, bool exact_match = true,
00314 btp_stack *s = 0);
00315 virtual BaseType *var(const string &n, btp_stack &s);
00316
00317 virtual BaseType *var_value(size_t row, const string &name);
00318
00319 virtual BaseType *var_value(size_t row, size_t i);
00320
00321 virtual BaseTypeRow *row_value(size_t row);
00322
00323 virtual void add_var(BaseType *, Part part = nil);
00324 virtual void print_one_row(ostream &out, int row, string space,
00325 bool print_row_num = false);
00326 virtual void print_val_by_rows(ostream &out, string space = "",
00327 bool print_decl_p = true,
00328 bool print_row_numbers = true);
00329 virtual void print_val(ostream &out, string space = "",
00330 bool print_decl_p = true);
00331
00332 #if FILE_METHODS
00333 virtual void print_one_row(FILE *out, int row, string space,
00334 bool print_row_num = false);
00335 virtual void print_val_by_rows(FILE *out, string space = "",
00336 bool print_decl_p = true,
00337 bool print_row_numbers = true);
00338 virtual void print_val(FILE *out, string space = "",
00339 bool print_decl_p = true);
00340 #endif
00341
00342 virtual bool check_semantics(string &msg, bool all = false);
00343
00344 virtual void set_leaf_p(bool state);
00345
00346 virtual bool is_leaf_sequence();
00347
00348 virtual void set_leaf_sequence(int lvl = 1);
00349
00350 virtual void dump(ostream &strm) const ;
00351 };
00352
00353 }
00354
00355 #endif //_sequence_h