]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/bimap/include/boost/bimap/container_adaptor/vector_adaptor.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / bimap / include / boost / bimap / container_adaptor / vector_adaptor.hpp
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/vector_adaptor.hpp
10 /// \brief Container adaptor to easily build a std::vector signature compatible container.
11
12 #ifndef BOOST_BIMAP_CONTAINER_ADAPTOR_VECTOR_ADAPTOR_HPP
13 #define BOOST_BIMAP_CONTAINER_ADAPTOR_VECTOR_ADAPTOR_HPP
14
15 #if defined(_MSC_VER)
16 #pragma once
17 #endif
18
19 #include <boost/config.hpp>
20
21 #include <boost/bimap/container_adaptor/sequence_container_adaptor.hpp>
22 #include <boost/mpl/aux_/na.hpp>
23 #include <boost/mpl/vector.hpp>
24
25 namespace boost {
26 namespace bimaps {
27 namespace container_adaptor {
28
29 /// \brief Container adaptor to easily build a std::vector signature compatible container.
30
31 template
32 <
33 class Base,
34
35 class Iterator,
36 class ConstIterator,
37 class ReverseIterator,
38 class ConstReverseIterator,
39
40 class IteratorToBaseConverter = ::boost::mpl::na,
41 class IteratorFromBaseConverter = ::boost::mpl::na,
42 class ReverseIteratorFromBaseConverter = ::boost::mpl::na,
43 class ValueToBaseConverter = ::boost::mpl::na,
44 class ValueFromBaseConverter = ::boost::mpl::na,
45
46 class FunctorsFromDerivedClasses = mpl::vector<>
47 >
48 class vector_adaptor :
49
50 public ::boost::bimaps::container_adaptor::sequence_container_adaptor
51 <
52 Base,
53 Iterator, ConstIterator, ReverseIterator, ConstReverseIterator,
54 IteratorToBaseConverter, IteratorFromBaseConverter,
55 ReverseIteratorFromBaseConverter,
56 ValueToBaseConverter, ValueFromBaseConverter,
57 FunctorsFromDerivedClasses
58 >
59 {
60
61 typedef ::boost::bimaps::container_adaptor::sequence_container_adaptor
62 <
63 Base,
64 Iterator, ConstIterator, ReverseIterator, ConstReverseIterator,
65 IteratorToBaseConverter, IteratorFromBaseConverter,
66 ReverseIteratorFromBaseConverter,
67 ValueToBaseConverter, ValueFromBaseConverter,
68 FunctorsFromDerivedClasses
69
70 > base_;
71
72 // Access -----------------------------------------------------------------
73
74 public:
75
76 vector_adaptor() {}
77
78 explicit vector_adaptor(Base & c) :
79 base_(c) {}
80
81 protected:
82
83 typedef vector_adaptor vector_adaptor_;
84
85 // Interface --------------------------------------------------------------
86
87 public:
88
89 BOOST_DEDUCED_TYPENAME base_::size_type capacity() const
90 {
91 return this->base().capacity();
92 }
93
94 void reserve(BOOST_DEDUCED_TYPENAME base_::size_type m)
95 {
96 this->base().resize(m);
97 }
98
99 void resize(BOOST_DEDUCED_TYPENAME base_::size_type n,
100 BOOST_DEDUCED_TYPENAME ::boost::call_traits<
101 BOOST_DEDUCED_TYPENAME base_::value_type >::param_type x =
102 BOOST_DEDUCED_TYPENAME base_::value_type())
103 {
104 this->base().resize(n,
105 this->template functor<BOOST_DEDUCED_TYPENAME base_::value_to_base>()(x)
106 );
107 }
108
109 BOOST_DEDUCED_TYPENAME base_::const_reference
110 operator[](BOOST_DEDUCED_TYPENAME base_::size_type n) const
111 {
112 return this->template functor<BOOST_DEDUCED_TYPENAME base_::value_from_base>()(
113 this->base().operator[](n)
114 );
115 }
116
117 BOOST_DEDUCED_TYPENAME base_::const_reference
118 at(BOOST_DEDUCED_TYPENAME base_::size_type n) const
119 {
120 return this->template functor<BOOST_DEDUCED_TYPENAME base_::value_from_base>()(
121 this->base().at(n)
122 );
123 }
124
125 BOOST_DEDUCED_TYPENAME base_::reference
126 operator[](BOOST_DEDUCED_TYPENAME base_::size_type n)
127 {
128 return this->template functor<BOOST_DEDUCED_TYPENAME base_::value_from_base>()(
129 this->base().operator[](n)
130 );
131 }
132
133 BOOST_DEDUCED_TYPENAME base_::reference
134 at(BOOST_DEDUCED_TYPENAME base_::size_type n)
135 {
136 return this->template functor<BOOST_DEDUCED_TYPENAME base_::value_from_base>()(
137 this->base().at(n)
138 );
139 }
140 };
141
142
143 } // namespace container_adaptor
144 } // namespace bimaps
145 } // namespace boost
146
147
148 #endif // BOOST_BIMAP_CONTAINER_ADAPTOR_VECTOR_ADAPTOR_HPP
149
150