Warning: this documentation for the development version is under construction.
00001 // Copyright (C) 2010-2012, INRIA 00002 // Author(s): Marc Fragu, Vivien Mallet 00003 // 00004 // This file is part of the linear-algebra library Seldon, 00005 // http://seldon.sourceforge.net/. 00006 // 00007 // Seldon is free software; you can redistribute it and/or modify it under the 00008 // terms of the GNU Lesser General Public License as published by the Free 00009 // Software Foundation; either version 2.1 of the License, or (at your option) 00010 // any later version. 00011 // 00012 // Seldon is distributed in the hope that it will be useful, but WITHOUT ANY 00013 // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 00014 // FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for 00015 // more details. 00016 // 00017 // You should have received a copy of the GNU Lesser General Public License 00018 // along with Seldon. If not, see http://www.gnu.org/licenses/. 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 /*** Constructors and destructor ***/ 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 /*** Management of the vectors ***/ 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 /*** Element access and assignment ***/ 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 /*** Convenient method ***/ 00167 00168 void Print() const; 00169 00170 /*** Input/output functions ***/ 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