[shark] 62/79: added the same proxy changes to the vector proxies

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Thu Nov 26 15:41:04 UTC 2015


This is an automated email from the git hooks/post-receive script.

ghisvail-guest pushed a commit to branch master
in repository shark.

commit d83bd6af6bcd057844a4a2985d415eac4694bdbf
Author: Oswin Krause <oswin.krause at di.ku.dk>
Date:   Tue Oct 27 12:52:00 2015 +0100

    added the same proxy changes to the vector proxies
---
 include/shark/LinAlg/BLAS/matrix_proxy.hpp | 33 +++++++------------
 include/shark/LinAlg/BLAS/vector_proxy.hpp | 51 ++++++++++++++++++++----------
 2 files changed, 46 insertions(+), 38 deletions(-)

diff --git a/include/shark/LinAlg/BLAS/matrix_proxy.hpp b/include/shark/LinAlg/BLAS/matrix_proxy.hpp
index 5e6395e..a97eb82 100644
--- a/include/shark/LinAlg/BLAS/matrix_proxy.hpp
+++ b/include/shark/LinAlg/BLAS/matrix_proxy.hpp
@@ -41,7 +41,6 @@ namespace blas {
 ///\brief Wraps another expression as a reference.
 template<class M>
 class matrix_reference:public matrix_expression<matrix_reference<M> > {
-	typedef matrix_reference<M> self_type;
 public:
 	typedef typename M::size_type size_type;
 	typedef typename M::difference_type difference_type;
@@ -57,7 +56,7 @@ public:
 	typedef typename index_pointer<M>::type index_pointer;
 
 	typedef matrix_reference<M const> const_closure_type;
-	typedef self_type closure_type;
+	typedef matrix_reference<M> closure_type;
 	typedef typename M::orientation orientation;
 	typedef typename M::storage_category storage_category;
 	typedef elementwise_tag evaluation_category;
@@ -484,8 +483,6 @@ temporary_proxy< matrix_transpose<M> > trans(temporary_proxy<M> m) {
 
 template<class M>
 class matrix_row: public vector_expression<matrix_row<M> > {
-	typedef matrix_row<M> self_type;
-	
 public:
 	typedef M matrix_type;
 	typedef std::size_t size_type;
@@ -503,7 +500,7 @@ public:
 
 	typedef typename closure<M>::type matrix_closure_type;
 	typedef matrix_row<typename const_expression<M>::type> const_closure_type;
-	typedef self_type closure_type;
+	typedef matrix_row<M> closure_type;
 	typedef typename M::storage_category storage_category;
 	typedef elementwise_tag evaluation_category;
 
@@ -701,8 +698,6 @@ temporary_proxy<matrix_row<M> > row(temporary_proxy<M> expression, typename M::i
 
 template<class M>
 class matrix_column: public vector_expression<matrix_column<M> > {
-	typedef matrix_column<M> self_type;
-	
 public:
 	typedef M matrix_type;
 	typedef std::size_t size_type;
@@ -720,7 +715,7 @@ public:
 
 	typedef typename closure<M>::type matrix_closure_type;
 	typedef matrix_column<typename const_expression<M>::type> const_closure_type;
-	typedef self_type closure_type;
+	typedef matrix_column<M> closure_type;
 	typedef typename M::storage_category storage_category;
 	typedef elementwise_tag evaluation_category;
 
@@ -919,10 +914,7 @@ temporary_proxy<matrix_column<M> > column(temporary_proxy<M> expression, typenam
 
 // Matrix based vector range class representing (off-)diagonals of a matrix.
 template<class M>
-class matrix_vector_range:
-	public vector_expression<matrix_vector_range<M> > {
-
-	typedef matrix_vector_range<M> self_type;
+class matrix_vector_range: public vector_expression<matrix_vector_range<M> > {
 public:
 	typedef M matrix_type;
 	typedef std::size_t size_type;
@@ -940,7 +932,7 @@ public:
 
 	typedef typename closure<M>::type matrix_closure_type;
 	typedef matrix_vector_range<typename const_expression<M>::type> const_closure_type;
-	typedef self_type closure_type;
+	typedef matrix_vector_range<M>  closure_type;
 	typedef typename M::storage_category storage_category;
 	typedef elementwise_tag evaluation_category;
 
@@ -1094,7 +1086,6 @@ temporary_proxy< matrix_vector_range<M> > diag(temporary_proxy<M> mat){
 // Matrix based range class
 template<class M>
 class matrix_range:public matrix_expression<matrix_range<M> > {
-	typedef matrix_range<M> self_type;
 public:
 	typedef M matrix_type;
 	typedef std::size_t size_type;
@@ -1112,7 +1103,7 @@ public:
 
 	typedef typename closure<M>::type matrix_closure_type;
 	typedef matrix_range<typename const_expression<M>::type> const_closure_type;
-	typedef self_type closure_type;
+	typedef matrix_range<M> closure_type;
 	typedef typename M::storage_category storage_category;
 	typedef elementwise_tag evaluation_category;
 	typedef typename M::orientation orientation;
@@ -1202,11 +1193,11 @@ public:
 
 	// Assignment
 	
-	self_type& operator = (self_type const& e) {
-		return assign(*this, typename matrix_temporary<self_type>::type(e));
+	matrix_range& operator = (matrix_range const& e) {
+		return assign(*this, typename matrix_temporary<matrix_range>::type(e));
 	}
 	template<class E>
-	self_type& operator = (matrix_expression<E> const& e) {
+	matrix_range& operator = (matrix_expression<E> const& e) {
 		return assign(*this, typename matrix_temporary<E>::type(e));
 	}
 
@@ -1421,7 +1412,7 @@ public:
 	, m_stride2(expression.stride2())
 	{}
 
-	/// \brief Constructor of a self_type proxy from a Dense MatrixExpression
+	/// \brief Constructor of a vector proxy from a Dense MatrixExpression
 	///
 	/// Be aware that the expression must live longer than the proxy!
 	/// \param expression Expression from which to construct the Proxy
@@ -1438,7 +1429,7 @@ public:
 		));
 	}
 	
-	/// \brief Constructor of a self_type proxy from a Dense MatrixExpression
+	/// \brief Constructor of a vector proxy from a Dense MatrixExpression
 	///
 	/// Be aware that the expression must live longer than the proxy!
 	/// \param expression Expression from which to construct the Proxy
@@ -1455,7 +1446,7 @@ public:
 		);
 	}
 		
-	/// \brief Constructor of a self_type proxy from a block of memory
+	/// \brief Constructor of a vector proxy from a block of memory
 	/// \param values the block of memory used
 	/// \param size1 size in 1st direction
 	/// \param size2 size in 2nd direction
diff --git a/include/shark/LinAlg/BLAS/vector_proxy.hpp b/include/shark/LinAlg/BLAS/vector_proxy.hpp
index 6d58283..39ae8af 100644
--- a/include/shark/LinAlg/BLAS/vector_proxy.hpp
+++ b/include/shark/LinAlg/BLAS/vector_proxy.hpp
@@ -42,9 +42,6 @@ namespace blas{
 	
 template<class V>
 class vector_reference:public vector_expression<vector_reference<V> >{
-
-	typedef vector_reference<V> self_type;
-	typedef V referred_type;
 public:
 	typedef typename V::size_type size_type;
 	typedef typename V::difference_type difference_type;
@@ -59,16 +56,20 @@ public:
 	typedef typename V::const_index_pointer const_index_pointer;
 	typedef typename index_pointer<V>::type index_pointer;
 	
-	typedef const self_type const_closure_type;
-	typedef self_type closure_type;
+	typedef vector_reference<V const> const_closure_type;
+	typedef vector_reference<V> closure_type;
 	typedef typename V::storage_category storage_category;
 	typedef elementwise_tag evaluation_category;
 
-	// Construction and destruction
-	vector_reference(referred_type& v):m_expression(&v){}
+	// Construction
+	vector_reference(V& v):m_expression(&v){}
+		
+	template<class E>
+	vector_reference(vector_reference<E> const& other)
+		:m_expression(&other.expression()){}
 		
 	// Expression accessors
-	referred_type& expression() const{
+	V& expression() const{
 		return *m_expression;
 	}
 	
@@ -171,7 +172,7 @@ public:
 	}
 
 private:
-	referred_type* m_expression;
+	V* m_expression;
 };
 
 /** \brief A vector referencing a continuous subvector of elements of vector \c v containing all elements specified by \c range.
@@ -185,9 +186,6 @@ private:
  */
 template<class V>
 class vector_range:public vector_expression<vector_range<V> >{
-
-	typedef vector_range<V> self_type;
-	typedef typename closure<V>::type vector_closure_type;
 public:
 	typedef typename V::size_type size_type;
 	typedef typename V::difference_type difference_type;
@@ -202,8 +200,9 @@ public:
 	typedef typename V::const_index_pointer const_index_pointer;
 	typedef typename index_pointer<V>::type index_pointer;
 
-	typedef const self_type const_closure_type;
-	typedef self_type closure_type;
+	typedef typename closure<V>::type vector_closure_type;
+	typedef vector_range<typename const_expression<V>::type> const_closure_type;
+	typedef vector_range<V> closure_type;
 	typedef typename V::storage_category storage_category;
 	typedef elementwise_tag evaluation_category;
 
@@ -214,6 +213,16 @@ public:
 		RANGE_CHECK(start() + size() <= m_expression.size());
 	}
 	
+	//non-const-> const conversion
+	template<class E>
+	vector_range(
+		vector_range<E> const& other,
+		typename boost::disable_if<
+			boost::is_same<E,vector_range>
+		>::type* dummy = 0
+	):m_expression(other.expression())
+	, m_range(other.range()){}
+	
 	// ---------
 	// Internal Accessors
 	// ---------
@@ -229,6 +238,10 @@ public:
 		return m_expression;
 	}
 	
+	blas::range const& range()const{
+		return m_range;
+	}
+	
 	/// \brief Return the size of the vector.
 	size_type size() const {
 		return m_range.size();
@@ -320,7 +333,7 @@ public:
 	}
 private:
 	vector_closure_type m_expression;
-	range m_range;
+	blas::range m_range;
 };
 
 // ------------------
@@ -343,8 +356,12 @@ temporary_proxy<vector_range<V> > subrange(vector_expression<V>& data, typename
  * Vector Expression and access to an element outside of index range of the vector is \b undefined.
  */
 template<class V>
-vector_range<V const> subrange(vector_expression<V> const& data, typename V::size_type start, typename V::size_type stop){
-	return vector_range<V const> (data(), range(start, stop));
+vector_range<typename const_expression<V>::type > subrange(
+	vector_expression<V> const& data,
+	typename V::size_type start,
+	typename V::size_type stop
+){
+	return vector_range<typename const_expression<V>::type> (data(), range(start, stop));
 }
 
 template<class V>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/shark.git



More information about the debian-science-commits mailing list