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