Rapicorn - Experimental UI Toolkit - Source Code  13.07.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines
aidaproto.hh
Go to the documentation of this file.
00001  // CC0 Public Domain: http://creativecommons.org/publicdomain/zero/1.0/
00002 namespace Rapicorn { namespace Aida {
00003 
00006 template<class R, class A1, class A2> static inline R
00007 field_buffer_emit_signal (const Aida::FieldBuffer &fb, const std::function<R (A1, A2)> &func, uint64 &emit_result_id)
00008 {
00009   const bool async = !std::is_void<R>::value;
00010   const size_t NARGS = 2;
00011   Aida::FieldReader fbr (fb);
00012   fbr.skip_header();
00013   fbr.skip();   // skip handler_id
00014   if (async)
00015     emit_result_id = fbr.pop_int64();
00016   if (AIDA_UNLIKELY (fbr.remaining() != NARGS))
00017     Aida::fatal_error ("invalid number of signal arguments");
00018   typename ValueType<A1>::T a1; typename ValueType<A2>::T a2;
00019   fbr >>= a1; fbr >>= a2;
00020   return func (a1, a2);
00021 }
00022 
00023 } } // Rapicorn::Aida
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines