00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef SELDON_FILE_VECTOR_VECTOR_3_HXX
00022
00023
00024 #ifndef SELDON_VECTOR3_DEFAULT_ALLOCATOR_0
00025
00028 #define SELDON_VECTOR3_DEFAULT_ALLOCATOR_0 SELDON_DEFAULT_ALLOCATOR
00029 #endif
00030
00031 #ifndef SELDON_VECTOR3_DEFAULT_ALLOCATOR_1
00032
00035 #define SELDON_VECTOR3_DEFAULT_ALLOCATOR_1 MallocObject
00036 #endif
00037
00038 #ifndef SELDON_VECTOR3_DEFAULT_ALLOCATOR_2
00039 #define SELDON_VECTOR3_DEFAULT_ALLOCATOR_2 MallocObject
00040
00043 #endif
00044
00045
00046 namespace Seldon
00047 {
00048
00050
00064 template <class T,
00065 class Allocator0 = SELDON_VECTOR3_DEFAULT_ALLOCATOR_0<T>,
00066 class Allocator1 = SELDON_VECTOR3_DEFAULT_ALLOCATOR_1<
00067 Vector<T, Vect_Full, Allocator0> >,
00068 class Allocator2 =
00069 SELDON_VECTOR3_DEFAULT_ALLOCATOR_2<
00070 Vector<Vector<T, Vect_Full, Allocator0>,
00071 Vect_Full, Allocator1> > >
00072 class Vector3
00073 {
00074 public:
00075 typedef T value_type;
00076 typedef T* pointer;
00077 typedef const T* const_pointer;
00078 typedef T& reference;
00079 typedef const T& const_reference;
00080
00081 protected:
00082 Vector<Vector<Vector<T, Vect_Full, Allocator0>, Vect_Full, Allocator1>,
00083 Vect_Full, Allocator2> data_;
00084
00085 public:
00086
00087
00088
00089 Vector3();
00090 Vector3(int);
00091 Vector3(Vector<int>& length);
00092 template <class Allocator>
00093 Vector3(Vector<Vector<int>, Vect_Full, Allocator>& length);
00094 ~Vector3();
00095
00096
00097
00098 int GetLength() const;
00099 int GetSize() const;
00100 int GetLength(int i) const;
00101 int GetSize(int i) const;
00102 int GetLength(int i, int j) const;
00103 int GetSize(int i, int j) const;
00104 int GetNelement() const;
00105 int GetNelement(int beg, int end) const;
00106 int GetNelement(int beg0, int end0, int beg1, int end1) const;
00107 Vector<int> GetShape(int i) const;
00108 void GetShape(int i, Vector<int>& shape) const;
00109 void Reallocate(int N);
00110 void Reallocate(int i, int N);
00111 void Reallocate(int i, int j, int N);
00112
00113 template <class Td, class Allocatord>
00114 void Flatten(Vector<Td, VectFull, Allocatord>& data) const;
00115 template <class Td, class Allocatord>
00116 void Flatten(int beg, int end, Vector<Td, VectFull, Allocatord>& data)
00117 const;
00118 template <class Td, class Allocatord>
00119 void Flatten(int beg0, int end0, int beg1, int end1,
00120 Vector<Td, VectFull, Allocatord>& data) const;
00121
00122 void PushBack(int i, int j, const T& x);
00123 void PushBack(int i, const Vector<T, Vect_Full, Allocator0>& X);
00124 void PushBack(const Vector<Vector<T, Vect_Full, Allocator0>,
00125 Vect_Full, Allocator1>& X);
00126 void PushBack(const Vector<Vector<Vector<T, Vect_Full, Allocator0>,
00127 Vect_Full, Allocator1>, Vect_Full, Allocator2>& X);
00128 void PushBack(const Vector3<T, Allocator0, Allocator1, Allocator2>& X);
00129
00130
00131 void Clear();
00132 void Clear(int i);
00133 void Clear(int i, int j);
00134
00135 void Fill(const T& x);
00136
00137 Vector<Vector<Vector<T, Vect_Full, Allocator0>, Vect_Full, Allocator1>,
00138 Vect_Full, Allocator2>&
00139 GetVector();
00140 const Vector<Vector<Vector<T, Vect_Full, Allocator0>,
00141 Vect_Full, Allocator1>, Vect_Full, Allocator2>&
00142 GetVector() const;
00143
00144 Vector<Vector<T, Vect_Full, Allocator0>, VectFull, Allocator1>&
00145 GetVector(int i);
00146 const Vector<Vector<T, Vect_Full, Allocator0>, VectFull, Allocator1>&
00147 GetVector(int i) const;
00148
00149 Vector<T, Vect_Full, Allocator0>& GetVector(int i, int j);
00150 const Vector<T, Vect_Full, Allocator0>& GetVector(int i, int j) const;
00151
00152
00153 const
00154 Vector<Vector<T, Vect_Full, Allocator0>, VectFull, Allocator1>&
00155 operator() (int i) const;
00156 Vector<Vector<T, Vect_Full, Allocator0>, VectFull, Allocator1>&
00157 operator() (int i);
00158
00159 const Vector<T, Vect_Full, Allocator0>& operator() (int i, int j)
00160 const;
00161 Vector<T, Vect_Full, Allocator0>& operator() (int i, int j);
00162
00163 const_reference operator() (int i, int j, int k) const;
00164 reference operator() (int i, int j, int k);
00165
00166
00167
00168 void Print() const;
00169
00170
00171
00172 void Write(string file_name, bool with_size = true) const;
00173 void Write(ostream& file_stream, bool with_size = true) const;
00174 void Read(string file_name, bool with_size = true);
00175 void Read(istream& file_stream, bool with_size = true);
00176 };
00177
00178 }
00179
00180
00181 #define SELDON_FILE_VECTOR_VECTOR_3_HXX
00182 #endif