MOOCHO (Single Doxygen Collection) Version of the Day
AbstractLinAlgPack_VectorDenseEncap.hpp
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines