| |
| // (C) Copyright Tobias Schwinger |
| // |
| // Use modification and distribution are subject to the boost Software License, |
| // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). |
| |
| //------------------------------------------------------------------------------ |
| |
| #ifndef BOOST_FT_DETAIL_COMPONENTS_AS_MPL_SEQUENCE_HPP_INCLUDED |
| #define BOOST_FT_DETAIL_COMPONENTS_AS_MPL_SEQUENCE_HPP_INCLUDED |
| |
| #include <ndnboost/mpl/size_fwd.hpp> |
| #include <ndnboost/mpl/empty_fwd.hpp> |
| #include <ndnboost/mpl/front_fwd.hpp> |
| #include <ndnboost/mpl/back_fwd.hpp> |
| #include <ndnboost/mpl/at_fwd.hpp> |
| #include <ndnboost/mpl/begin_end_fwd.hpp> |
| #include <ndnboost/mpl/clear_fwd.hpp> |
| #include <ndnboost/mpl/push_front_fwd.hpp> |
| #include <ndnboost/mpl/pop_front_fwd.hpp> |
| #include <ndnboost/mpl/push_back_fwd.hpp> |
| #include <ndnboost/mpl/pop_back_fwd.hpp> |
| |
| namespace ndnboost { namespace mpl { |
| |
| template<> struct size_impl |
| < function_types::detail::components_mpl_sequence_tag > |
| { |
| template< typename S > struct apply |
| : mpl::size <typename S::types> |
| { }; |
| }; |
| template<> struct empty_impl |
| < function_types::detail::components_mpl_sequence_tag > |
| { |
| template< typename S > struct apply |
| : mpl::empty <typename S::types> |
| { }; |
| }; |
| template<> struct front_impl |
| < function_types::detail::components_mpl_sequence_tag > |
| { |
| template< typename S > struct apply |
| : mpl::front <typename S::types> |
| { }; |
| }; |
| template<> struct back_impl |
| < function_types::detail::components_mpl_sequence_tag > |
| { |
| template< typename S > struct apply |
| : mpl::back <typename S::types> |
| { }; |
| }; |
| template<> struct at_impl |
| < function_types::detail::components_mpl_sequence_tag > |
| { |
| template< typename S, typename N > struct apply |
| : mpl::at <typename S::types, N > |
| { }; |
| }; |
| template<> struct begin_impl |
| < function_types::detail::components_mpl_sequence_tag > |
| { |
| template< typename S > struct apply |
| : mpl::begin <typename S::types> |
| { }; |
| }; |
| template<> struct end_impl |
| < function_types::detail::components_mpl_sequence_tag > |
| { |
| template< typename S > struct apply |
| : mpl::end <typename S::types> |
| { }; |
| }; |
| template<> struct clear_impl |
| < function_types::detail::components_mpl_sequence_tag > |
| { |
| template< typename S > |
| struct apply |
| : S |
| { |
| typedef apply type; |
| typedef typename mpl::clear< typename S::types >::type types; |
| }; |
| }; |
| template<> |
| struct push_front_impl |
| < function_types::detail::components_mpl_sequence_tag > |
| { |
| template< typename S, typename T > |
| struct apply |
| : S |
| { |
| typedef apply type; |
| typedef typename mpl::push_front< typename S::types, T >::type types; |
| }; |
| }; |
| template<> |
| struct pop_front_impl |
| < function_types::detail::components_mpl_sequence_tag > |
| { |
| template< typename S > |
| struct apply |
| : S |
| { |
| typedef apply type; |
| typedef typename mpl::pop_front< typename S::types >::type types; |
| }; |
| }; |
| template<> |
| struct push_back_impl |
| < function_types::detail::components_mpl_sequence_tag > |
| { |
| template< typename S, typename T > |
| struct apply |
| : S |
| { |
| typedef apply type; |
| typedef typename mpl::push_back< typename S::types, T >::type types; |
| }; |
| }; |
| template<> |
| struct pop_back_impl |
| < function_types::detail::components_mpl_sequence_tag > |
| { |
| template< typename S > |
| struct apply |
| : S |
| { |
| typedef apply type; |
| typedef typename mpl::pop_back< typename S::types >::type types; |
| }; |
| }; |
| |
| } } // namespace ::ndnboost::mpl |
| |
| #endif |
| |