You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
110 lines
2.8 KiB
110 lines
2.8 KiB
/** |
|
* -*- 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
|
|
|