128 lines
4.3 KiB
C++
128 lines
4.3 KiB
C++
/**
|
|
* -*- c++ -*-
|
|
*
|
|
* \file const_iterator_type.hpp
|
|
*
|
|
* \brief Const iterator to a given container type.
|
|
*
|
|
* Copyright (c) 2009, Marco Guazzone
|
|
*
|
|
* 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 Marco Guazzone, marco.guazzone@gmail.com
|
|
*/
|
|
|
|
|
|
#ifndef BOOST_NUMERIC_UBLAS_TRAITS_CONST_ITERATOR_TYPE_HPP
|
|
#define BOOST_NUMERIC_UBLAS_TRAITS_CONST_ITERATOR_TYPE_HPP
|
|
|
|
|
|
#include <boost/numeric/ublas/fwd.hpp>
|
|
#include <boost/numeric/ublas/tags.hpp>
|
|
#include <boost/numeric/ublas/traits.hpp>
|
|
|
|
|
|
namespace boost { namespace numeric { namespace ublas {
|
|
|
|
namespace detail {
|
|
|
|
/**
|
|
* \brief Auxiliary class for retrieving the const iterator to the given
|
|
* matrix expression according its orientation and to the given dimension tag.
|
|
* \tparam MatrixT A model of MatrixExpression.
|
|
* \tparam TagT A dimension tag type (e.g., tag::major).
|
|
* \tparam OrientationT An orientation category type (e.g., row_major_tag).
|
|
*/
|
|
template <typename MatrixT, typename TagT, typename OrientationT>
|
|
struct const_iterator_type_impl;
|
|
|
|
|
|
/// \brief Specialization of \c const_iterator_type_impl for row-major oriented
|
|
/// matrices and over the major dimension.
|
|
template <typename MatrixT>
|
|
struct const_iterator_type_impl<MatrixT,tag::major,row_major_tag>
|
|
{
|
|
typedef typename matrix_view_traits<MatrixT>::const_iterator1 type;
|
|
};
|
|
|
|
|
|
/// \brief Specialization of \c const_iterator_type_impl for column-major
|
|
/// oriented matrices and over the major dimension.
|
|
template <typename MatrixT>
|
|
struct const_iterator_type_impl<MatrixT,tag::major,column_major_tag>
|
|
{
|
|
typedef typename matrix_view_traits<MatrixT>::const_iterator2 type;
|
|
};
|
|
|
|
|
|
/// \brief Specialization of \c const_iterator_type_impl for row-major oriented
|
|
/// matrices and over the minor dimension.
|
|
template <typename MatrixT>
|
|
struct const_iterator_type_impl<MatrixT,tag::minor,row_major_tag>
|
|
{
|
|
typedef typename matrix_view_traits<MatrixT>::const_iterator2 type;
|
|
};
|
|
|
|
|
|
/// \brief Specialization of \c const_iterator_type_impl for column-major
|
|
/// oriented matrices and over the minor dimension.
|
|
template <typename MatrixT>
|
|
struct const_iterator_type_impl<MatrixT,tag::minor,column_major_tag>
|
|
{
|
|
typedef typename matrix_view_traits<MatrixT>::const_iterator1 type;
|
|
};
|
|
|
|
} // Namespace detail
|
|
|
|
|
|
/**
|
|
* \brief A const iterator for the given container type over the given
|
|
* dimension.
|
|
* \tparam ContainerT A container expression type.
|
|
* \tparam TagT A dimension tag type (e.g., tag::major).
|
|
*/
|
|
template <typename ContainerT, typename TagT=void>
|
|
struct const_iterator_type;
|
|
|
|
|
|
/**
|
|
* \brief Specialization of \c const_iterator_type for vector expressions.
|
|
* \tparam VectorT A model of VectorExpression type.
|
|
*/
|
|
template <typename VectorT>
|
|
struct const_iterator_type<VectorT, void>
|
|
{
|
|
typedef typename vector_view_traits<VectorT>::const_iterator type;
|
|
};
|
|
|
|
|
|
/**
|
|
* \brief Specialization of \c const_iterator_type for matrix expressions and
|
|
* over the major dimension.
|
|
* \tparam MatrixT A model of MatrixExpression type.
|
|
*/
|
|
template <typename MatrixT>
|
|
struct const_iterator_type<MatrixT,tag::major>
|
|
{
|
|
typedef typename detail::const_iterator_type_impl<MatrixT,tag::minor,typename matrix_view_traits<MatrixT>::orientation_category>::type type;
|
|
};
|
|
|
|
|
|
/**
|
|
* \brief Specialization of \c const_iterator_type for matrix expressions and
|
|
* over the minor dimension.
|
|
* \tparam MatrixT A model of MatrixExpression type.
|
|
*/
|
|
template <typename MatrixT>
|
|
struct const_iterator_type<MatrixT,tag::minor>
|
|
{
|
|
typedef typename detail::const_iterator_type_impl<MatrixT,tag::minor,typename matrix_view_traits<MatrixT>::orientation_category>::type type;
|
|
};
|
|
|
|
}}} // Namespace boost::numeric::ublas
|
|
|
|
|
|
#endif // BOOST_NUMERIC_UBLAS_TRAITS_CONST_ITERATOR_TYPE_HPP
|