From cf849b8b54cfe6cc15976640a30ceb95aee054b2 Mon Sep 17 00:00:00 2001 From: Daniel Larimer Date: Tue, 10 Mar 2015 09:14:33 -0400 Subject: [PATCH] test code --- tests/api.cpp | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/tests/api.cpp b/tests/api.cpp index 24e1cfa..bf62734 100644 --- a/tests/api.cpp +++ b/tests/api.cpp @@ -1,6 +1,6 @@ #include #include -#include +//#include class calculator { @@ -11,6 +11,8 @@ class calculator FC_API( calculator, (add)(sub) ) +using namespace fc; + class some_calculator { public: @@ -24,6 +26,29 @@ class variant_calculator double sub( fc::variant a, fc::variant b ) { return a.as_double()-b.as_double(); } }; +template +//std::function bind_first_arg( const std::function& f, Arg0 ao ) +std::function bind_first_arg( const std::function& f, Arg0 ao ) +{ + return [=]( Args... args ) { return f( ao, args... ); }; +} + +template +R call_generic( const std::function& f, variants::const_iterator a0, variants::const_iterator e ) +{ + return f(a0->as()); +} +template +R call_generic( const std::function& f, variants::const_iterator a0, variants::const_iterator e ) +{ + return call_generic( bind_first_arg( f, a0->as() ), a0+1, e ); +} + +template +std::function to_generic( const std::function& f ) +{ + return [=]( const variants& args ) { return call_generic( f, args.begin(), args.end() ); }; +} int main( int argc, char** argv ) { @@ -39,7 +64,14 @@ int main( int argc, char** argv ) wdump( (api_nested_calc->sub(5,4)) ); wdump( (api_nested_calc->sub(5,4)) ); - fc::api_server server; - server.register_api( api_calc ); + variants v = { 4, 5 }; + auto g = to_generic( api_calc->add ); + auto r = call_generic( api_calc->add, v.begin(), v.end() ); + wdump((r)); + wdump( (g(v)) ); + + + // fc::api_server server; + // server.register_api( api_calc ); return 0; }