1 /*=============================================================================
2     Copyright (c) 2001-2011 Joel de Guzman
3 
4     Distributed under the Boost Software License, Version 1.0. (See accompanying
5     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 ==============================================================================*/
7 #if !defined(FUSION_MAP_07212005_1106)
8 #define FUSION_MAP_07212005_1106
9 
10 #include <boost/fusion/support/config.hpp>
11 #include <boost/fusion/support/pair.hpp>
12 #include <boost/fusion/support/category_of.hpp>
13 #include <boost/fusion/support/detail/access.hpp>
14 #include <boost/fusion/container/map/detail/cpp03/map_fwd.hpp>
15 #include <boost/fusion/container/map/detail/cpp03/at_impl.hpp>
16 #include <boost/fusion/container/map/detail/cpp03/value_at_impl.hpp>
17 #include <boost/fusion/container/map/detail/cpp03/begin_impl.hpp>
18 #include <boost/fusion/container/map/detail/cpp03/end_impl.hpp>
19 #include <boost/fusion/container/map/detail/cpp03/value_of_impl.hpp>
20 #include <boost/fusion/container/map/detail/cpp03/deref_data_impl.hpp>
21 #include <boost/fusion/container/map/detail/cpp03/deref_impl.hpp>
22 #include <boost/fusion/container/map/detail/cpp03/key_of_impl.hpp>
23 #include <boost/fusion/container/map/detail/cpp03/value_of_data_impl.hpp>
24 #include <boost/fusion/container/vector/vector.hpp>
25 #include <boost/mpl/identity.hpp>
26 #include <boost/mpl/bool.hpp>
27 #include <boost/preprocessor/iterate.hpp>
28 #include <boost/preprocessor/repetition/enum_params.hpp>
29 #include <boost/preprocessor/repetition/enum_binary_params.hpp>
30 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \
31     defined(BOOST_MSVC) && (BOOST_MSVC == 1700)
32 // see map_forward_ctor.hpp
33 #include <boost/core/enable_if.hpp>
34 #include <boost/type_traits/is_same.hpp>
35 #endif
36 
37 #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
38 #include <boost/fusion/container/map/detail/cpp03/preprocessed/map.hpp>
39 #else
40 #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
41 #pragma wave option(preserve: 2, line: 0, output: "preprocessed/map" FUSION_MAX_MAP_SIZE_STR ".hpp")
42 #endif
43 
44 /*=============================================================================
45     Copyright (c) 2001-2011 Joel de Guzman
46 
47     Distributed under the Boost Software License, Version 1.0. (See accompanying
48     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
49 
50     This is an auto-generated file. Do not edit!
51 ==============================================================================*/
52 
53 #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
54 #pragma wave option(preserve: 1)
55 #endif
56 
57 #define FUSION_HASH #
58 
59 namespace boost { namespace fusion
60 {
61     struct void_;
62     struct fusion_sequence_tag;
63 
64     template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_MAP_SIZE, typename T)>
65     struct map : sequence_base<map<BOOST_PP_ENUM_PARAMS(FUSION_MAX_MAP_SIZE, T)> >
66     {
67         struct category : random_access_traversal_tag, associative_tag {};
68 
69         typedef map_tag fusion_tag;
70         typedef fusion_sequence_tag tag; // this gets picked up by MPL
71         typedef mpl::false_ is_view;
72 
73         typedef vector<
74             BOOST_PP_ENUM_PARAMS(FUSION_MAX_MAP_SIZE, T)>
75         storage_type;
76 
77         typedef typename storage_type::size size;
78 
79         BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
mapboost::fusion::map80         map()
81             : data() {}
82 
83         BOOST_FUSION_GPU_ENABLED
mapboost::fusion::map84         map(map const& rhs)
85             : data(rhs.data) {}
86 
87         template <typename Sequence>
88         BOOST_FUSION_GPU_ENABLED
mapboost::fusion::map89         map(Sequence const& rhs)
90             : data(rhs) {}
91 
92         #include <boost/fusion/container/map/detail/cpp03/map_forward_ctor.hpp>
93 
94         template <typename T>
95         BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
operator =boost::fusion::map96         map& operator=(T const& rhs)
97         {
98             data = rhs;
99             return *this;
100         }
101 
102         BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
operator =boost::fusion::map103         map& operator=(map const& rhs)
104         {
105             data = rhs.data;
106             return *this;
107         }
108 
109 #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
110 FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
111 #endif
112 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \
113     (defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
114         BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
mapboost::fusion::map115         map(map&& rhs)
116             : data(std::move(rhs.data)) {}
117 
118         template <typename T>
119         BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
operator =boost::fusion::map120         map& operator=(T&& rhs)
121         {
122             data = BOOST_FUSION_FWD_ELEM(T, rhs);
123             return *this;
124         }
125 
126         BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
operator =boost::fusion::map127         map& operator=(map&& rhs)
128         {
129             data = std::move(rhs.data);
130             return *this;
131         }
132 #endif
133 #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
134 FUSION_HASH endif
135 #endif
136 
137         BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
get_databoost::fusion::map138         storage_type& get_data() { return data; }
139         BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
get_databoost::fusion::map140         storage_type const& get_data() const { return data; }
141 
142     private:
143 
144         storage_type data;
145     };
146 }}
147 
148 #undef FUSION_HASH
149 
150 #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
151 #pragma wave option(output: null)
152 #endif
153 
154 #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
155 
156 #endif
157