]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/numeric/ublas/include/boost/numeric/ublas/traits/const_iterator_type.hpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / numeric / ublas / include / boost / numeric / ublas / traits / const_iterator_type.hpp
1 /**
2 * -*- c++ -*-
3 *
4 * \file const_iterator_type.hpp
5 *
6 * \brief Const iterator to a given container type.
7 *
8 * Copyright (c) 2009, Marco Guazzone
9 *
10 * Distributed under the Boost Software License, Version 1.0. (See
11 * accompanying file LICENSE_1_0.txt or copy at
12 * http://www.boost.org/LICENSE_1_0.txt)
13 *
14 * \author Marco Guazzone, marco.guazzone@gmail.com
15 */
16
17
18 #ifndef BOOST_NUMERIC_UBLAS_TRAITS_CONST_ITERATOR_TYPE_HPP
19 #define BOOST_NUMERIC_UBLAS_TRAITS_CONST_ITERATOR_TYPE_HPP
20
21
22 #include <boost/numeric/ublas/fwd.hpp>
23 #include <boost/numeric/ublas/tags.hpp>
24 #include <boost/numeric/ublas/traits.hpp>
25
26
27 namespace boost { namespace numeric { namespace ublas {
28
29 namespace detail {
30
31 /**
32 * \brief Auxiliary class for retrieving the const iterator to the given
33 * matrix expression according its orientation and to the given dimension tag.
34 * \tparam MatrixT A model of MatrixExpression.
35 * \tparam TagT A dimension tag type (e.g., tag::major).
36 * \tparam OrientationT An orientation category type (e.g., row_major_tag).
37 */
38 template <typename MatrixT, typename TagT, typename OrientationT>
39 struct const_iterator_type_impl;
40
41
42 /// \brief Specialization of \c const_iterator_type_impl for row-major oriented
43 /// matrices and over the major dimension.
44 template <typename MatrixT>
45 struct const_iterator_type_impl<MatrixT,tag::major,row_major_tag>
46 {
47 typedef typename matrix_view_traits<MatrixT>::const_iterator1 type;
48 };
49
50
51 /// \brief Specialization of \c const_iterator_type_impl for column-major
52 /// oriented matrices and over the major dimension.
53 template <typename MatrixT>
54 struct const_iterator_type_impl<MatrixT,tag::major,column_major_tag>
55 {
56 typedef typename matrix_view_traits<MatrixT>::const_iterator2 type;
57 };
58
59
60 /// \brief Specialization of \c const_iterator_type_impl for row-major oriented
61 /// matrices and over the minor dimension.
62 template <typename MatrixT>
63 struct const_iterator_type_impl<MatrixT,tag::minor,row_major_tag>
64 {
65 typedef typename matrix_view_traits<MatrixT>::const_iterator2 type;
66 };
67
68
69 /// \brief Specialization of \c const_iterator_type_impl for column-major
70 /// oriented matrices and over the minor dimension.
71 template <typename MatrixT>
72 struct const_iterator_type_impl<MatrixT,tag::minor,column_major_tag>
73 {
74 typedef typename matrix_view_traits<MatrixT>::const_iterator1 type;
75 };
76
77 } // Namespace detail
78
79
80 /**
81 * \brief A const iterator for the given container type over the given
82 * dimension.
83 * \tparam ContainerT A container expression type.
84 * \tparam TagT A dimension tag type (e.g., tag::major).
85 */
86 template <typename ContainerT, typename TagT=void>
87 struct const_iterator_type;
88
89
90 /**
91 * \brief Specialization of \c const_iterator_type for vector expressions.
92 * \tparam VectorT A model of VectorExpression type.
93 */
94 template <typename VectorT>
95 struct const_iterator_type<VectorT, void>
96 {
97 typedef typename vector_view_traits<VectorT>::const_iterator type;
98 };
99
100
101 /**
102 * \brief Specialization of \c const_iterator_type for matrix expressions and
103 * over the major dimension.
104 * \tparam MatrixT A model of MatrixExpression type.
105 */
106 template <typename MatrixT>
107 struct const_iterator_type<MatrixT,tag::major>
108 {
109 typedef typename detail::const_iterator_type_impl<MatrixT,tag::minor,typename matrix_view_traits<MatrixT>::orientation_category>::type type;
110 };
111
112
113 /**
114 * \brief Specialization of \c const_iterator_type for matrix expressions and
115 * over the minor dimension.
116 * \tparam MatrixT A model of MatrixExpression type.
117 */
118 template <typename MatrixT>
119 struct const_iterator_type<MatrixT,tag::minor>
120 {
121 typedef typename detail::const_iterator_type_impl<MatrixT,tag::minor,typename matrix_view_traits<MatrixT>::orientation_category>::type type;
122 };
123
124 }}} // Namespace boost::numeric::ublas
125
126
127 #endif // BOOST_NUMERIC_UBLAS_TRAITS_CONST_ITERATOR_TYPE_HPP