]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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 |