/** * -*- 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