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
72 #define GEOS_UNUSED_PARAM( X )
79 template<
typename ... ARGS >
84 #define GEOS_UNUSED_VAR( ... ) i_g_n_o_r_e( __VA_ARGS__ )
87 #define GEOS_DEBUG_VAR( ... ) GEOS_UNUSED_VAR( __VA_ARGS__ )
91 #if defined(GEOS_USE_OPENMP)
93 #define PRAGMA_OMP( clause ) _Pragma( clause )
97 #define PRAGMA_OMP( clause )
101 #define GEOS_RESTRICT LVARRAY_RESTRICT
104 #define GEOS_RESTRICT_THIS LVARRAY_RESTRICT_THIS
107 #define GEOS_DECLTYPE_AUTO_RETURN decltype( auto )
110 #define GEOS_CONCAT_IMPL( A, B ) A ## B
113 #define GEOS_CONCAT( A, B ) GEOS_CONCAT_IMPL( A, B )
119 #if __cplusplus >= 201703L
120 #define GEOS_MAYBE_UNUSED [[maybe_unused]]
125 #define GEOS_MAYBE_UNUSED __pragma(warning(suppress: 4100))
126 #elif defined(__GNUC__) || defined(__clang__)
128 #define GEOS_MAYBE_UNUSED __attribute__((unused))
132 #define GEOS_MAYBE_UNUSED
144 #define GEOS_DETAIL_MORE_THAN_ONE_ARG_VALUE( _00, _01, _02, _03, _04, _05, _06, _07, \
145 _08, _09, _10, _11, _12, _13, _14, _15, \
152 #define GEOS_DETAIL_MORE_THAN_ONE_ARG( ... ) \
153 GEOS_DETAIL_MORE_THAN_ONE_ARG_VALUE( __VA_ARGS__, \
154 true, true, true, true, true, true, true, true, \
155 true, true, true, true, true, true, true, false, false )
160 #define GEOS_DETAIL_FIRST_ARG_false( FIRST ) FIRST
161 #define GEOS_DETAIL_FIRST_ARG_true( FIRST, ... ) FIRST
162 #define GEOS_DETAIL_FIRST_ARG_FUNC( COND ) GEOS_DETAIL_FIRST_ARG_ ## COND
163 #define GEOS_DETAIL_FIRST_ARG_DISPATCH( COND, ... ) GEOS_DETAIL_FIRST_ARG_FUNC( COND )(__VA_ARGS__)
166 #define GEOS_DETAIL_REST_ARGS_false( FIRST )
167 #define GEOS_DETAIL_REST_ARGS_true( FIRST, ... ) __VA_ARGS__
168 #define GEOS_DETAIL_REST_ARGS_FUNC( COND ) GEOS_DETAIL_REST_ARGS_ ## COND
169 #define GEOS_DETAIL_REST_ARGS_DISPATCH( COND, ... ) GEOS_DETAIL_REST_ARGS_FUNC( COND )(__VA_ARGS__)
172 #define GEOS_DETAIL_REST_PREP_ARGS_false( FIRST )
173 #define GEOS_DETAIL_REST_PREP_ARGS_true( FIRST, ... ) , __VA_ARGS__
174 #define GEOS_DETAIL_REST_PREP_ARGS_FUNC( COND ) GEOS_DETAIL_REST_PREP_ARGS_ ## COND
175 #define GEOS_DETAIL_REST_PREP_ARGS_DISPATCH( COND, ... ) GEOS_DETAIL_REST_PREP_ARGS_FUNC( COND )(__VA_ARGS__)
183 #define GEOS_DETAIL_FIRST_ARG( ... ) GEOS_DETAIL_FIRST_ARG_DISPATCH( GEOS_DETAIL_MORE_THAN_ONE_ARG( __VA_ARGS__ ), \
190 #define GEOS_DETAIL_REST_ARGS( ... ) GEOS_DETAIL_REST_ARGS_DISPATCH( GEOS_DETAIL_MORE_THAN_ONE_ARG( __VA_ARGS__ ), \
198 #define GEOS_DETAIL_REST_PREP_ARGS( ... ) GEOS_DETAIL_REST_PREP_ARGS_DISPATCH( GEOS_DETAIL_MORE_THAN_ONE_ARG( __VA_ARGS__ ), \
201 namespace geos::internal
208 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.