diff options
author | Chanho Park <chanho61.park@samsung.com> | 2014-12-11 18:55:56 +0900 |
---|---|---|
committer | Chanho Park <chanho61.park@samsung.com> | 2014-12-11 18:55:56 +0900 |
commit | 08c1e93fa36a49f49325a07fe91ff92c964c2b6c (patch) | |
tree | 7a7053ceb8874b28ec4b868d4c49b500008a102e /boost/fusion/container/deque/detail/keyed_element.hpp | |
parent | bb4dd8289b351fae6b55e303f189127a394a1edd (diff) | |
download | boost-08c1e93fa36a49f49325a07fe91ff92c964c2b6c.tar.gz boost-08c1e93fa36a49f49325a07fe91ff92c964c2b6c.tar.bz2 boost-08c1e93fa36a49f49325a07fe91ff92c964c2b6c.zip |
Imported Upstream version 1.57.0upstream/1.57.0
Diffstat (limited to 'boost/fusion/container/deque/detail/keyed_element.hpp')
-rw-r--r-- | boost/fusion/container/deque/detail/keyed_element.hpp | 66 |
1 files changed, 64 insertions, 2 deletions
diff --git a/boost/fusion/container/deque/detail/keyed_element.hpp b/boost/fusion/container/deque/detail/keyed_element.hpp index d1b219dee7..05258820dc 100644 --- a/boost/fusion/container/deque/detail/keyed_element.hpp +++ b/boost/fusion/container/deque/detail/keyed_element.hpp @@ -8,6 +8,7 @@ #if !defined(BOOST_FUSION_DEQUE_DETAIL_KEYED_ELEMENT_26112006_1330) #define BOOST_FUSION_DEQUE_DETAIL_KEYED_ELEMENT_26112006_1330 +#include <boost/fusion/support/config.hpp> #include <boost/fusion/support/detail/access.hpp> #include <boost/fusion/iterator/deref.hpp> #include <boost/fusion/iterator/next.hpp> @@ -22,9 +23,11 @@ namespace boost { namespace fusion { namespace detail struct nil_keyed_element { typedef fusion_sequence_tag tag; + BOOST_FUSION_GPU_ENABLED void get(); template<typename It> + BOOST_FUSION_GPU_ENABLED static nil_keyed_element from_iterator(It const&) { @@ -40,6 +43,7 @@ namespace boost { namespace fusion { namespace detail using Rest::get; template <typename It> + BOOST_FUSION_GPU_ENABLED static keyed_element from_iterator(It const& it) { @@ -47,35 +51,82 @@ namespace boost { namespace fusion { namespace detail *it, base::from_iterator(fusion::next(it))); } + BOOST_FUSION_GPU_ENABLED + keyed_element(keyed_element const& rhs) + : Rest(rhs.get_base()), value_(rhs.value_) + {} + +#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) + BOOST_FUSION_GPU_ENABLED + keyed_element(keyed_element&& rhs) + : Rest(std::forward<Rest>(rhs.forward_base())) + , value_(std::forward<Value>(rhs.value_)) + {} +#endif + template <typename U, typename Rst> + BOOST_FUSION_GPU_ENABLED keyed_element(keyed_element<Key, U, Rst> const& rhs) : Rest(rhs.get_base()), value_(rhs.value_) {} - Rest const get_base() const +#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) +#endif + + BOOST_FUSION_GPU_ENABLED + Rest& get_base() + { + return *this; + } + + BOOST_FUSION_GPU_ENABLED + Rest const& get_base() const { return *this; } +#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) + BOOST_FUSION_GPU_ENABLED + Rest&& forward_base() + { + return std::forward<Rest>(*static_cast<Rest*>(this)); + } +#endif + + BOOST_FUSION_GPU_ENABLED typename cref_result<Value>::type get(Key) const { return value_; } + BOOST_FUSION_GPU_ENABLED typename ref_result<Value>::type get(Key) { return value_; } - keyed_element(typename call_param<Value>::type value, Rest const& rest) + BOOST_FUSION_GPU_ENABLED + keyed_element( + typename detail::call_param<Value>::type value + , Rest const& rest) : Rest(rest), value_(value) {} +#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) + BOOST_FUSION_GPU_ENABLED + keyed_element(Value&& value, Rest&& rest) + : Rest(std::forward<Rest>(rest)) + , value_(std::forward<Value>(value)) + {} +#endif + + BOOST_FUSION_GPU_ENABLED keyed_element() : Rest(), value_() {} template<typename U, typename Rst> + BOOST_FUSION_GPU_ENABLED keyed_element& operator=(keyed_element<Key, U, Rst> const& rhs) { base::operator=(static_cast<Rst const&>(rhs)); // cast for msvc-7.1 @@ -83,6 +134,7 @@ namespace boost { namespace fusion { namespace detail return *this; } + BOOST_FUSION_GPU_ENABLED keyed_element& operator=(keyed_element const& rhs) { base::operator=(rhs); @@ -90,6 +142,16 @@ namespace boost { namespace fusion { namespace detail return *this; } +#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) + BOOST_FUSION_GPU_ENABLED + keyed_element& operator=(keyed_element&& rhs) + { + base::operator=(std::forward<keyed_element>(rhs)); + value_ = std::forward<Value>(rhs.value_); + return *this; + } +#endif + Value value_; }; |