Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r80952 - in sandbox/numeric_bindings: boost/numeric/bindings boost/numeric/bindings/blas/level2 boost/numeric/bindings/blas/level3 libs/numeric/bindings/tools
From: rutger_at_[hidden]
Date: 2012-10-11 03:02:21


Author: rutger
Date: 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
New Revision: 80952
URL: http://svn.boost.org/trac/boost/changeset/80952

Log:
added support for static asserting compatibility of data structures passed to blas routines

Text files modified:
   sandbox/numeric_bindings/boost/numeric/bindings/begin.hpp | 2 +-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gbmv.hpp | 2 +-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gemv.hpp | 1 +
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/ger.hpp | 1 +
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gerc.hpp | 1 +
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/geru.hpp | 1 +
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hbmv.hpp | 2 +-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hemv.hpp | 1 +
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her.hpp | 1 +
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her2.hpp | 1 +
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpmv.hpp | 3 +++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr.hpp | 3 +++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr2.hpp | 3 +++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/sbmv.hpp | 2 +-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spmv.hpp | 3 +++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr.hpp | 3 +++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr2.hpp | 3 +++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/symv.hpp | 1 +
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr.hpp | 1 +
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr2.hpp | 1 +
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbmv.hpp | 2 +-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbsv.hpp | 2 +-
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpmv.hpp | 3 +++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpsv.hpp | 3 +++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trmv.hpp | 1 +
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trsv.hpp | 1 +
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/gemm.hpp | 4 ++++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/hemm.hpp | 4 ++++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/her2k.hpp | 4 ++++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/herk.hpp | 3 +++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/symm.hpp | 4 ++++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syr2k.hpp | 4 ++++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syrk.hpp | 3 +++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trmm.hpp | 3 +++
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trsm.hpp | 3 +++
   sandbox/numeric_bindings/boost/numeric/bindings/end.hpp | 2 +-
   sandbox/numeric_bindings/libs/numeric/bindings/tools/blas_generator.py | 36 +++++++++++++++++++++++-------------
   37 files changed, 98 insertions(+), 20 deletions(-)

Modified: sandbox/numeric_bindings/boost/numeric/bindings/begin.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/begin.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/begin.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -46,7 +46,7 @@
> result_type;
 
     static result_type invoke( T& t ) {
- return result_type( begin_value( t ), stride(t, tag_type() ) );
+ return result_type( adaptor_access<T>::begin_value( t ), bindings::stride(t, tag_type() ) );
     }
 };
 

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gbmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gbmv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gbmv.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -286,9 +286,9 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 VectorY >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_band_array< MatrixA >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorY >::value) );
- BOOST_STATIC_ASSERT( (bindings::has_band_array< MatrixA >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorY >::value) );
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||
                 bindings::stride_minor(a) == 1 );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gemv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gemv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gemv.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -281,6 +281,7 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 VectorY >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorY >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorY >::value) );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/ger.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/ger.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/ger.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -172,6 +172,7 @@
                 typename bindings::value_type< VectorX >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixA >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorY >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixA >::value) );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gerc.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gerc.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gerc.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -178,6 +178,7 @@
                 typename bindings::value_type< VectorX >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixA >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorY >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixA >::value) );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/geru.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/geru.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/geru.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -178,6 +178,7 @@
                 typename bindings::value_type< VectorX >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixA >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorY >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixA >::value) );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hbmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hbmv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hbmv.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -276,9 +276,9 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 VectorY >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_band_array< MatrixA >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorY >::value) );
- BOOST_STATIC_ASSERT( (bindings::has_band_array< MatrixA >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorY >::value) );
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||
                 bindings::stride_minor(a) == 1 );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hemv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hemv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hemv.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -272,6 +272,7 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 VectorY >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorY >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorY >::value) );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -244,6 +244,7 @@
                 typename bindings::value_type< VectorX >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixA >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixA >::value) );
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her2.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her2.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her2.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -268,6 +268,7 @@
                 typename bindings::value_type< VectorX >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixA >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorY >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixA >::value) );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpmv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpmv.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -18,6 +18,7 @@
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/data_order.hpp>
 #include <boost/numeric/bindings/has_linear_array.hpp>
