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 #ifndef _vector_h
00036 #define _vector_h 1
00037
00038
00039 #ifdef WIN32
00040 #include <rpc.h>
00041 #include <winsock2.h>
00042 #else
00043 #include <rpc/types.h>
00044 #include <netinet/in.h>
00045 #include <rpc/xdr.h>
00046 #endif
00047
00048 #ifndef _basetype_h
00049 #include "BaseType.h"
00050 #endif
00051
00052 #ifndef _dds_h
00053 #include "DDS.h"
00054 #endif
00055
00056 #ifndef constraint_evaluator_h
00057 #include "ConstraintEvaluator.h"
00058 #endif
00059
00085 class Vector: public BaseType
00086 {
00087 private:
00088 int _length;
00089 BaseType *_var;
00090
00091
00092 char *_buf;
00093 vector<string> d_str;
00094 vector<BaseType *> _vec;
00095
00096 protected:
00097
00098 void _duplicate(const Vector &v);
00099
00100 public:
00101 Vector(const string &n = "", BaseType *v = 0, const Type &t = dods_null_c);
00102 Vector(const Vector &rhs);
00103
00104 virtual ~Vector();
00105
00106 Vector &operator=(const Vector &rhs);
00107 virtual BaseType *ptr_duplicate() = 0;
00108
00109 virtual int element_count(bool leaves);
00110
00111 virtual void set_send_p(bool state);
00112
00113 virtual void set_read_p(bool state);
00114
00115 virtual unsigned int width();
00116
00117 virtual int length() const;
00118
00119 virtual void set_length(int l);
00120
00121 virtual bool serialize(const string &dataset, ConstraintEvaluator &eval,
00122 DDS &dds, XDR *sink, bool ce_eval = true);
00123 virtual bool deserialize(XDR *source, DDS *dds, bool reuse = false);
00124
00125 virtual unsigned int val2buf(void *val, bool reuse = false);
00126
00127 virtual unsigned int buf2val(void **val);
00128
00129 void set_vec(unsigned int i, BaseType *val);
00130
00131 void vec_resize(int l);
00132
00133 virtual bool set_value(dods_byte *val, int sz);
00134 virtual bool set_value(dods_int16 *val, int sz);
00135 virtual bool set_value(dods_uint16 *val, int sz);
00136 virtual bool set_value(dods_int32 *val, int sz);
00137 virtual bool set_value(dods_uint32 *val, int sz);
00138 virtual bool set_value(dods_float32 *val, int sz);
00139 virtual bool set_value(dods_float64 *val, int sz);
00140 virtual bool set_value(string *val, int sz);
00141
00142 virtual void value(dods_byte *b) const;
00143 virtual void value(dods_int16 *b) const;
00144 virtual void value(dods_uint16 *b) const;
00145 virtual void value(dods_int32 *b) const;
00146 virtual void value(dods_uint32 *b) const;
00147 virtual void value(dods_float32 *b) const;
00148 virtual void value(dods_float64 *b) const;
00149 virtual void value(vector<string> &b) const;
00150
00151 virtual BaseType *var(const string &name = "", bool exact_match = true,
00152 btp_stack *s = 0);
00153 virtual BaseType *var(const string &name, btp_stack &s);
00154 virtual BaseType *var(unsigned int i);
00155
00156 virtual void add_var(BaseType *v, Part p = nil);
00157 virtual bool check_semantics(string &msg, bool all = false);
00158
00159 virtual void dump(ostream &strm) const ;
00160 };
00161
00162 #endif