4#include <bluegrass/meta/preprocessor.hpp>
18 template<
typename Contract,
typename FirstAction>
20 if(
code == FirstAction::get_account() && FirstAction::get_name() == act ) {
21 Contract().on( unpack_action_data<FirstAction>() );
41 template<
typename Contract,
typename FirstAction,
typename SecondAction,
typename... Actions>
43 if(
code == FirstAction::get_account() && FirstAction::get_name() == act ) {
44 Contract().on( unpack_action_data<FirstAction>() );
64 template<
typename T,
typename... Args>
69 constexpr size_t max_stack_buffer_size = 512;
70 void* buffer =
nullptr;
72 buffer = max_stack_buffer_size <
size ? malloc(
size) : alloca(
size);
76 std::tuple<std::decay_t<Args>...> args;
80 T inst(self,
code, ds);
82 auto f2 = [&](
auto... a ){
83 ((&inst)->*func)( a... );
86 std::apply( f2, args );
87 if ( max_stack_buffer_size <
size ) {
96 #define EOSIO_DISPATCH_INTERNAL( OP, elem ) \
97 case eosio::name( BLUEGRASS_META_STRINGIZE(elem) ).value: \
98 eosio::execute_action( eosio::name(receiver), eosio::name(code), &OP::elem ); \
102 #define EOSIO_DISPATCH_HELPER( TYPE, MEMBERS ) \
103 BLUEGRASS_META_FOREACH_SEQ( EOSIO_DISPATCH_INTERNAL, TYPE, MEMBERS )
120#define EOSIO_DISPATCH( TYPE, MEMBERS ) \
122 [[eosio::wasm_entry]] \
123 void apply( uint64_t receiver, uint64_t code, uint64_t action ) { \
124 if( code == receiver ) { \
126 EOSIO_DISPATCH_HELPER( TYPE, MEMBERS ) \