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