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 container_adaptor/detail/identity_converters.hpp
10/// \brief Value and iterators identity converters.
11
12#ifndef BOOST_BIMAP_CONTAINER_ADAPTOR_DETAIL_IDENTITY_CONVERTERS_HPP
13#define BOOST_BIMAP_CONTAINER_ADAPTOR_DETAIL_IDENTITY_CONVERTERS_HPP
14
15#if defined(_MSC_VER)
16#pragma once
17#endif
18
19#include <boost/config.hpp>
20
21namespace boost {
22namespace bimaps {
23namespace container_adaptor {
24
25/// \brief Details of the container adaptor toolbox
26
27namespace detail {
28
29/// \brief Iterator identity converter used by default in container adaptors.
30/**
31If Iterator and ConstIterator are of the same type one of the convert function is not
32included.
33 **/
34
35template
36<
37 class BaseIterator , class Iterator,
38 class BaseConstIterator , class ConstIterator
39>
40struct iterator_to_base_identity
41{
42 BaseIterator operator()(Iterator iter) const
43 {
44 return BaseIterator(iter);
45 }
46
47 BaseConstIterator operator()(ConstIterator iter) const
48 {
49 return BaseConstIterator(iter);
50 }
51};
52
53#ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
54
55template< class BaseIterator, class Iterator >
56struct iterator_to_base_identity<BaseIterator,Iterator,BaseIterator,Iterator>
57{
58 BaseIterator operator()(Iterator iter) const
59 {
60 return BaseIterator(iter);
61 }
62};
63
64#endif // BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
65
66/// \brief Iterator from base identity converter used by default in container adaptors.
67/**
68If Iterator and ConstIterator are of the same type one of the convert function is not
69included.
70 **/
71
72template
73<
74 class BaseIterator , class Iterator,
75 class BaseConstIterator , class ConstIterator
76>
77struct iterator_from_base_identity
78{
79 Iterator operator()(BaseIterator iter) const
80 {
81 return Iterator(iter);
82 }
83 ConstIterator operator()(BaseConstIterator iter) const
84 {
85 return ConstIterator(iter);
86 }
87};
88
89#ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
90
91template< class BaseIterator, class Iterator, class ConstIterator >
92struct iterator_from_base_identity<BaseIterator,Iterator,BaseIterator,ConstIterator>
93{
94 Iterator operator()(BaseIterator iter) const
95 {
96 return Iterator(iter);
97 }
98};
99
100#endif // BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
101
102/// \brief Value to base identity converter used by default in container adaptors.
103
104template< class BaseValue, class Value >
105struct value_to_base_identity
106{
107 BaseValue operator()(const Value & val) const
108 {
109 return BaseValue(val);
110 }
111};
112
113#ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
114
115template< class Value >
116struct value_to_base_identity< Value, Value >
117{
118 const Value & operator()(const Value & val) const
119 {
120 return val;
121 }
122};
123
124#endif // BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
125
126/// \brief Value from base identity converter used by default in container adaptors.
127
128template< class BaseValue, class Value >
129struct value_from_base_identity
130{
131 Value operator()(const BaseValue & val) const
132 {
133 return Value(val);
134 }
135};
136
137#ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
138
139template< class Value >
140struct value_from_base_identity<Value,Value>
141{
142 Value & operator()(Value & val) const
143 {
144 return val;
145 }
146
147 const Value & operator()(const Value & val) const
148 {
149 return val;
150 }
151};
152
153#endif // BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
154
155/// \brief Key to base identity converter used by default in container adaptors.
156
157template< class BaseKey, class Key >
158struct key_to_base_identity
159{
160 BaseKey operator()(const Key & k) const
161 {
162 return BaseKey(k);
163 }
164};
165
166#ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
167
168template< class Key >
169struct key_to_base_identity< Key, Key >
170{
171 // As default accept any type as key in order to allow container
172 // adaptors to work with compatible key types
173
174 template< class CompatibleKey >
175 const CompatibleKey & operator()(const CompatibleKey & k) const
176 {
177 return k;
178 }
179};
180
181#endif // BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES
182
183} // namespace detail
184} // namespace container_adaptor
185} // namespace bimaps
186} // namespace boost
187
188
189#endif // BOOST_BIMAP_CONTAINER_ADAPTOR_DETAIL_IDENTITY_CONVERTERS_HPP
190
191
192

source code of boost/boost/bimap/container_adaptor/detail/identity_converters.hpp