yasmine
assembly_cpp11.hpp
Go to the documentation of this file.
1 // //
3 // This file is part of the Seadex yasmine ecosystem (http://yasmine.seadex.de). //
4 // Copyright (C) 2016-2017 Seadex GmbH //
5 // //
6 // Licensing information is available in the folder "license" which is part of this distribution. //
7 // The same information is available on the www @ http://yasmine.seadex.de/Licenses.html. //
8 // //
10 
11 
12 #ifndef ASSEMBLY_CPP11_D1BFD81D_D2FD_4AD5_A426_CE822C4C6C9F
13 #define ASSEMBLY_CPP11_D1BFD81D_D2FD_4AD5_A426_CE822C4C6C9F
14 
15 #ifndef SX_CPP03_BOOST // C++11 only
16 
17 
18 #include <type_traits>
19 #include "assembly_common.hpp"
20 
21 #include "essentials/macro_helpers.hpp"
22 
23 
25 #define Y_BEHAVIOR_ACTION( _action ) \
26  sxy::behavior_function( [this]( const sxy::event& _event, sxy::event_collector& _event_collector ){ SX_UNUSED_PARAMETER( _event ); SX_UNUSED_PARAMETER( _event_collector ); _action } )
27 
29 #define Y_BEHAVIOR_FREE_ACTION( _action ) \
30  sxy::behavior_function( []( const sxy::event& _event, sxy::event_collector& _event_collector ){ SX_UNUSED_PARAMETER( _event ); SX_UNUSED_PARAMETER( _event_collector ); _action } )
31 
33 #define Y_GUARD_ACTION( _action ) \
34  sxy::constraint_function( [ this ]( const sxy::event& _event, sxy::event_collector& _event_collector ){ SX_UNUSED_PARAMETER(_event); SX_UNUSED_PARAMETER( _event_collector ); _action } )
35 
37 #define Y_GUARD_FREE_ACTION( _action ) \
38  sxy::constraint_function( []( const sxy::event& _event, sxy::event_collector& _event_collector ){ SX_UNUSED_PARAMETER(_event); SX_UNUSED_PARAMETER( _event_collector ); _action } )
39 
40 
41 // Macros for passing handlers as behavior
42 
45 //#define Y_BEHAVIOR_METHOD_EVENT(...) EXPAND( VA_SELECT( Y_BEHAVIOR_METHOD_EVENT_SELECT, __VA_ARGS__ ) )
46 #define Y_BEHAVIOR_METHOD_EVENT(...) EXPAND( Y_BEHAVIOR_METHOD2( this, __VA_ARGS__ ) )
47 
50 #define Y_BEHAVIOR_FUNCTION_EVENT( ... ) EXPAND( Y_BEHAVIOR_FUNCTION2( __VA_ARGS__ ) )
51 
52 
53 #define VA_SELECT_WITH_CLASS_INSTANCE( NAME, CLASS_INSTANCE, ... ) EXPAND( SELECT( NAME, VA_SIZE(__VA_ARGS__) )(CLASS_INSTANCE, __VA_ARGS__) )
54 
57 #define Y_BEHAVIOR_METHOD2(CLASS_INSTANCE, ...) EXPAND( VA_SELECT_WITH_CLASS_INSTANCE(Y_BEHAVIOR_METHOD2_SELECT, CLASS_INSTANCE, __VA_ARGS__))
58 
61 #define Y_BEHAVIOR_FUNCTION2(...) EXPAND( VA_SELECT(Y_BEHAVIOR_FUNCTION2_SELECT, __VA_ARGS__) )
62 
65 #define Y_GUARD_METHOD2(CLASS_INSTANCE, ...) EXPAND( VA_SELECT_WITH_CLASS_INSTANCE(Y_GUARD_METHOD2_SELECT, CLASS_INSTANCE, __VA_ARGS__))
66 
69 #define Y_GUARD_FUNCTION2(...) EXPAND( VA_SELECT(Y_GUARD_FUNCTION2_SELECT, __VA_ARGS__) )
70 
73 //#define Y_GUARD_METHOD_EVENT(...) EXPAND( VA_SELECT( Y_GUARDR_METHOD_EVENT_SELECT, __VA_ARGS__ ) )
74 #define Y_GUARD_METHOD_EVENT(...) EXPAND( Y_GUARD_METHOD2( this, __VA_ARGS__ ) )
75 
78 #define Y_GUARD_FUNCTION_EVENT( ... ) EXPAND( VA_SELECT( Y_GUARD_FUNCTION_EVENT_SELECT, __VA_ARGS__ ) )
79 
80 
81 
82 // deprecated macros
83 
84 #if defined(Y_USE_DEPRECATED) && (Y_USE_DEPRECATED <= 1)
85 
87 #define Y_BEHAVIOR_METHOD( ... ) EXPAND( VA_SELECT( Y_BEHAVIOR_METHOD_SELECT, __VA_ARGS__ ) )
88 
90 #define Y_BEHAVIOR_METHOD_NO_EVENT( ... ) EXPAND( VA_SELECT( Y_BEHAVIOR_METHOD_NO_EVENT_SELECT, __VA_ARGS__ ) )
91 
93 #define Y_GUARD_METHOD( ... ) EXPAND( VA_SELECT( Y_GUARD_METHOD_SELECT, __VA_ARGS__ ) )
94 
96 #define Y_GUARD_METHOD_NO_EVENT( ... ) EXPAND( VA_SELECT( Y_GUARD_METHOD_NO_EVENT_SELECT, __VA_ARGS__ ) )
97 
100 #define Y_BEHAVIOR_METHOD_SELECT_1( _method_name ) \
101  sxy::behavior_function( [ this ]( const sxy::event& _event, sxy::event_collector& _event_collector ){ SX_UNUSED_PARAMETER(_event_collector); this->_method_name( _event ); } )
102 
105 #define Y_BEHAVIOR_METHOD_SELECT_2( _class_name, _method_name ) \
106  sxy::behavior_function( [ this ]( const sxy::event& _event, sxy::event_collector& _event_collector ){ SX_UNUSED_PARAMETER(_event_collector); this->_method_name( _event ); } )
107 
110 #define Y_BEHAVIOR_METHOD_NO_EVENT_SELECT_1( _method_name ) \
111  sxy::behavior_function( [ this ]( const sxy::event& _event, sxy::event_collector& _event_collector ){ SX_UNUSED_PARAMETER(_event); SX_UNUSED_PARAMETER(_event_collector); this->_method_name(); } )
112 
115 #define Y_BEHAVIOR_METHOD_NO_EVENT_SELECT_2( _class_name, _method_name ) \
116  sxy::behavior_function( [ this ]( const sxy::event& _event, sxy::event_collector& _event_collector ){ SX_UNUSED_PARAMETER(_event); SX_UNUSED_PARAMETER(_event_collector); this->_method_name(); } )
117 
120 #define Y_GUARD_METHOD_SELECT_1( _method_name ) \
121  sxy::constraint_function( [ this ]( const sxy::event& _event, sxy::event_collector& _event_collector ){ SX_UNUSED_PARAMETER(_event_collector); return( this->_method_name( _event ) ); } )
122 
125 #define Y_GUARD_METHOD_SELECT_2( _class_name, _method_name ) \
126  sxy::constraint_function( [ this ]( const sxy::event& _event, sxy::event_collector& _event_collector ){ SX_UNUSED_PARAMETER(_event_collector); return( this->_method_name( _event ) ); } )
127 
130 #define Y_GUARD_METHOD_NO_EVENT_SELECT_1( _method_name ) \
131  sxy::constraint_function( [ this ]( const sxy::event& _event, sxy::event_collector& _event_collector ){ SX_UNUSED_PARAMETER(_event); SX_UNUSED_PARAMETER(_event_collector); return( this->_method_name() ); } )
132 
135 #define Y_GUARD_METHOD_NO_EVENT_SELECT_2( _class_name, _method_name ) \
136  sxy::constraint_function( [ this ]( const sxy::event& _event, sxy::event_collector& _event_collector ){ SX_UNUSED_PARAMETER(_event); SX_UNUSED_PARAMETER(_event_collector); return( this->_method_name() ); } )
137 
140 #define Y_GUARD_FUNCTION( _function_name ) \
141  sxy::constraint_function( []( const sxy::event& _event, sxy::event_collector& _event_collector )->bool { SX_UNUSED_PARAMETER(_event_collector); return( _function_name( _event ) ); } )
142 
145 #define Y_GUARD_FUNCTION_NO_EVENT( _function_name ) \
146  sxy::constraint_function( []( const sxy::event& _event, sxy::event_collector& _event_collector )->bool { SX_UNUSED_PARAMETER(_event); SX_UNUSED_PARAMETER(_event_collector); return( _function_name() ); } )
147 
150 #define Y_BEHAVIOR_FUNCTION( _function_name ) \
151  sxy::behavior_function( []( const sxy::event& _event, sxy::event_collector& _event_collector ){ SX_UNUSED_PARAMETER(_event_collector); _function_name( _event ); } )
152 
155 #define Y_BEHAVIOR_FUNCTION_NO_EVENT( _function_name ) \
156  sxy::behavior_function( []( const sxy::event& _event, sxy::event_collector& _event_collector ){ SX_UNUSED_PARAMETER(_event); SX_UNUSED_PARAMETER(_event_collector); _function_name(); } )\
157 
158 
159 #endif // defined(Y_USE_DEPRECATED) && (Y_USE_DEPRECATED <= 1)
160 
161 
162 #endif // SX_CPP03_BOOST
163 
164 
165 #endif // include guard