+#include <boost/numeric/bindings/has_triangular_array.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
 #include <boost/numeric/bindings/size.hpp>
@@ -272,6 +273,8 @@
                 typename bindings::value_type< MatrixAP >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 VectorY >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_triangular_array<
+ MatrixAP >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorY >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorY >::value) );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -18,6 +18,7 @@
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/data_order.hpp>
 #include <boost/numeric/bindings/has_linear_array.hpp>
+#include <boost/numeric/bindings/has_triangular_array.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
 #include <boost/numeric/bindings/size.hpp>
@@ -242,6 +243,8 @@
                 typename bindings::value_type< VectorX >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixAP >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_triangular_array<
+ MatrixAP >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixAP >::value) );
         detail::hpr( order(), uplo(), bindings::size_column(ap), alpha,

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr2.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr2.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr2.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -18,6 +18,7 @@
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/data_order.hpp>
 #include <boost/numeric/bindings/has_linear_array.hpp>
+#include <boost/numeric/bindings/has_triangular_array.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
 #include <boost/numeric/bindings/size.hpp>
@@ -260,6 +261,8 @@
                 typename bindings::value_type< VectorX >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixAP >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_triangular_array<
+ MatrixAP >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorY >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixAP >::value) );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/sbmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/sbmv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/sbmv.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -180,9 +180,9 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 VectorY >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_band_array< MatrixA >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorY >::value) );
- BOOST_STATIC_ASSERT( (bindings::has_band_array< MatrixA >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorY >::value) );
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||
                 bindings::stride_minor(a) == 1 );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spmv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spmv.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -18,6 +18,7 @@
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/data_order.hpp>
 #include <boost/numeric/bindings/has_linear_array.hpp>
+#include <boost/numeric/bindings/has_triangular_array.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
 #include <boost/numeric/bindings/size.hpp>
@@ -178,6 +179,8 @@
                 typename bindings::value_type< MatrixAP >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 VectorY >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_triangular_array<
+ MatrixAP >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorY >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorY >::value) );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -18,6 +18,7 @@
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/data_order.hpp>
 #include <boost/numeric/bindings/has_linear_array.hpp>
+#include <boost/numeric/bindings/has_triangular_array.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
 #include <boost/numeric/bindings/size.hpp>
@@ -164,6 +165,8 @@
                 typename bindings::value_type< VectorX >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixAP >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_triangular_array<
+ MatrixAP >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixAP >::value) );
         detail::spr( order(), uplo(), bindings::size_column(ap), alpha,

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr2.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr2.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr2.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -18,6 +18,7 @@
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/data_order.hpp>
 #include <boost/numeric/bindings/has_linear_array.hpp>
+#include <boost/numeric/bindings/has_triangular_array.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
 #include <boost/numeric/bindings/size.hpp>
@@ -174,6 +175,8 @@
                 typename bindings::value_type< VectorX >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixAP >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_triangular_array<
+ MatrixAP >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorY >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixAP >::value) );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/symv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/symv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/symv.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -178,6 +178,7 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 VectorY >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorY >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorY >::value) );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -164,6 +164,7 @@
                 typename bindings::value_type< VectorX >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixA >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixA >::value) );
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr2.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr2.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr2.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -178,6 +178,7 @@
                 typename bindings::value_type< VectorX >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixA >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorY >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixA >::value) );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbmv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbmv.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -266,8 +266,8 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 VectorX >::type >::type >::value) );
- BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_band_array< MatrixA >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorX >::value) );
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||
                 bindings::stride_minor(a) == 1 );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbsv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbsv.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -266,8 +266,8 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 VectorX >::type >::type >::value) );
- BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_band_array< MatrixA >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorX >::value) );
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||
                 bindings::stride_minor(a) == 1 );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpmv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpmv.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -19,6 +19,7 @@
 #include <boost/numeric/bindings/blas/detail/default_order.hpp>
 #include <boost/numeric/bindings/diag_tag.hpp>
 #include <boost/numeric/bindings/has_linear_array.hpp>
+#include <boost/numeric/bindings/has_triangular_array.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
 #include <boost/numeric/bindings/size.hpp>
