GATE
lambdas.hpp File Reference

C++ lambda expression compatibility layer. More...

Macros

#define GATE_LAMBDA_GET_TYPE(type, variable)   type
 
#define GATE_LAMBDA_GET_VAR(type, variable)   variable
 
#define GATE_LAMBDA(instance_name, return_type, arguments, code)
 
#define GATE_LAMBDA_CAPTURE_1(instance_name, cap1, return_type, arguments, code)
 
#define GATE_LAMBDA_CAPTURE_2(instance_name, cap1, cap2, return_type, arguments, code)
 
#define GATE_LAMBDA_CAPTURE_3(instance_name, cap1, cap2, cap3, return_type, arguments, code)
 
#define GATE_LAMBDA_1   GATE_LAMBDA_CAPTURE_1
 
#define GATE_LAMBDA_2   GATE_LAMBDA_CAPTURE_2
 
#define GATE_LAMBDA_3   GATE_LAMBDA_CAPTURE_3
 

Detailed Description

C++ lambda expression compatibility layer.

Macro Definition Documentation

◆ GATE_LAMBDA

#define GATE_LAMBDA ( instance_name,
return_type,
arguments,
code )
Value:
class instance_name ## _class \
{ \
public: \
return_type operator() arguments \
{ \
code \
} \
} instance_name

◆ GATE_LAMBDA_CAPTURE_1

#define GATE_LAMBDA_CAPTURE_1 ( instance_name,
cap1,
return_type,
arguments,
code )
Value:
class instance_name ## _class \
{ \
public: \
GATE_LAMBDA_GET_TYPE cap1 & GATE_LAMBDA_GET_VAR cap1 ; \
instance_name ## _class (GATE_LAMBDA_GET_TYPE cap1 & arg1) \
: GATE_LAMBDA_GET_VAR cap1 (arg1) \
{} \
return_type operator() arguments code \
}; \
instance_name ## _class instance_name (GATE_LAMBDA_GET_VAR cap1)

◆ GATE_LAMBDA_CAPTURE_2

#define GATE_LAMBDA_CAPTURE_2 ( instance_name,
cap1,
cap2,
return_type,
arguments,
code )
Value:
class instance_name ## _class \
{ \
public: \
GATE_LAMBDA_GET_TYPE cap1 & GATE_LAMBDA_GET_VAR cap1 ; \
GATE_LAMBDA_GET_TYPE cap2 & GATE_LAMBDA_GET_VAR cap2 ; \
instance_name ## _class ( GATE_LAMBDA_GET_TYPE cap1 & arg1, \
GATE_LAMBDA_GET_TYPE cap2 & arg2) \
: GATE_LAMBDA_GET_VAR cap1 (arg1), \
GATE_LAMBDA_GET_VAR cap2 (arg2) \
{} \
return_type operator() arguments code \
}; \
instance_name ## _class instance_name ( GATE_LAMBDA_GET_VAR cap1, \
GATE_LAMBDA_GET_VAR cap2)

◆ GATE_LAMBDA_CAPTURE_3

#define GATE_LAMBDA_CAPTURE_3 ( instance_name,
cap1,
cap2,
cap3,
return_type,
arguments,
code )
Value:
class instance_name ## _class \
{ \
public: \
GATE_LAMBDA_GET_TYPE cap1 & GATE_LAMBDA_GET_VAR cap1 ; \
GATE_LAMBDA_GET_TYPE cap2 & GATE_LAMBDA_GET_VAR cap2 ; \
GATE_LAMBDA_GET_TYPE cap3 & GATE_LAMBDA_GET_VAR cap3 ; \
instance_name ## _class ( GATE_LAMBDA_GET_TYPE cap1 & arg1, \
GATE_LAMBDA_GET_TYPE cap2 & arg2, \
GATE_LAMBDA_GET_TYPE cap3 & arg3) \
: GATE_LAMBDA_GET_VAR cap1 (arg1), \
GATE_LAMBDA_GET_VAR cap2 (arg2), \
GATE_LAMBDA_GET_VAR cap3 (arg3) \
{} \
return_type operator() arguments code \
}; \
instance_name ## _class instance_name ( GATE_LAMBDA_GET_VAR cap1, \
GATE_LAMBDA_GET_VAR cap2, \
GATE_LAMBDA_GET_VAR cap3)