alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
PP.hpp
Go to the documentation of this file.
1/* Copyright 2024 René Widera
2 * SPDX-License-Identifier: MPL-2.0
3 */
4
5#pragma once
6
7#define ALPAKA_PP_CAT(left, right) left##right
8#define ALPAKA_PP_REMOVE_FIRST_COMMA_DO(ignore, ...) __VA_ARGS__
9#define ALPAKA_PP_REMOVE_FIRST_COMMA(...) ALPAKA_PP_REMOVE_FIRST_COMMA_DO(0 __VA_ARGS__)
10
11/** solution from https://stackoverflow.com/a/62984543
12 * @{
13 */
14#define ALPAKA_PP_REMOVE_BRACKETS_DO(X) ALPAKAESC(ISHALPAKA X)
15#define ISHALPAKA(...) ISHALPAKA __VA_ARGS__
16#define ALPAKAESC(...) ALPAKAESC_(__VA_ARGS__)
17#define ALPAKAESC_(...) VAN##__VA_ARGS__
18#define VANISHALPAKA
19/** @} */
20
21#define ALPAKA_PP_REMOVE_BRACKETS(x) ALPAKA_PP_REMOVE_BRACKETS_DO(x)
22
23/* version number encoding
24 * 4 digits for major version (max 9999)
25 * 3 digits for minor version (max 999)
26 * 5 digits for patch version (max 99999)
27 * example: version 1.2.3 -> 0001 002 00003
28 */
29#define ALPAKA_VERSION_NUMBER(major, minor, patch) \
30 ((((major) % 10000llu) * 100'000'000llu) + (((minor) % 1000llu) * 100000llu) + ((patch) % 100000llu))
31
32#define ALPAKA_VERSION_NUMBER_NOT_AVAILABLE ALPAKA_VERSION_NUMBER(0llu, 0llu, 0llu)
33#define ALPAKA_VERSION_NUMBER_UNKNOWN ALPAKA_VERSION_NUMBER(9999llu, 999llu, 99999llu)
34
35// version number conversion from vendor format to ALPAKA_VERSION_NUMBER
36#define ALPAKA_YYYYMMDD_TO_VERSION(V) ALPAKA_VERSION_NUMBER(((V) / 10000llu), ((V) / 100llu) % 100llu, (V) % 100llu)
37
38#define ALPAKA_YYYYMM_TO_VERSION(V) ALPAKA_VERSION_NUMBER(((V) / 100llu) % 10000llu, (V) % 100llu, 0llu)
39
40#define ALPAKA_VVRRP_TO_VERSION(V) \
41 ALPAKA_VERSION_NUMBER(((V) / 1000llu) % 10000llu, ((V) / 10llu) % 100llu, (V) % 10llu)
42
43#define ALPAKA_VRP_TO_VERSION(V) ALPAKA_VERSION_NUMBER(((V) / 100llu) % 10000llu, ((V) / 10llu) % 10llu, (V) % 10llu)
44
45#define ALPAKA_VRRPP_TO_VERSION(V) \
46 ALPAKA_VERSION_NUMBER(((V) / 10000llu) % 10000llu, ((V) / 100llu) % 100llu, (V) % 100llu)