You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
2.2 KiB
59 lines
2.2 KiB
#################################
|
|
Formatting C++ Lambda Expressions
|
|
#################################
|
|
|
|
Uncrustify supports some formatting of c++ lambda expressions, although
|
|
the support is incomplete.
|
|
The parts of c++ lambda expressions that are currently recognized by Uncrusitify
|
|
are:
|
|
|
|
.. code-block:: c++
|
|
|
|
[ captures ] execution_context ( params ) specifiers -> ret { body }
|
|
|
|
Explanations for all the tokens in the above lambda expression
|
|
(except for ``execution_context``),
|
|
as well as a complete description of c++ lambda expressions,
|
|
are found `here <https://en.cppreference.com/w/cpp/language/lambda>`_.
|
|
The ``execution_context`` token is a non-standard addition to allow for
|
|
specification of the execution space (e.g. host or device in CUDA).
|
|
The native specifiers for the `execution_context` for lambda expression in CUDA
|
|
are ``__device__`` and ``__host__ __device__``.
|
|
However, it is common for code to use a preprocessor variable in place of the
|
|
native specifiers.
|
|
|
|
The Uncrustify options for formatting of c++ lambda expressions are:
|
|
|
|
.. code-block::
|
|
|
|
sp_cpp_lambda_assign
|
|
sp_cpp_lambda_square_paren
|
|
sp_cpp_lambda_square_brace
|
|
sp_cpp_lambda_paren_brace
|
|
sp_cpp_lambda_fparen
|
|
nl_cpp_lambda_leave_one_liners
|
|
nl_cpp_ldef_brace
|
|
indent_cpp_lambda_body
|
|
indent_cpp_lambda_only_once
|
|
|
|
Please refer to the example configuration file at
|
|
`uncrustify/documentation/htdocs/default.cfg <https://github.com/uncrustify/uncrustify/blob/master/documentation/htdocs/default.cfg>`_
|
|
for an explanation of the options.
|
|
Additionally, a multiple number of ``execution_context`` tokens may be set in
|
|
the configuration file:
|
|
|
|
.. code-block::
|
|
|
|
set EXECUTION_CONTEXT __host__ __device__
|
|
set EXECUTION_CONTEXT DEVICE_LAMBDA_CONTEXT HOST_DEVICE_LAMBDA_CONTEXT
|
|
|
|
The effect of these lines in the configuration file is that any of the strings
|
|
(``__host__``, ``__device__``,
|
|
``DEVICE_LAMBDA_CONTEXT``, ``HOST_DEVICE_LAMBDA_CONTEXT``)
|
|
will be recognized by uncrusitfy
|
|
and will allow the lambda to be properly identified.
|
|
Note that each word after the token name
|
|
(``EXECUTION_CONTEXT`` in this instance) is a separate token.
|
|
This means that uncrustify will parse ``__host__`` and ``__device__``
|
|
as separate tokens, and there is no need to specify ``__device__`` twice.
|