|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r51765 - in trunk/boost/numeric/ublas: . detail
From: guwi17_at_[hidden]
Date: 2009-03-13 17:10:05
Author: guwi17
Date: 2009-03-13 17:10:04 EDT (Fri, 13 Mar 2009)
New Revision: 51765
URL: http://svn.boost.org/trac/boost/changeset/51765
Log:
fwd.hpp:
* default arguments for generalized_vector_of_vector
expression_types.hpp:
* added self_type to matrix_expression
detail/concepts.hpp:
* added documentation and missing concept checks to scalar expression and vector expression
traits.hpp:
* added container_traits
* added vector_traits
* added matrix_traits
Text files modified:
trunk/boost/numeric/ublas/detail/concepts.hpp | 27 +++++++++++++
trunk/boost/numeric/ublas/expression_types.hpp | 2
trunk/boost/numeric/ublas/fwd.hpp | 3 +
trunk/boost/numeric/ublas/traits.hpp | 83 ++++++++++++++++++++++++++++++++++++++++
4 files changed, 115 insertions(+), 0 deletions(-)
Modified: trunk/boost/numeric/ublas/detail/concepts.hpp
==============================================================================
--- trunk/boost/numeric/ublas/detail/concepts.hpp (original)
+++ trunk/boost/numeric/ublas/detail/concepts.hpp 2009-03-13 17:10:04 EDT (Fri, 13 Mar 2009)
@@ -237,11 +237,22 @@
}
};
+ /** \brief Scalar expression concept.
+ *
+ * requirements
+ * \li \c SE::value_type is the type of the scalar expression
+ * \li \c SE must be convertable to \c SE::value_type
+ * \li the constant \c SE::complexity must exist
+ *
+ * \param SE the type of the scalar expression
+ */
template<class SE>
struct ScalarExpressionConcept {
typedef SE scalar_expression_type;
typedef typename SE::value_type value_type;
+ static const unsigned complexity = SE::complexity;
+
void constraints () {
scalar_expression_type *sp;
scalar_expression_type s = *sp;
@@ -252,12 +263,28 @@
}
};
+ /** \brief Vector expression concept.
+ *
+ * requirements
+ * \li \c VE::value_type is the type of the elements
+ * \li \c VE::const_reference The return type when accessing an element of a constant vector
+ * expression. Must be convertable to a \c value_type.
+ * \li \c VE::size_type is the (unsigned) type of the indices
+ * \li \c VE::difference_type is the (signed) type of distances between indices
+ * \li \c VE::category
+ *
+ * \li the constant \c SE::complexity must exist
+ *
+ * \param SE the type of the scalar expression
+ */
template<class VE>
struct VectorExpressionConcept {
typedef VE vector_expression_type;
typedef typename VE::type_category type_category;
typedef typename VE::size_type size_type;
+ typedef typename VE::difference_type size_type;
typedef typename VE::value_type value_type;
+ typedef typename VE::const_reference const_reference;
typedef typename VE::const_iterator const_iterator_type;
typedef typename VE::const_reverse_iterator const_reverse_iterator_type;
Modified: trunk/boost/numeric/ublas/expression_types.hpp
==============================================================================
--- trunk/boost/numeric/ublas/expression_types.hpp (original)
+++ trunk/boost/numeric/ublas/expression_types.hpp 2009-03-13 17:10:04 EDT (Fri, 13 Mar 2009)
@@ -291,6 +291,8 @@
template<class E>
class matrix_expression:
public ublas_expression<E> {
+ private:
+ typedef matrix_expression<E> self_type;
public:
static const unsigned complexity = 0;
typedef E expression_type;
Modified: trunk/boost/numeric/ublas/fwd.hpp
==============================================================================
--- trunk/boost/numeric/ublas/fwd.hpp (original)
+++ trunk/boost/numeric/ublas/fwd.hpp 2009-03-13 17:10:04 EDT (Fri, 13 Mar 2009)
@@ -139,6 +139,9 @@
template<class T, class L = row_major, class A = unbounded_array<unbounded_array<T> > >
class vector_of_vector;
+ template<class T, class L = row_major, class A = vector<compressed_vector<T> > >
+ class generalized_vector_of_vector;
+
// Triangular matrix type
struct lower_tag {};
struct upper_tag {};
Modified: trunk/boost/numeric/ublas/traits.hpp
==============================================================================
--- trunk/boost/numeric/ublas/traits.hpp (original)
+++ trunk/boost/numeric/ublas/traits.hpp 2009-03-13 17:10:04 EDT (Fri, 13 Mar 2009)
@@ -511,6 +511,89 @@
}
+
+ /** \brief Traits class to extract type information from a matrix or vector CONTAINER.
+ *
+ */
+ template < class E >
+ struct container_traits {
+ /// type of indices
+ typedef typename E::size_type size_type;
+ /// type of differences of indices
+ typedef typename E::difference_type difference_type;
+
+ /// storage category: \c unknown_storage_tag, \c dense_tag, \c packed_tag, ...
+ typedef typename E::storage_category storage_category;
+
+ /// type of elements
+ typedef typename E::value_type value_type;
+ /// reference to an element
+ typedef typename E::reference reference;
+ /// const reference to an element
+ typedef typename E::const_reference const_reference;
+
+ /// type used in expressions to mark a reference to this class (usually a container_reference<E> or the class itself)
+ typedef typename E::closure_type closure_type;
+ /// type used in expressions to mark a reference to this class (usually a const container_reference<const E> or the class itself)
+ typedef typename E::const_closure_type const_closure_type;
+ };
+
+ /** \brief Traits class to extract type information from a MATRIX.
+ *
+ */
+ template < class MATRIX >
+ struct matrix_traits : container_traits <MATRIX> {
+
+ /// orientation of the matrix, either \c row_major_tag, \c column_major_tag or \c unknown_orientation_tag
+ typedef typename MATRIX::orientation_category orientation_category;
+
+ };
+
+ /** \brief Traits class to extract type information from a VECTOR.
+ *
+ */
+ template < class VECTOR >
+ struct vector_traits : container_traits <VECTOR> {
+
+ };
+
+ template < class T, int M, int N >
+ struct matrix_traits < T[M][N] > {
+ typedef T matrix_type[M][N];
+
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+
+ typedef row_major_tag orientation_category;
+ typedef dense_tag storage_category;
+
+ typedef T value_type;
+ typedef T *reference;
+ typedef const T *const_reference;
+
+ // \todo { define correct wrapper }
+ typedef matrix_reference<matrix_type> closure_type;
+ typedef const matrix_reference<const matrix_type> const_closure_type;
+ };
+
+ template < class T, int N >
+ struct vector_traits < T[N] > {
+ typedef T vector_type[N];
+
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+
+ typedef dense_tag storage_category;
+
+ typedef T value_type;
+ typedef T *reference;
+ typedef const T *const_reference;
+
+ // \todo { define correct wrapper }
+ typedef vector_reference<vector_type> closure_type;
+ typedef const vector_reference<const vector_type> const_closure_type;
+ };
+
}}}
#endif
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk