File macro_for_each.hxx#

Defines

BOUT_EXPAND(x)#

Intermediate expansion needed for MSVC due to non-compliant preprocessor.

_me_1(_call, x)#

_me_x set of macros expand a number of arguments without ‘;’ between them

_me_2(_call, x, ...)#
_me_3(_call, x, ...)#
_me_4(_call, x, ...)#
_me_5(_call, x, ...)#
_me_6(_call, x, ...)#
_me_7(_call, x, ...)#
_me_8(_call, x, ...)#
_me_9(_call, x, ...)#
_me_10(_call, x, ...)#
_fe_1(_call, x)#

_fe_x set of macros expand a number of arguments with ‘;’ between them

_fe_2(_call, x, ...)#
_fe_3(_call, x, ...)#
_fe_4(_call, x, ...)#
_fe_5(_call, x, ...)#
_fe_6(_call, x, ...)#
_fe_7(_call, x, ...)#
_fe_8(_call, x, ...)#
_fe_9(_call, x, ...)#
_fe_10(_call, x, ...)#
_ae_1(_call, x)#

_ae_x set of macros expand a number of arguments with ‘,’ between them

_ae_2(_call, x, ...)#
_ae_3(_call, x, ...)#
_ae_4(_call, x, ...)#
_ae_5(_call, x, ...)#
_ae_6(_call, x, ...)#
_ae_7(_call, x, ...)#
_ae_8(_call, x, ...)#
_ae_9(_call, x, ...)#
_ae_10(_call, x, ...)#
_GET_FOR_EACH_EXPANSION(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, NAME, ...)#

When called with VA_ARGS first, this evaluates to an argument which depends on the length of VA_ARGS. This is used to find the appropriate macro to begin the expansion.

MACRO_FOR_EACH(mac, ...)#

Apply a macro (first argument) to each of the following arguments. Currently supports up to 10 arguments.

Example:

MACRO_FOR_EACH(test, a, b, c)

expands to

test(a) test(b) test(c)

Notes:

  • No semicolon is inserted after each expansion

  • No braces are put around the expansion. These should usually be added in the top-level macro to avoid surprising results.

MACRO_FOR_EACH_FN(fn, ...)#

Apply a function (first argument) to each of the following arguments. Currently supports up to 10 arguments.

Example:

MACRO_FOR_EACH_FN(test, a, b, c)

expands to

test(a); test(b); test(c);

Notes:

  • A ; is inserted after each expansion

  • No braces are put around the expansion. These should usually be added in the top-level macro to avoid surprising results.

MACRO_FOR_EACH_ARG(arg, ...)#

Apply a macro (first argument) to each of the following arguments, separate by commas. For constructing argument lists. Currently supports up to 10 arguments.

Example:

MACRO_FOR_EACH_ARG(test, a, b, c)

expands to

test(a), test(b), test(c)