23 #include "LvArray/src/Macros.hpp"
25 #ifndef GEOS_COMMON_GEOSXMACROS_HPP_
26 #define GEOS_COMMON_GEOSXMACROS_HPP_
37 #if defined(GEOS_USE_DEVICE)
38 #define GEOS_HOST __host__
39 #define GEOS_DEVICE __device__
40 #define GEOS_HOST_DEVICE __host__ __device__
41 #define GEOS_FORCE_INLINE __forceinline__
42 #define PRAGMA_UNROLL _Pragma("unroll")
49 #define GEOS_HOST_DEVICE
51 #define GEOS_FORCE_INLINE inline
56 #if defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__)
58 #define GEOS_DEVICE_COMPILE
76 #define GEOS_NV_HOST_DEVICE_DIAG_SUPPRESS _Pragma("nv_diag_suppress 20011") _Pragma("nv_diag_suppress 20014")
78 #define GEOS_NV_HOST_DEVICE_DIAG_DEFAULT _Pragma("nv_diag_default 20011") _Pragma("nv_diag_default 20014")
81 #define GEOS_NV_HOST_DEVICE_DIAG_SUPPRESS
82 #define GEOS_NV_HOST_DEVICE_DIAG_DEFAULT
97 #define GEOS_UNUSED_PARAM( X )
104 template<
typename ... ARGS >
109 #define GEOS_UNUSED_VAR( ... ) i_g_n_o_r_e( __VA_ARGS__ )
112 #define GEOS_DEBUG_VAR( ... ) GEOS_UNUSED_VAR( __VA_ARGS__ )
116 #if defined(GEOS_USE_OPENMP)
118 #define PRAGMA_OMP( clause ) _Pragma( clause )
122 #define PRAGMA_OMP( clause )
126 #define GEOS_RESTRICT LVARRAY_RESTRICT
129 #define GEOS_RESTRICT_THIS LVARRAY_RESTRICT_THIS
132 #define GEOS_DECLTYPE_AUTO_RETURN decltype( auto )
135 #define GEOS_CONCAT_IMPL( A, B ) A ## B
138 #define GEOS_CONCAT( A, B ) GEOS_CONCAT_IMPL( A, B )
144 #if __cplusplus >= 201703L
145 #define GEOS_MAYBE_UNUSED [[maybe_unused]]
150 #define GEOS_MAYBE_UNUSED __pragma(warning(suppress: 4100))
151 #elif defined(__GNUC__) || defined(__clang__)
153 #define GEOS_MAYBE_UNUSED __attribute__((unused))
157 #define GEOS_MAYBE_UNUSED
169 #define GEOS_DETAIL_MORE_THAN_ONE_ARG_VALUE( _00, _01, _02, _03, _04, _05, _06, _07, \
170 _08, _09, _10, _11, _12, _13, _14, _15, \
177 #define GEOS_DETAIL_MORE_THAN_ONE_ARG( ... ) \
178 GEOS_DETAIL_MORE_THAN_ONE_ARG_VALUE( __VA_ARGS__, \
179 true, true, true, true, true, true, true, true, \
180 true, true, true, true, true, true, true, false, false )
185 #define GEOS_DETAIL_FIRST_ARG_false( FIRST ) FIRST
186 #define GEOS_DETAIL_FIRST_ARG_true( FIRST, ... ) FIRST
187 #define GEOS_DETAIL_FIRST_ARG_FUNC( COND ) GEOS_DETAIL_FIRST_ARG_ ## COND
188 #define GEOS_DETAIL_FIRST_ARG_DISPATCH( COND, ... ) GEOS_DETAIL_FIRST_ARG_FUNC( COND )(__VA_ARGS__)
191 #define GEOS_DETAIL_REST_ARGS_false( FIRST )
192 #define GEOS_DETAIL_REST_ARGS_true( FIRST, ... ) __VA_ARGS__
193 #define GEOS_DETAIL_REST_ARGS_FUNC( COND ) GEOS_DETAIL_REST_ARGS_ ## COND
194 #define GEOS_DETAIL_REST_ARGS_DISPATCH( COND, ... ) GEOS_DETAIL_REST_ARGS_FUNC( COND )(__VA_ARGS__)
197 #define GEOS_DETAIL_REST_PREP_ARGS_false( FIRST )
198 #define GEOS_DETAIL_REST_PREP_ARGS_true( FIRST, ... ) , __VA_ARGS__
199 #define GEOS_DETAIL_REST_PREP_ARGS_FUNC( COND ) GEOS_DETAIL_REST_PREP_ARGS_ ## COND
200 #define GEOS_DETAIL_REST_PREP_ARGS_DISPATCH( COND, ... ) GEOS_DETAIL_REST_PREP_ARGS_FUNC( COND )(__VA_ARGS__)
208 #define GEOS_DETAIL_FIRST_ARG( ... ) GEOS_DETAIL_FIRST_ARG_DISPATCH( GEOS_DETAIL_MORE_THAN_ONE_ARG( __VA_ARGS__ ), \
215 #define GEOS_DETAIL_REST_ARGS( ... ) GEOS_DETAIL_REST_ARGS_DISPATCH( GEOS_DETAIL_MORE_THAN_ONE_ARG( __VA_ARGS__ ), \
223 #define GEOS_DETAIL_REST_PREP_ARGS( ... ) GEOS_DETAIL_REST_PREP_ARGS_DISPATCH( GEOS_DETAIL_MORE_THAN_ONE_ARG( __VA_ARGS__ ), \
226 namespace geos::internal
233 struct DeviceNullStream
#define GEOS_HOST_DEVICE
Marks a host-device function.
constexpr void i_g_n_o_r_e(ARGS const &...)
Used to silence unused variable warnings, cuda doesn't respect casting to void.
std::ostream & operator<<(std::ostream &stream, mapType< K, V, SORTED > const &map)
Stream output operator for map types.