|
AbstractLinAlgPack: C++ Interfaces For Vectors, Matrices And Related Linear Algebra Objects Version of the Day
|
00001 // ///////////////////////////////////////////////////////////////////// 00002 // AbstractLinAlgPack_VectorDenseEncap.hpp 00003 00004 #ifndef SLAP_VECTOR_DENSE_ENCAP_H 00005 #define SLAP_VECTOR_DENSE_ENCAP_H 00006 00007 #include "AbstractLinAlgPack_Types.hpp" 00008 #include "AbstractLinAlgPack_VectorMutable.hpp" 00009 #include "DenseLinAlgPack_DVectorClass.hpp" 00010 00011 namespace AbstractLinAlgPack { 00012 00035 class VectorDenseEncap { 00036 public: 00037 00039 VectorDenseEncap( const Vector& vec ); 00041 ~VectorDenseEncap(); 00043 const DVectorSlice& operator()() const; 00044 00045 private: 00046 00047 const Vector &vec_; 00048 RTOpPack::SubVector sub_vec_; 00049 DVectorSlice vs_; 00050 VectorDenseEncap(); // Not defined and not to be called! 00051 VectorDenseEncap(const VectorDenseEncap&); // "" 00052 VectorDenseEncap& operator=(const VectorDenseEncap&); // "" 00053 00054 }; // end class VectorDenseEncap 00055 00062 class VectorDenseMutableEncap { 00063 public: 00064 00066 VectorDenseMutableEncap( VectorMutable& vec ); 00068 ~VectorDenseMutableEncap(); 00070 DVectorSlice& operator()(); 00072 const DVectorSlice& operator()() const; 00073 00074 private: 00075 00076 VectorMutable &vec_; 00077 RTOpPack::MutableSubVector sub_vec_; 00078 DVectorSlice vs_; 00079 VectorDenseMutableEncap(); // Not defined and not to be called! 00080 VectorDenseMutableEncap(const VectorDenseMutableEncap&); // "" 00081 VectorDenseMutableEncap& operator=(const VectorDenseMutableEncap&); // "" 00082 00083 }; // end class VectorDenseMutableEncap 00084 00085 // /////////////////////////////////////////// 00086 // Inline members 00087 00088 // VectorDenseEncap 00089 00090 inline 00091 VectorDenseEncap::VectorDenseEncap( const Vector& vec ) 00092 :vec_(vec) 00093 { 00094 vec_.get_sub_vector(Range1D(),&sub_vec_); 00095 vs_.bind( DVectorSlice( 00096 const_cast<value_type*>(sub_vec_.values()) 00097 ,sub_vec_.subDim() 00098 ,sub_vec_.stride() 00099 ) 00100 ); 00101 } 00102 00103 inline 00104 VectorDenseEncap::~VectorDenseEncap() 00105 { 00106 vec_.free_sub_vector(&sub_vec_); 00107 } 00108 00109 inline 00110 const DVectorSlice& VectorDenseEncap::operator()() const 00111 { 00112 return vs_; 00113 } 00114 00115 // VectorDenseMutableEncap 00116 00117 inline 00118 VectorDenseMutableEncap::VectorDenseMutableEncap( VectorMutable& vec ) 00119 :vec_(vec) 00120 { 00121 vec_.get_sub_vector(Range1D(),&sub_vec_); 00122 vs_.bind( DVectorSlice( 00123 sub_vec_.values() 00124 ,sub_vec_.subDim() 00125 ,sub_vec_.stride() 00126 ) 00127 ); 00128 } 00129 00130 inline 00131 VectorDenseMutableEncap::~VectorDenseMutableEncap() 00132 { 00133 vec_.commit_sub_vector(&sub_vec_); 00134 } 00135 00136 inline 00137 DVectorSlice& VectorDenseMutableEncap::operator()() 00138 { 00139 return vs_; 00140 } 00141 00142 inline 00143 const DVectorSlice& VectorDenseMutableEncap::operator()() const 00144 { 00145 return vs_; 00146 } 00147 00148 } // end namespace SparseLinALgPack 00149 00150 #endif // SLAP_VECTOR_DENSE_ENCAP_H
1.7.4