111 lines
2.9 KiB
C++
111 lines
2.9 KiB
C++
/**
|
|
* -*- 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
|