@@ -257,6 +258,8 @@
                 typename bindings::value_type< MatrixAP >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 VectorX >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_triangular_array<
+ MatrixAP >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorX >::value) );
         detail::tpmv( order(), uplo(), trans(), diag(),

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpsv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpsv.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -19,6 +19,7 @@
 #include <boost/numeric/bindings/blas/detail/default_order.hpp>
 #include <boost/numeric/bindings/diag_tag.hpp>
 #include <boost/numeric/bindings/has_linear_array.hpp>
+#include <boost/numeric/bindings/has_triangular_array.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
 #include <boost/numeric/bindings/size.hpp>
@@ -257,6 +258,8 @@
                 typename bindings::value_type< MatrixAP >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 VectorX >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_triangular_array<
+ MatrixAP >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorX >::value) );
         detail::tpsv( order(), uplo(), trans(), diag(),

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trmv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trmv.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -263,6 +263,7 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 VectorX >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorX >::value) );
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trsv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trsv.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -263,6 +263,7 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 VectorX >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
         BOOST_STATIC_ASSERT( (bindings::has_linear_array< VectorX >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorX >::value) );
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/gemm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/gemm.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/gemm.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/data_order.hpp>
+#include <boost/numeric/bindings/has_linear_array.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
 #include <boost/numeric/bindings/size.hpp>
@@ -288,6 +289,9 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixC >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixB >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixC >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixC >::value) );
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||
                 bindings::stride_minor(a) == 1 );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/hemm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/hemm.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/hemm.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/data_order.hpp>
+#include <boost/numeric/bindings/has_linear_array.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
 #include <boost/numeric/bindings/size.hpp>
@@ -287,6 +288,9 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixC >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixB >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixC >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixC >::value) );
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||
                 bindings::stride_minor(a) == 1 );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/her2k.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/her2k.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/her2k.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/data_order.hpp>
+#include <boost/numeric/bindings/has_linear_array.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
 #include <boost/numeric/bindings/size.hpp>
@@ -285,6 +286,9 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixC >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixB >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixC >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixC >::value) );
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||
                 bindings::stride_minor(a) == 1 );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/herk.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/herk.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/herk.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/data_order.hpp>
+#include <boost/numeric/bindings/has_linear_array.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
 #include <boost/numeric/bindings/size.hpp>
@@ -263,6 +264,8 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixC >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixC >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixC >::value) );
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||
                 bindings::stride_minor(a) == 1 );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/symm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/symm.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/symm.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/data_order.hpp>
+#include <boost/numeric/bindings/has_linear_array.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
 #include <boost/numeric/bindings/size.hpp>
@@ -287,6 +288,9 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixC >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixB >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixC >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixC >::value) );
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||
                 bindings::stride_minor(a) == 1 );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syr2k.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syr2k.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syr2k.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/data_order.hpp>
+#include <boost/numeric/bindings/has_linear_array.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
 #include <boost/numeric/bindings/size.hpp>
@@ -289,6 +290,9 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixC >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixB >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixC >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixC >::value) );
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||
                 bindings::stride_minor(a) == 1 );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syrk.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syrk.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syrk.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/data_order.hpp>
+#include <boost/numeric/bindings/has_linear_array.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
 #include <boost/numeric/bindings/size.hpp>
@@ -271,6 +272,8 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixC >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixC >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixC >::value) );
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||
                 bindings::stride_minor(a) == 1 );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trmm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trmm.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trmm.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -18,6 +18,7 @@
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/data_order.hpp>
 #include <boost/numeric/bindings/diag_tag.hpp>
+#include <boost/numeric/bindings/has_linear_array.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
 #include <boost/numeric/bindings/size.hpp>
@@ -291,6 +292,8 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixB >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixB >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixB >::value) );
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||
                 bindings::stride_minor(a) == 1 );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trsm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trsm.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trsm.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -18,6 +18,7 @@
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/data_order.hpp>
 #include <boost/numeric/bindings/diag_tag.hpp>
+#include <boost/numeric/bindings/has_linear_array.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
 #include <boost/numeric/bindings/size.hpp>
