Chris@16: /** Chris@16: * -*- c++ -*- Chris@16: * Chris@16: * \file c_array.hpp Chris@16: * Chris@16: * \brief provides specializations of matrix and vector traits for c arrays and c matrices. Chris@16: * Chris@16: * Copyright (c) 2009, Gunter Winkler Chris@16: * Chris@16: * Distributed under the Boost Software License, Version 1.0. (See Chris@16: * accompanying file LICENSE_1_0.txt or copy at Chris@16: * http://www.boost.org/LICENSE_1_0.txt) Chris@16: * Chris@16: * \author Gunter Winkler (guwi17 at gmx dot de) Chris@16: */ Chris@16: Chris@16: #ifndef BOOST_NUMERIC_UBLAS_TRAITS_C_ARRAY_HPP Chris@16: #define BOOST_NUMERIC_UBLAS_TRAITS_C_ARRAY_HPP Chris@16: Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { namespace numeric { namespace ublas { Chris@16: Chris@16: namespace detail { Chris@16: Chris@16: Chris@16: Chris@16: } Chris@16: Chris@16: Chris@16: template < class T, int M, int N > Chris@16: struct matrix_view_traits < T[M][N] > { Chris@16: typedef T matrix_type[M][N]; Chris@16: Chris@16: typedef std::size_t size_type; Chris@16: typedef std::ptrdiff_t difference_type; Chris@16: Chris@16: typedef row_major_tag orientation_category; Chris@16: typedef dense_tag storage_category; Chris@16: Chris@16: typedef T value_type; Chris@16: typedef const T &const_reference; Chris@16: typedef const T *const_pointer; Chris@16: Chris@16: typedef const matrix_reference const_closure_type; Chris@16: Chris@16: typedef T row_type[N]; Chris@16: Chris@16: typedef const row_type *const_iterator1; Chris@16: typedef const_pointer const_iterator2; Chris@16: Chris@16: }; Chris@16: Chris@16: template < class T, int M, int N > Chris@16: struct mutable_matrix_traits < T[M][N] > { Chris@16: typedef T matrix_type[M][N]; Chris@16: Chris@16: typedef T *reference; Chris@16: Chris@16: typedef matrix_reference closure_type; Chris@16: Chris@16: }; Chris@16: Chris@16: template < class T, int N > Chris@16: struct vector_view_traits < T[N] > { Chris@16: typedef T vector_type[N]; Chris@16: Chris@16: typedef std::size_t size_type; Chris@16: typedef std::ptrdiff_t difference_type; Chris@16: Chris@16: typedef dense_tag storage_category; Chris@16: Chris@16: typedef T value_type; Chris@16: typedef const T &const_reference; Chris@16: typedef const T *const_pointer; Chris@16: Chris@16: typedef const vector_reference const_closure_type; Chris@16: Chris@16: typedef const_pointer const_iterator; Chris@16: Chris@16: /// iterator pointing to the first element Chris@16: static Chris@16: const_iterator begin(const vector_type & v) { Chris@16: return & (v[0]); Chris@16: } Chris@16: /// iterator pointing behind the last element Chris@16: static Chris@16: const_iterator end(const vector_type & v) { Chris@16: return & (v[N]); Chris@16: } Chris@16: }; Chris@16: Chris@16: template < class T, int N > Chris@16: struct mutable_vector_traits < T[N] > { Chris@16: Chris@16: typedef T &reference; Chris@16: typedef T *pointer; Chris@16: typedef vector_reference< T[N] > closure_type; Chris@16: Chris@16: }; Chris@16: Chris@16: Chris@16: Chris@16: Chris@16: }}} // Namespace boost::numeric::ublas Chris@16: Chris@16: #endif