Warning: this documentation for the development version is under construction.
00001 // Copyright (C) 2010, INRIA 00002 // Author(s): Marc Fragu, Vivien Mallet 00003 // Copyright (C) 2011, Vivien Mallet 00004 // 00005 // This file is part of the linear-algebra library Seldon, 00006 // http://seldon.sourceforge.net/. 00007 // 00008 // Seldon is free software; you can redistribute it and/or modify it under the 00009 // terms of the GNU Lesser General Public License as published by the Free 00010 // Software Foundation; either version 2.1 of the License, or (at your option) 00011 // any later version. 00012 // 00013 // Seldon is distributed in the hope that it will be useful, but WITHOUT ANY 00014 // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 00015 // FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for 00016 // more details. 00017 // 00018 // You should have received a copy of the GNU Lesser General Public License 00019 // along with Seldon. If not, see http://www.gnu.org/licenses/. 00020 00021 00022 #ifndef SELDON_FILE_VECTOR_VECTOR2_HXX 00023 00024 00025 #ifndef SELDON_VECTOR2_DEFAULT_ALLOCATOR_0 00026 00029 #define SELDON_VECTOR2_DEFAULT_ALLOCATOR_0 SELDON_DEFAULT_ALLOCATOR 00030 #endif 00031 00032 #ifndef SELDON_VECTOR2_DEFAULT_ALLOCATOR_1 00033 00036 #define SELDON_VECTOR2_DEFAULT_ALLOCATOR_1 MallocObject 00037 #endif 00038 00039 00040 namespace Seldon 00041 { 00042 00043 00045 00056 template <class T, 00057 class Allocator0 = SELDON_VECTOR2_DEFAULT_ALLOCATOR_0<T>, 00058 class Allocator1 = SELDON_VECTOR2_DEFAULT_ALLOCATOR_1< 00059 Vector<T, VectFull, Allocator0> > > 00060 class Vector2 00061 { 00062 public: 00063 typedef T value_type; 00064 typedef T* pointer; 00065 typedef const T* const_pointer; 00066 typedef T& reference; 00067 typedef const T& const_reference; 00068 00069 protected: 00070 Vector<Vector<T, VectFull, Allocator0>, VectFull, Allocator1> data_; 00071 00072 public: 00073 00074 /*** Constructors and destructor ***/ 00075 00076 Vector2(); 00077 Vector2(int length); 00078 Vector2(const Vector<int>& length); 00079 ~Vector2(); 00080 00081 /*** Management of the vectors ***/ 00082 00083 bool IsEmpty() const; 00084 int GetLength() const; 00085 int GetSize() const; 00086 int GetLength(int i) const; 00087 int GetSize(int i) const; 00088 int GetNelement() const; 00089 int GetNelement(int beg, int end) const; 00090 Vector<int> GetShape() const; 00091 void GetShape(Vector<int>& shape) const; 00092 void Reallocate(int M); 00093 void Reallocate(int i, int N); 00094 void Reallocate(const Vector<int>& length); 00095 void Select(int beg, int end); 00096 Vector<T, VectFull, Allocator0> Flatten() const; 00097 template <class Td, class Allocatord> 00098 void Flatten(Vector<Td, VectFull, Allocatord>& data) const; 00099 template <class Td, class Allocatord> 00100 void Flatten(int beg, int end, Vector<Td, VectFull, Allocatord>& data) 00101 const; 00102 00103 void PushBack(int i, const T& x); 00104 void PushBack(const Vector<T, VectFull, Allocator0>& X); 00105 #ifndef SWIG 00106 void PushBack(const Vector<Vector<T, VectFull, Allocator0>, 00107 VectFull, Allocator1>& V); 00108 #endif 00109 void PushBack(const Vector2<T, Allocator0, Allocator1>& V); 00110 00111 void Clear(); 00112 void Clear(int i); 00113 00114 void Fill(const T& x); 00115 00116 Vector<Vector<T, VectFull, Allocator0>, VectFull, Allocator1>& 00117 GetVector(); 00118 #ifndef SWIG 00119 const Vector<Vector<T, VectFull, Allocator0>, VectFull, 00120 Allocator1> GetVector() const; 00121 #endif 00122 00123 Vector<T, VectFull, Allocator0>& GetVector(int i); 00124 #ifndef SWIG 00125 const Vector<T, VectFull, Allocator0>& GetVector(int i) const; 00126 #endif 00127 00128 void Copy(const Vector2<T, Allocator0, Allocator1>& V); 00129 Vector2<T, Allocator0, Allocator1> Copy() const; 00130 00131 /*** Element access and assignment ***/ 00132 00133 #ifndef SWIG 00134 const Vector<T, VectFull, Allocator0>& operator() (int i) const; 00135 #endif 00136 Vector<T, VectFull, Allocator0>& operator() (int i); 00137 #ifndef SWIG 00138 const_reference operator() (int i, int j) const; 00139 #endif 00140 reference operator() (int i, int j); 00141 00142 /*** Convenient methods ***/ 00143 00144 template <class V2> 00145 bool HasSameShape(const V2& V) const; 00146 void Print() const; 00147 00148 /*** Input/output functions ***/ 00149 00150 void Write(string file_name, bool with_size = true) const; 00151 void Write(ostream& file_stream, bool with_size = true) const; 00152 void Read(string file_name, bool with_size = true); 00153 void Read(istream& file_stream, bool with_size = true); 00154 }; 00155 00156 00157 } 00158 00159 00160 #define SELDON_FILE_VECTOR_VECTOR2_HXX 00161 #endif