diff --git a/include/boost/numeric/ublas/traits.hpp b/include/boost/numeric/ublas/traits.hpp index e08c517c..acfaa7ad 100644 --- a/include/boost/numeric/ublas/traits.hpp +++ b/include/boost/numeric/ublas/traits.hpp @@ -647,64 +647,7 @@ namespace boost { namespace numeric { namespace ublas { }; - - 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 closure_type; - typedef const matrix_reference const_closure_type; - - // \todo { define appropriate iterators } - }; - - template < class T, int N > - struct vector_view_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 const T *const_reference; - - // \todo { define correct wrapper } - typedef const vector_reference const_closure_type; - - typedef const_reference const_iterator; - - /// iterator pointing to the first element - static - const_iterator begin(const vector_type & v) { - return & (v[0]); - } - /// iterator pointing behind the last element - static - const_iterator end(const vector_type & v) { - return & (v[N]); - } - }; - - template < class T, int N > - struct mutable_vector_traits < T[N] > { - - typedef T *reference; - typedef vector_reference< T[N] > closure_type; - - }; + // Note: specializations for T[N] and T[M][N] have been moved to traits/c_array.hpp }}} diff --git a/include/boost/numeric/ublas/traits/c_array.hpp b/include/boost/numeric/ublas/traits/c_array.hpp new file mode 100644 index 00000000..7c571fc0 --- /dev/null +++ b/include/boost/numeric/ublas/traits/c_array.hpp @@ -0,0 +1,110 @@ +/** + * -*- c++ -*- + * + * \file c_array.hpp + * + * \brief provides specializations of matrix and vector traits for c arrays and c matrices. + * + * Copyright (c) 2009, Gunter Winkler + * + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * \author Gunter Winkler (guwi17 at gmx dot de) + */ + +#ifndef BOOST_NUMERIC_UBLAS_TRAITS_C_ARRAY_HPP +#define BOOST_NUMERIC_UBLAS_TRAITS_C_ARRAY_HPP + + +#include +#include +#include + +namespace boost { namespace numeric { namespace ublas { + + namespace detail { + + + + } + + + template < class T, int M, int N > + struct matrix_view_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 const T &const_reference; + typedef const T *const_pointer; + + typedef const matrix_reference const_closure_type; + + typedef T row_type[N]; + + typedef const row_type *const_iterator1; + typedef const_pointer const_iterator2; + + }; + + template < class T, int M, int N > + struct mutable_matrix_traits < T[M][N] > { + typedef T matrix_type[M][N]; + + typedef T *reference; + + typedef matrix_reference closure_type; + + }; + + template < class T, int N > + struct vector_view_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 const T &const_reference; + typedef const T *const_pointer; + + typedef const vector_reference const_closure_type; + + typedef const_pointer const_iterator; + + /// iterator pointing to the first element + static + const_iterator begin(const vector_type & v) { + return & (v[0]); + } + /// iterator pointing behind the last element + static + const_iterator end(const vector_type & v) { + return & (v[N]); + } + }; + + template < class T, int N > + struct mutable_vector_traits < T[N] > { + + typedef T &reference; + typedef T *pointer; + typedef vector_reference< T[N] > closure_type; + + }; + + + + +}}} // Namespace boost::numeric::ublas + +#endif