TDE 0.1.0
 
Loading...
Searching...
No Matches
common.hpp
Go to the documentation of this file.
1
12#pragma once
13
14#include <memory> // IWYU pragma: keep
15
16#define _TDE_FORWARD(x) x
17#define _TDE_CONCAT(a, b) a##b
18#define _TDE_STR_IMPL(x) #x
19#define _TDE_STR(x) _TDE_STR_IMPL(x)
20
21#if defined _WIN32 || defined __CYGWIN__
22#ifdef BUILDING_TDE
23#define TDE_PUBLIC __declspec(dllexport)
24#else
25#define TDE_PUBLIC __declspec(dllimport)
26#endif
27#else
28#ifdef BUILDING_TDE
29#define TDE_PUBLIC __attribute__((visibility("default")))
30#else
31#define TDE_PUBLIC
32#endif
33#endif
34
35#if defined _WIN32 || defined __CYGWIN__
36#define TDE_INLINE inline __forceinline
37#else
38#define TDE_INLINE inline __attribute__((always_inline))
39#endif
40
41#if defined __clang__
42#define TDE_CXX_NAME "Clang "
43#define TDE_CXX_VERSION __clang_version__
44#elif defined __GNUC__
45#define TDE_CXX_NAME "GCC "
46#define TDE_CXX_VERSION \
47 _TDE_STR(__GNUC__) \
48 "." _TDE_STR(__GNUC_MINOR__) "." _TDE_STR(__GNUC_PATCHLEVEL__)
49#else
50#defube TDE_CXX_NAME "unknown "
51#define TDE_CXX_VERSION "unknown"
52#endif
53
54// NOLINTNEXTLINE
55#define _tde_defer_impl(expr, cb_name, ph_name, line) \
56 auto _TDE_CONCAT(cb_name, line) = [&](int*) { expr; }; \
57 std::unique_ptr<int, decltype(_TDE_CONCAT(cb_name, line))> _TDE_CONCAT( \
58 ph_name, line) \
59 { \
60 nullptr, _TDE_CONCAT(cb_name, line) \
61 }
62
63// NOLINTNEXTLINE
64#define tde_defer(expr) \
65 _tde_defer_impl(expr, _tde_defer_cb_, _tde_defer_ph_, __LINE__)