/** | |
* -*- 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 <boost/numeric/ublas/traits.hpp> | |
#include <boost/numeric/ublas/traits/const_iterator_type.hpp> | |
#include <boost/numeric/ublas/traits/iterator_type.hpp> | |
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 matrix_type> 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<matrix_type> 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 vector_type> 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 |