Skip to content
Snippets Groups Projects
Commit 598285ab authored by raphael.bach's avatar raphael.bach
Browse files

Initial commit

parents
Branches main
No related tags found
No related merge requests found
Showing
with 867 additions and 0 deletions
# Ensure new text files committed will have their line endings set to `LF`.
* text=auto
# Ensure headers are recognized as C files instead of C++.
# GitLab documents the use of `gitlab-language` but `linguist-language`(GitHub)
# works as well.
*.h linguist-language=c
# Analysis
*.gcda
*.gcno
*.gcov
analysis/
# Backup files
*.bak
*~
# Build
build/
# clangd
.cache/
.clang-format
.clang-tidy
.clangd/
compile_commands.json
# Dependency files generated by gcc
*.d
dep/
# Documentation
doxygen/
# Executables
*.out
# IDE
.vscode/
# External
external/include
external/lib
# Futhark
*fut.json
# Logs
*.log
log/
# Object files
*.o
obj/
# Static libraries
*.a
# Shared objects
*.so
*.so.*
# Scripts
*.sh
This diff is collapsed.
LICENSE 0 → 100644
BSD Zero Clause License
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
Makefile 0 → 100644
# SPDX-License-Identifier: 0BSD
################################################################################
# CTL
################################################################################
MAKEFILE_PATH := makefiles
include $(MAKEFILE_PATH)/config.mk
PROJECT := futharkmpi
PROJECT_TYPE := program
# Add the compilation of *.fut with `futhark c` as a dependency
PROJECT_DEPS := futharkc
INC_DIRS += $(shell mpicc --showme:incdirs)
MPI_LDFLAGS := $(shell mpicc --showme:libdirs)
LDFLAGS += $(MPI_LDFLAGS:%=-L%)
MPI_LDLIBS := $(shell mpicc --showme:libs)
LDLIBS += $(MPI_LDLIBS:%=-l%)
LDLIBS += -lm
# Remove `-pedantic-errors` to allow code generated by Futhark to compile
CC_ERROR := $(filter-out -pedantic-errors,$(CC_ERROR))
################################################################################
# TARGETS
################################################################################
# Default targets
include $(MAKEFILE_PATH)/targets.mk
.PHONY: futharkc
futharkc: src/futharkmpi_fut.c
src/futharkmpi_fut.c: futharkmpi_fut.fut
futhark c futharkmpi_fut.fut --library
mv futharkmpi_fut.h $(INC_PATH)
mv futharkmpi_fut.c $(SRC_PATH)
# Call the program with `mpirun`
RUN_CMD := $(RUN_CMD:%=mpirun %)
// SPDX-License-Identifier: 0BSD
/*!
* @file
* @license{
* BSD Zero Clause License
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
* }
*/
/*==============================================================================
GUARD
==============================================================================*/
#ifndef CPL_H_20170716201147
#define CPL_H_20170716201147
/*==============================================================================
INCLUDE
==============================================================================*/
#include "cpl_arg.h"
#include "cpl_concat.h"
#include "cpl_generic.h"
#include "cpl_logic.h"
#include "cpl_map.h"
#include "cpl_type.h"
#include "cpl_util.h"
/*==============================================================================
GUARD
==============================================================================*/
#endif // CPL_H_20170716201147
// SPDX-License-Identifier: 0BSD
/*!
* @file
* @license{
* BSD Zero Clause License
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
* }
*
* @brief
* Provide macros to count arguments and select the nth argument.
*
* @todo
* - Detect absence of argument
* - Document macros in `cpl_arg_gen.h`
*/
/*==============================================================================
GUARD
==============================================================================*/
#ifndef CPL_ARG_H_20170809192511
#define CPL_ARG_H_20170809192511
/*==============================================================================
INCLUDE
==============================================================================*/
// CPL
#include "impl/cpl_arg_impl.h"
/*==============================================================================
PREPROCESSOR
==============================================================================*/
/**
* Expand to the number of arguments given.
*
* Since the C preprocessor considers the absence of arguments as the presence
* of an empty token, this macro can't detect when there is 0 argument.
*
* @param ... : Comma separated list of arguments
*
* @expansion{
* CPL_ARG_COUNT() => 1
* CPL_ARG_COUNT(()) => 1
* CPL_ARG_COUNT(,) => 2
* CPL_ARG_COUNT(,,) => 3
* CPL_ARG_COUNT(a) => 1
* CPL_ARG_COUNT(a, b, c) => 3
* }
*
* @example{
* int x = CPL_ARG_COUNT(a, b, c); // x = 3
* }
*/
#define CPL_ARG_COUNT(...) CPL_ARG_COUNT_IMPL(__VA_ARGS__)
/*==============================================================================
GUARD
==============================================================================*/
#endif // CPL_ARG_H_20170809192511
// SPDX-License-Identifier: 0BSD
/*!
* @file
* @license{
* BSD Zero Clause License
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
* }
*
* @brief
* Provide macros allowing direct and delayed concatenation of their arguments.
*/
/*==============================================================================
GUARD
==============================================================================*/
#ifndef CPL_CONCAT_H_20170807175029
#define CPL_CONCAT_H_20170807175029
/*==============================================================================
PREPROCESSOR
==============================================================================*/
/**
* Concatenates two arguments after expanding them.
*
* @expansion{
* #define A foo
* #define B bar
* CPL_CONCAT_2(foo, bar) => foobar
* CPL_CONCAT_2(A, B) => foobar
* }
*/
#define CPL_CONCAT_2(A, B) CPL_CONCAT_RAW_2(A, B)
/**
* Concatenates two arguments without expanding them.
*
* @expansion{
* #define A foo
* #define B bar
* CPL_CONCAT_RAW_2(foo, bar) => foobar
* CPL_CONCAT_RAW_2(A, B) => AB
* }
*/
#define CPL_CONCAT_RAW_2(A, B) A##B
/**
* Concatenates three arguments after expanding them.
*
* @expansion{
* #define A foo
* #define B bar
* #define UNDERSCORE _
* CPL_CONCAT_3(foo, UNDERSCORE, bar) => foo_bar
* CPL_CONCAT_3(A, UNDERSCORE, B) => foo_bar
* }
*/
#define CPL_CONCAT_3(A, B, C) CPL_CONCAT_RAW_3(A, B, C)
/**
* Concatenates three arguments without expanding them.
*
* @expansion{
* #define A foo
* #define B bar
* #define UNDERSCORE _
* CPL_CONCAT_RAW_3(foo, UNDERSCORE, bar) => fooUNDERSCOREbar
* CPL_CONCAT_RAW_3(A, UNDERSCORE, B) => AUNDERSCOREB
* }
*/
#define CPL_CONCAT_RAW_3(A, B, C) A##B##C
/*==============================================================================
GUARD
==============================================================================*/
#endif // CPL_CONCAT_H_20170807175029
// SPDX-License-Identifier: 0BSD
/*!
* @file
* @license{
* BSD Zero Clause License
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
* }
*
* @brief
* Provide macros to easily create `_Generic()` expressions(aka
* @e generic-selection).
*
* @see
* @C17{6.5.1}
*/
/*==============================================================================
GUARD
==============================================================================*/
#ifndef CPL_GENERIC_H_20190803125336
#define CPL_GENERIC_H_20190803125336
/*==============================================================================
INCLUDE
==============================================================================*/
// CPL
#include "impl/cpl_generic_impl.h"
/*==============================================================================
PREPROCESSOR
==============================================================================*/
/**
* Expands to a `_Generic()` expression where the associations are constructed
* according to a determined pattern.
*
* The default association has to be set manually, the others are automatically
* constructed as follows:
* - Type : `<prefix>_<type>`.
* - Expression: `<prefix>_<type>_<func>`.
*
* @param CTR_EXPR : Controlling expression
* @param DEF_EXPR : Default expression
* @param PREFIX : `<prefix>` (single word)
* @param FUNC : `<func>` (single word)
* @param ... : Comma separated list of `<type>` (each a single word)
*
* @expansion{
* CPL_GENERIC_FUNC(x, 0, foo, bar, char, int) =>
* _Generic((x),
* default : 0,
* foo_char : foo_char_bar,
* foo_int : foo_int_bar
* )
* }
*
* @example{
* int x = CPL_GENERIC_FUNC(x, 0, foo, bar, char, int)(a, b); // x = foo_int_bar(a, b)
* }
*/
#define CPL_GENERIC_FUNC(CTR_EXPR, DEF_EXPR, PREFIX, FUNC, ...) \
CPL_GENERIC_FUNC_IMPL(CTR_EXPR, DEF_EXPR, PREFIX, FUNC, __VA_ARGS__)
/*==============================================================================
GUARD
==============================================================================*/
#endif // CPL_GENERIC_H_20190803125336
// SPDX-License-Identifier: 0BSD
/*!
* @file
* @license{
* BSD Zero Clause License
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
* }
*
* @brief
* Provide macros to evaluate simple boolean functions.
*
* @par Parameter requirements
*
* All functions in this header accept three types of parameter:
* - A valid C @e identifier
* - A sequence of characters which, when concatened to a valid @e identifier,
* can make a new valid @e identifier
* - The empty token, which is the absence of a token. The C preprocessor still
* counts this as a token.
*
* The compiler will emit an error if a parameter doesn't meet these
* requirements.
*/
/*==============================================================================
GUARD
==============================================================================*/
#ifndef CPL_LOGIC_H_20190806123812
#define CPL_LOGIC_H_20190806123812
/*==============================================================================
INCLUDE
==============================================================================*/
// CPL
#include "impl/cpl_logic_impl.h"
/*==============================================================================
PREPROCESSOR
==============================================================================*/
/**
* Expand to a boolean value converted from its parameter.
*
* - Expand to 0 if \p{A} is either 0, the empty token or a macro that itself
* expands to 0 or the empty token.
* - Expand to 1 in all other cases as long as \p{A} meets the requirements to
* be a valid parameter.
*
* @expansion{
* CPL_BOOLEAN(0) => 0
* CPL_BOOLEAN(1) => 1
* CPL_BOOLEAN() => 0 // Empty token
* #define X
* CPL_BOOLEAN(X) => 0 // 'X' expands to the empty token
* #define Y 0
* CPL_BOOLEAN(Y) => 0 // 'Y' expands to 0
* #define Z 1
* CPL_BOOLEAN(Z) => 1 // 'Z' expands to 1
* CPL_BOOLEAN(W) => 1 // 'W' isn't defined anywhere but is a valid parameter
* }
*
* @param A : See parameter requirements in the file description
*/
#define CPL_BOOLEAN(A) CPL_BOOLEAN_IMPL(A)
/**
* Logical NOT.
*
* Apply CPL_BOOLEAN() to its parameter before expanding.
*
* @expansion{
* CPL_NOT(0) => 1
* CPL_NOT(1) => 0
* CPL_NOT() => 1 // Empty token
* #define X
* CPL_NOT(X) => 1 // 'X' expands to the empty token
* #define Y 0
* CPL_NOT(Y) => 1 // 'Y' expands to 0
* #define Z 1
* CPL_NOT(Z) => 0 // 'Z' expands to 1
* CPL_NOT(W) => 0 // 'W' isn't defined anywhere but is a valid parameter
* }
*
* @param A : See parameter requirements in the file description
*/
#define CPL_NOT(A) CPL_NOT_IMPL(A)
/**
* Logical AND
*
* Apply CPL_BOOLEAN() to its parameters before expanding.
*
* @expansion{
* CPL_AND(0, 0) => 0
* CPL_AND(0, 1) => 0
* CPL_AND(1, 0) => 0
* CPL_AND(1, 1) => 1
* }
*
* @param A, B : See parameter requirements in the file description
*/
#define CPL_AND(A, B) CPL_AND_IMPL(A, B)
/**
* Logical OR
*
* Apply CPL_BOOLEAN() to its parameters before expanding.
*
* @expansion{
* CPL_OR(0, 0) => 0
* CPL_OR(0, 1) => 1
* CPL_OR(1, 0) => 1
* CPL_OR(1, 1) => 1
* }
*
* @param A, B : See parameter requirements in the file description
*/
#define CPL_OR(A, B) CPL_OR_IMPL(A, B)
/**
* Logical NAND
*
* Apply CPL_BOOLEAN() to its parameters before expanding.
*
* @expansion{
* CPL_NAND(0, 0) => 1
* CPL_NAND(0, 1) => 1
* CPL_NAND(1, 0) => 1
* CPL_NAND(1, 1) => 0
* }
*
* @param A, B : See parameter requirements in the file description
*/
#define CPL_NAND(A, B) CPL_NAND_IMPL(A, B)
/**
* Logical NOR
*
* Apply CPL_BOOLEAN() to its parameters before expanding.
*
* @expansion{
* CPL_NOR(0, 0) => 1
* CPL_NOR(0, 1) => 0
* CPL_NOR(1, 0) => 0
* CPL_NOR(1, 1) => 0
* }
*
* @param A, B : See parameter requirements in the file description
*/
#define CPL_NOR(A, B) CPL_NOR_IMPL(A, B)
/**
* Logical XOR
*
* Apply CPL_BOOLEAN() to its parameters before expanding.
*
* @expansion{
* CPL_XOR(0, 0) => 0
* CPL_XOR(0, 1) => 1
* CPL_XOR(1, 0) => 1
* CPL_XOR(1, 1) => 0
* }
*
* @param A, B : See parameter requirements in the file description
*/
#define CPL_XOR(A, B) CPL_XOR_IMPL(A, B)
/**
* Logical XNOR
*
* Apply CPL_BOOLEAN() to its parameters before expanding.
*
* @expansion{
* CPL_XNOR(0, 0) => 1
* CPL_XNOR(0, 1) => 0
* CPL_XNOR(1, 0) => 0
* CPL_XNOR(1, 1) => 1
* }
*
* @param A, B : See parameter requirements in the file description
*/
#define CPL_XNOR(A, B) CPL_XNOR_IMPL(A, B)
/*==============================================================================
GUARD
==============================================================================*/
#endif // CPL_LOGIC_H_20190806123812
// SPDX-License-Identifier: 0BSD
/*!
* @file
* @license{
* BSD Zero Clause License
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
* }
*
* @brief
* Provide macros to evaluate simple boolean functions.
*/
/*==============================================================================
GUARD
==============================================================================*/
#ifndef CPL_MAP_H_20190728222334
#define CPL_MAP_H_20190728222334
/*==============================================================================
INCLUDE
==============================================================================*/
// CPL
#include "impl/cpl_map_impl.h"
/*==============================================================================
PREPROCESSOR
==============================================================================*/
/**
* Apply \p{M()} to each argument of \p{...} and separate two calls of \p{M()}
* with a call to \p{S()}.
*
* - \p{S()} is not called if there is only one call to \p{M()}.
*
* @expansion{
* CPL_MAP(M, S,) => M()
* CPL_MAP(M, S, a) => M(a)
* CPL_MAP(M, S, a, b, c) => M(a) S() M(b) S() M(c)
* CPL_MAP(M, S, (a, b, c), d) => M((a, b, c)) S() M(d)
* }
*
* @param M : Called as \p{M()} and applied to each arguments of \p{...}
* @param S : Called as \p{S()} and inserted between two calls of \p{M()}
* @param ... : Comma separated list of arguments
*/
#define CPL_MAP(M, S, ...) CPL_MAP_IMPL(M, S, __VA_ARGS__)
/**
* Apply \p{M()} to each argument of \p{...}, taking the tuple \p{F} as
* parameter of \p{M()}, and separate calls to \p{M()} with the expansion of
* \p{S()}.
*
* - \p{S()} is not called if there is only 1 call to \p{M()}.
*
* @expansion{
* CPL_MAP_FIXED(M, S, (F),) => M(F,)
* CPL_MAP_FIXED(M, S, (F), a) => M(F, a)
* CPL_MAP_FIXED(M, S, ((F)), a) => M((F), a)
* CPL_MAP_FIXED(M, S, (F), a, (b), c) => M(F, a) S() M(F, (b)) S() M(F, c)
* CPL_MAP_FIXED(M, S, (F, G), a, b, c) => M(F, G, a) S() M(F, G, b) S() M(F, G, c)
* }
*
* @param M : Called as \p{M()} and applied to each arguments of \p{...}
* @param S : Called as \p{S()} and inserted between two calls of \p{M()}
* @param F : Tuple of arguments inserted at the begining of the \p{M()}
* parameters list
* @param ... : Comma separated list of arguments
*/
#define CPL_MAP_FIXED(M, S, F, ...) CPL_MAP_FIXED_IMPL(M, S, F, __VA_ARGS__)
/*==============================================================================
GUARD
==============================================================================*/
#endif // CPL_MAP_H_20190728222334
// SPDX-License-Identifier: 0BSD
/*!
* @file
* @license{
* BSD Zero Clause License
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
* }
*
* @brief
* Provide macro functions expanding to various ASCII characters.
*/
/*==============================================================================
GUARD
==============================================================================*/
#ifndef CPL_TOKEN_H_20190729153536
#define CPL_TOKEN_H_20190729153536
/*==============================================================================
PREPROCESSOR
==============================================================================*/
#define CPL_COMMA(...) ,
#define CPL_EMPTY(...)
#define CPL_SEMICOLON(...) ;
/*==============================================================================
GUARD
==============================================================================*/
#endif // CPL_TOKEN_H_20190729153536
This diff is collapsed.
// SPDX-License-Identifier: 0BSD
/*!
* @file
* @license{
* BSD Zero Clause License
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
* }
*
* @brief
* Provide miscellaneous simple macros.
*/
/*==============================================================================
GUARD
==============================================================================*/
#ifndef CPL_UTIL_H_20190808212721
#define CPL_UTIL_H_20190808212721
/*==============================================================================
PREPROCESSOR
==============================================================================*/
/**
* Delay the call to \p{M()}, allowing \p{...} to be expanded before being
* passed as arguments to \p{M()}.
*
* @param M : Macro to call
* @param ... : Comma separated list of arguments to be passed to \p{M()}
*
* @expansion{
* #define A foo, bar
* #define B baz
* CPL_DEFER(M, foo, bar) => M(foo, bar)
* CPL_DEFER(M, A, B) => M(foo, bar, baz)
* #define M(...) __VA_ARGS__
* CPL_DEFER(M, foo, bar) => foo, bar
* CPL_DEFER(M, A, B) => foo, bar, baz
* }
*/
#define CPL_DEFER(M, ...) M(__VA_ARGS__)
/*==============================================================================
GUARD
==============================================================================*/
#endif // CPL_UTIL_H_20190808212721
This diff is collapsed.
// SPDX-License-Identifier: 0BSD
/*
* @license{
* BSD Zero Clause License
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
* }
*/
/*==============================================================================
GUARD
==============================================================================*/
#ifndef CPL_MAP_GEN_H
#define CPL_MAP_GEN_H
/*==============================================================================
PREPROCESSOR
==============================================================================*/
#define CPL_MAP_FIXED_2(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_1(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_3(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_2(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_4(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_3(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_5(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_4(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_6(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_5(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_7(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_6(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_8(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_7(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_9(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_8(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_10(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_9(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_11(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_10(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_12(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_11(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_13(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_12(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_14(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_13(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_15(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_14(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_16(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_15(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_17(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_16(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_18(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_17(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_19(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_18(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_20(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_19(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_21(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_20(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_22(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_21(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_23(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_22(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_24(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_23(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_25(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_24(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_26(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_25(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_27(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_26(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_28(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_27(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_29(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_28(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_30(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_29(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_31(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_30(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_32(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_31(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_33(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_32(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_34(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_33(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_35(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_34(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_36(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_35(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_37(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_36(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_38(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_37(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_39(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_38(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_40(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_39(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_41(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_40(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_42(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_41(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_43(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_42(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_44(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_43(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_45(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_44(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_46(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_45(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_47(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_46(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_48(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_47(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_49(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_48(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_50(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_49(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_51(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_50(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_52(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_51(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_53(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_52(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_54(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_53(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_55(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_54(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_56(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_55(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_57(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_56(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_58(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_57(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_59(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_58(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_60(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_59(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_61(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_60(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_62(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_61(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_63(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_62(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_64(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_63(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_65(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_64(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_66(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_65(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_67(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_66(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_68(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_67(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_69(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_68(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_70(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_69(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_71(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_70(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_72(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_71(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_73(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_72(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_74(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_73(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_75(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_74(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_76(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_75(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_77(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_76(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_78(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_77(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_79(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_78(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_80(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_79(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_81(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_80(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_82(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_81(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_83(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_82(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_84(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_83(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_85(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_84(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_86(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_85(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_87(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_86(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_88(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_87(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_89(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_88(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_90(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_89(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_91(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_90(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_92(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_91(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_93(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_92(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_94(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_93(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_95(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_94(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_96(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_95(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_97(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_96(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_98(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_97(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_99(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_98(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_100(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_99(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_101(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_100(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_102(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_101(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_103(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_102(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_104(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_103(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_105(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_104(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_106(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_105(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_107(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_106(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_108(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_107(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_109(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_108(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_110(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_109(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_111(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_110(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_112(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_111(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_113(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_112(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_114(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_113(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_115(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_114(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_116(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_115(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_117(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_116(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_118(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_117(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_119(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_118(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_120(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_119(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_121(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_120(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_122(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_121(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_123(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_122(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_124(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_123(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_125(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_124(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_126(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_125(M, S, F, __VA_ARGS__)
#define CPL_MAP_FIXED_127(M, S, F, A, ...) CPL_MAP_FIXED_1(M, S, F, A) S() CPL_MAP_FIXED_126(M, S, F, __VA_ARGS__)
/*==============================================================================
GUARD
==============================================================================*/
#endif // CPL_MAP_GEN_H
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment