From 99fbb8d71f6bf3022b3135b2a7b016c7f525c8f2 Mon Sep 17 00:00:00 2001 From: Naios Date: Wed, 1 Jul 2015 22:01:56 +0200 Subject: [PATCH] Add position to partial results --- include/Continuable.h | 44 +++++++++++++++++++++++++++++-------------- test.cpp | 2 ++ 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/include/Continuable.h b/include/Continuable.h index f119bed..634dade 100644 --- a/include/Continuable.h +++ b/include/Continuable.h @@ -303,13 +303,13 @@ namespace detail typedef fu::identity type; }; - template - struct concat_identities_as_pack; + template + struct identity_to_tuple; - template - struct concat_identities_as_pack, fu::identity> + template + struct identity_to_tuple> { - typedef fu::identity> type; + typedef std::tuple type; }; template @@ -339,6 +339,15 @@ namespace detail } }; + /// Position wrapper class to pass ints as type + template + struct partial_result + { + static size_t const position = Count; + + typedef Tuple tuple; + }; + /// Continuable processing detail implementation template struct functional_traits @@ -434,30 +443,37 @@ namespace detail return remove_void_trait(box_continuable_trait(std::forward<_CTy>(functional))); } - template + template struct multiple_result_maker; - template - struct multiple_result_maker, fu::identity> + template + struct multiple_result_maker, fu::identity> { typedef fu::identity arguments_t; typedef fu::identity arguments_storage_t; - static size_t const size = Count; + static size_t const size = Position; }; - template - struct multiple_result_maker + template + struct multiple_result_maker : public multiple_result_maker< - Count + 1, + Position + 1, typename concat_identities< Args, typename unary_chainer_t::callback_arguments_t >::type, - typename concat_identities_as_pack < + typename concat_identities < Pack, - typename unary_chainer_t::callback_arguments_t + fu::identity< + partial_result< + Position, + typename identity_to_tuple< + typename unary_chainer_t::callback_arguments_t + >::type + > + > >::type, Rest... > { }; diff --git a/test.cpp b/test.cpp index 422d2d4..e9cc4c3 100644 --- a/test.cpp +++ b/test.cpp @@ -252,6 +252,8 @@ int main(int /*argc*/, char** /*argv*/) detail::concat_identities, fu::identity>::type myt; + // fu::identity::position<1>> i; + std::tuple> tup; std::cout << "ok" << std::endl;