123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- /**
- * -*- 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
|