5#include <libxr_mem.hpp>
9#define M_PI 3.14159265358979323846
13#define M_2PI (2.0 * M_PI)
19constexpr double M_1G = 9.80665;
23#define XR_TO_STR(_arg) #_arg
24#define DEF2STR(_arg) XR_TO_STR(_arg)
30#define UNUSED(_x) ((void)(_x))
36#define OFFSET_OF(type, member) ((size_t)&((type *)0)->member)
42#define MEMBER_SIZE_OF(type, member) (sizeof(decltype(((type *)0)->member)))
48#define CONTAINER_OF(ptr, type, member) \
49 ((type *)((char *)(ptr) - OFFSET_OF(type, member)))
53static constexpr size_t LIBXR_CACHE_LINE_SIZE = (
sizeof(
void *) == 8) ? 64 : 32;
54static constexpr size_t LIBXR_ALIGN_SIZE = (
sizeof(
void *));
61enum class ErrorCode : int8_t
88enum class SizeLimitMode : uint8_t
100#ifdef LIBXR_DEBUG_BUILD
111 libxr_fatal_error(__FILE__, __LINE__, false); \
120#define ASSERT_ISR(arg) \
125 libxr_fatal_error(__FILE__, __LINE__, true); \
129#define ASSERT(arg) (void(arg), (void)0)
130#define ASSERT_ISR(arg) (void(arg), (void)0)
140extern void libxr_fatal_error(
const char *file, uint32_t line,
bool in_isr);
144using ErrorCode = ErrorCode;
145using SizeLimitMode = SizeLimitMode;
156template <
typename T1,
typename T2>
157constexpr auto max(T1 a, T2 b) ->
typename std::common_type<T1, T2>::type
159 return (a > b) ? a : b;
171template <
typename T1,
typename T2>
172constexpr auto min(T1 a, T2 b) ->
typename std::common_type<T1, T2>::type
174 return (a < b) ? a : b;
constexpr auto max(T1 a, T2 b) -> typename std::common_type< T1, T2 >::type
计算两个数的最大值
constexpr auto min(T1 a, T2 b) -> typename std::common_type< T1, T2 >::type
计算两个数的最小值