Rapicorn - Experimental UI Toolkit - Source Code
13.07.0
|
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