]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/bimap/include/boost/bimap/detail/set_view_iterator.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / bimap / include / boost / bimap / detail / set_view_iterator.hpp
CommitLineData
7c673cae
FG
1// Boost.Bimap
2//
3// Copyright (c) 2006-2007 Matias Capeletto
4//
5// Distributed under the Boost Software License, Version 1.0.
6// (See accompanying file LICENSE_1_0.txt or copy at
7// http://www.boost.org/LICENSE_1_0.txt)
8
9/// \file detail/set_view_iterator.hpp
10/// \brief Iterator adaptors from multi-index to bimap.
11
12#ifndef BOOST_BIMAP_DETAIL_SET_VIEW_ITERATOR_HPP
13#define BOOST_BIMAP_DETAIL_SET_VIEW_ITERATOR_HPP
14
15#if defined(_MSC_VER)
16#pragma once
17#endif
18
19#include <boost/config.hpp>
20
21// Boost
22
23#ifndef BOOST_BIMAP_DISABLE_SERIALIZATION
24 #include <boost/serialization/nvp.hpp>
25#endif // BOOST_BIMAP_DISABLE_SERIALIZATION
26
27#include <boost/iterator/detail/enable_if.hpp>
28#include <boost/iterator/iterator_adaptor.hpp>
29#include <boost/bimap/relation/support/get_pair_functor.hpp>
30
31namespace boost {
32namespace bimaps {
33namespace detail {
34
35
36/** \brief Set View Iterator adaptor from multi index to bimap.
37
38This is class is based on transform iterator from Boost.Iterator that is
39modified to allow serialization. It has been specialized for this
40library, and EBO optimization was applied to the functor.
41
42 **/
43
44#ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
45
46template< class CoreIterator > struct set_view_iterator;
47
48template< class CoreIterator >
49struct set_view_iterator_base
50{
51 typedef iterator_adaptor
52 <
53 set_view_iterator< CoreIterator >,
54 CoreIterator,
55 BOOST_DEDUCED_TYPENAME CoreIterator::value_type::above_view
56
57 > type;
58};
59
60#endif // BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
61
62template< class CoreIterator >
63struct set_view_iterator : public set_view_iterator_base<CoreIterator>::type
64{
65 typedef BOOST_DEDUCED_TYPENAME set_view_iterator_base<CoreIterator>::type base_;
66
67 public:
68
69 set_view_iterator() {}
70
71 set_view_iterator(CoreIterator const& iter)
72 : base_(iter) {}
73
74 set_view_iterator(set_view_iterator const & iter)
75 : base_(iter.base()) {}
76
77 typename base_::reference dereference() const
78 {
79 return const_cast<
80 BOOST_DEDUCED_TYPENAME base_::base_type::value_type*>(
81 &(*this->base())
82 )->get_view();
83 }
84
85 private:
86
87 friend class iterator_core_access;
88
89 #ifndef BOOST_BIMAP_DISABLE_SERIALIZATION
90
91 // Serialization support
92
93 BOOST_SERIALIZATION_SPLIT_MEMBER()
94
95 friend class ::boost::serialization::access;
96
97 template< class Archive >
98 void save(Archive & ar, const unsigned int) const
99 {
100 ar << ::boost::serialization::make_nvp("mi_iterator",this->base());
101 }
102
103 template< class Archive >
104 void load(Archive & ar, const unsigned int)
105 {
106 CoreIterator iter;
107 ar >> ::boost::serialization::make_nvp("mi_iterator",iter);
108 this->base_reference() = iter;
109 }
110
111 #endif // BOOST_BIMAP_DISABLE_SERIALIZATION
112};
113
114#ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
115
116template< class CoreIterator > struct const_set_view_iterator;
117
118template< class CoreIterator >
119struct const_set_view_iterator_base
120{
121 typedef iterator_adaptor
122 <
123 const_set_view_iterator< CoreIterator >,
124 CoreIterator,
125 const BOOST_DEDUCED_TYPENAME CoreIterator::value_type::above_view
126
127 > type;
128};
129
130#endif // BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
131
132
133/** \brief Const Set View Iterator adaptor from multi index to bimap.
134
135See also set_view_iterator.
136 **/
137
138template< class CoreIterator >
139struct const_set_view_iterator : public const_set_view_iterator_base<CoreIterator>::type
140{
141 typedef BOOST_DEDUCED_TYPENAME const_set_view_iterator_base<CoreIterator>::type base_;
142
143 public:
144
145 const_set_view_iterator() {}
146
147 const_set_view_iterator(CoreIterator const& iter)
148 : base_(iter) {}
149
150 const_set_view_iterator(const_set_view_iterator const & iter)
151 : base_(iter.base()) {}
152
153 const_set_view_iterator(set_view_iterator<CoreIterator> i)
154 : base_(i.base()) {}
155
156 BOOST_DEDUCED_TYPENAME base_::reference dereference() const
157 {
158 return this->base()->get_view();
159 }
160
161 private:
162
163 friend class iterator_core_access;
164
165 #ifndef BOOST_BIMAP_DISABLE_SERIALIZATION
166
167 // Serialization support
168
169 BOOST_SERIALIZATION_SPLIT_MEMBER()
170
171 friend class ::boost::serialization::access;
172
173 template< class Archive >
174 void save(Archive & ar, const unsigned int) const
175 {
176 ar << ::boost::serialization::make_nvp("mi_iterator",this->base());
177 }
178
179 template< class Archive >
180 void load(Archive & ar, const unsigned int)
181 {
182 CoreIterator iter;
183 ar >> ::boost::serialization::make_nvp("mi_iterator",iter);
184 this->base_reference() = iter;
185 }
186
187 #endif // BOOST_BIMAP_DISABLE_SERIALIZATION
188};
189
190
191} // namespace detail
192} // namespace bimaps
193} // namespace boost
194
195#endif // BOOST_BIMAP_DETAIL_MAP_VIEW_ITERATOR_HPP
196
197