@@ -291,6 +292,8 @@
                 typename bindings::value_type< MatrixA >::type >::type,
                 typename remove_const< typename bindings::value_type<
                 MatrixB >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixA >::value) );
+ BOOST_STATIC_ASSERT( (bindings::has_linear_array< MatrixB >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixB >::value) );
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||
                 bindings::stride_minor(a) == 1 );

Modified: sandbox/numeric_bindings/boost/numeric/bindings/end.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/end.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/end.hpp 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -40,7 +40,7 @@
> result_type;
 
     static result_type invoke( T& t ) {
- return result_type( end_value( t ), stride(t, tag_type() ) );
+ return result_type( adaptor_access<T>::end_value( t ), stride(t, tag_type() ) );
     }
 };
 

Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/blas_generator.py
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/blas_generator.py (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/blas_generator.py 2012-10-11 03:02:13 EDT (Thu, 11 Oct 2012)
@@ -337,18 +337,6 @@
                 level1_static_assert_list += [ assert_line ]
 
       #
- # Vectors should have linear arrays
- #
- if 'vector' in info_map[ subroutine ][ 'grouped_arguments' ][ 'by_type' ]:
- for vector_id in info_map[ subroutine ][ 'grouped_arguments' ][ 'by_type' ][ 'vector' ]:
- info_map_item = info_map[ subroutine ][ 'argument_map' ][ vector_id ]
- if 'ref_stride' in info_map_item and info_map_item[ 'code' ][ 'level_1_type' ] != None:
- assert_line = 'BOOST_STATIC_ASSERT( ($NAMESPACEhas_linear_array< ' + info_map_item[ 'code' ][ 'level_1_static_assert' ] + \
- ' >::value) );'
- level1_static_assert_list += [ assert_line ]
- includes += [ "#include <boost/numeric/bindings/has_linear_array.hpp>" ]
-
- #
       # Matrices should adhere to their storage scheme
       #
       if 'matrix' in info_map[ subroutine ][ 'grouped_arguments' ][ 'by_type' ]:
@@ -360,7 +348,29 @@
                     ' >::value) );'
                   level1_static_assert_list += [ assert_line ]
                   includes += [ "#include <boost/numeric/bindings/has_band_array.hpp>" ]
-
+ elif 'packed' in info_map_item and info_map_item[ 'packed' ] == True and \
+ info_map_item[ 'code' ][ 'level_1_type' ] != None:
+ assert_line = 'BOOST_STATIC_ASSERT( ($NAMESPACEhas_triangular_array< ' + info_map_item[ 'code' ][ 'level_1_static_assert' ] + \
+ ' >::value) );'
+ level1_static_assert_list += [ assert_line ]
+ includes += [ "#include <boost/numeric/bindings/has_triangular_array.hpp>" ]
+ elif info_map_item[ 'code' ][ 'level_1_type' ] != None:
+ assert_line = 'BOOST_STATIC_ASSERT( ($NAMESPACEhas_linear_array< ' + info_map_item[ 'code' ][ 'level_1_static_assert' ] + \
+ ' >::value) );'
+ level1_static_assert_list += [ assert_line ]
+ includes += [ "#include <boost/numeric/bindings/has_linear_array.hpp>" ]
+
+ #
+ # Vectors should have linear arrays
+ #
+ if 'vector' in info_map[ subroutine ][ 'grouped_arguments' ][ 'by_type' ]:
+ for vector_id in info_map[ subroutine ][ 'grouped_arguments' ][ 'by_type' ][ 'vector' ]:
+ info_map_item = info_map[ subroutine ][ 'argument_map' ][ vector_id ]
+ if 'ref_stride' in info_map_item and info_map_item[ 'code' ][ 'level_1_type' ] != None:
+ assert_line = 'BOOST_STATIC_ASSERT( ($NAMESPACEhas_linear_array< ' + info_map_item[ 'code' ][ 'level_1_static_assert' ] + \
+ ' >::value) );'
+ level1_static_assert_list += [ assert_line ]
+ includes += [ "#include <boost/numeric/bindings/has_linear_array.hpp>" ]
                 
       # Make sure the mutable stuff is mutable
       if 'output' in info_map[ subroutine ][ 'grouped_arguments' ][ 'by_io' ]:


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