mirror of
https://github.com/boostorg/ublas.git
synced 2026-02-20 03:02:13 +00:00
basis for generalised ublas_expression
[SVN r25397]
This commit is contained in:
@@ -26,10 +26,10 @@ namespace boost { namespace numeric { namespace ublas {
|
||||
{
|
||||
class nonassignable {
|
||||
protected:
|
||||
nonassignable(){}
|
||||
~nonassignable(){}
|
||||
nonassignable () {}
|
||||
~nonassignable () {}
|
||||
private: // emphasize the following members are private
|
||||
const nonassignable& operator=( const nonassignable& );
|
||||
const nonassignable& operator= (const nonassignable &);
|
||||
}; // nonassignable
|
||||
}
|
||||
typedef nonassignable_::nonassignable nonassignable;
|
||||
|
||||
@@ -27,8 +27,7 @@ namespace boost { namespace numeric { namespace ublas {
|
||||
// Base class Matrix Expressions - see the Barton Nackman trick
|
||||
template<class E>
|
||||
class matrix_expression:
|
||||
private nonassignable {
|
||||
//FIXME public expression_base<typename E::value_type> {
|
||||
public ublas_expression<E> {
|
||||
public:
|
||||
BOOST_STATIC_CONSTANT (unsigned, complexity = 0);
|
||||
typedef E expression_type;
|
||||
|
||||
@@ -27,20 +27,42 @@
|
||||
|
||||
namespace boost { namespace numeric { namespace ublas {
|
||||
|
||||
// Base class for linear algebra expression's numeric properties
|
||||
template<class T>
|
||||
class expression_base:
|
||||
private nonassignable {
|
||||
// Base class for uBLAS staticaly derived expressions - see the Barton Nackman trick
|
||||
// Provides numeric properties for linear algebra
|
||||
template<class E>
|
||||
class ublas_expression {
|
||||
public:
|
||||
typedef E expression_type;
|
||||
/* FIXME expression properties are undefined due to a template instantiation order problem
|
||||
typedef typename E::type_category type_category;
|
||||
typedef typename E::value_type value_type;
|
||||
*/
|
||||
|
||||
// Directly implement nonassignable - simplifes debugging call trace!
|
||||
protected:
|
||||
ublas_expression () {}
|
||||
~ublas_expression () {}
|
||||
private:
|
||||
const ublas_expression& operator= (const ublas_expression &);
|
||||
};
|
||||
|
||||
|
||||
// Base class for Scalar Expressions - see the Barton Nackman trick
|
||||
template<class E>
|
||||
class scalar_expression:
|
||||
public expression_base<E> {
|
||||
public ublas_expression<E> {
|
||||
public:
|
||||
typedef E expression_type;
|
||||
typedef scalar_tag type_category;
|
||||
|
||||
BOOST_UBLAS_INLINE
|
||||
const expression_type &operator () () const {
|
||||
return *static_cast<const expression_type *> (this);
|
||||
}
|
||||
BOOST_UBLAS_INLINE
|
||||
expression_type &operator () () {
|
||||
return *static_cast<expression_type *> (this);
|
||||
}
|
||||
};
|
||||
|
||||
template<class T>
|
||||
@@ -110,8 +132,7 @@ namespace boost { namespace numeric { namespace ublas {
|
||||
// Base class for Vector Expressions - see the Barton Nackman trick
|
||||
template<class E>
|
||||
class vector_expression:
|
||||
private nonassignable {
|
||||
//FIXME public expression_base<typename E::value_type> {
|
||||
public ublas_expression<E> {
|
||||
public:
|
||||
BOOST_STATIC_CONSTANT (unsigned, complexity = 0);
|
||||
typedef E expression_type;
|
||||
|
||||
Reference in New Issue
Block a user