20260829 Redesign
This commit is contained in:
+119
@@ -0,0 +1,119 @@
|
||||
#ifndef INCLUDED_C_MACROS_H
|
||||
#define INCLUDED_C_MACROS_H
|
||||
|
||||
#ifndef INCLUDED_MATH_H
|
||||
#define INCLUDED_MATH_H
|
||||
#include <math.h>
|
||||
#endif /*INCLUDED_MATH_H*/
|
||||
|
||||
#ifndef INCLUDED_C_TYPES_H
|
||||
#include <c_Types.h>
|
||||
#endif /*INCLUDED_C_TYPES_H*/
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
|
||||
#define C_MIN(a, b) ((a) < (b) ? (a) : (b))
|
||||
#define C_MAX(a, b) ((a) > (b) ? (a) : (b))
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
|
||||
#define C_RAD2DEG(x) ((x)/M_PI*180.0)
|
||||
#define C_DEG2RAD(x) ((x)*M_PI/180.0)
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
|
||||
#define C_ALIGN_UPB(x, align) (((x) + ((align) - 1)) & ~((align) - 1))
|
||||
#define C_ALIGN_UP(x, align) ((((x) + ((align) - 1)) / (align)) * (align))
|
||||
|
||||
#define C_ALIGN_DOWNB(x, align) ((x) & ~((align) - 1))
|
||||
#define C_ALIGN_DOWN(x, align) (((x) / (align)) * (align))
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
|
||||
#define C_CLIP(x, min, max) (((x) < (min)) ? (min) : \
|
||||
(((x) > (max)) ? (max) : (x)))
|
||||
|
||||
#define C_MAX_CLIP(x, max) (((x) > (max)) ? (max) : (x))
|
||||
#define C_MIN_CLIP(x, min) (((x) < (min)) ? (min) : (x))
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
|
||||
#define C_ABS(x) (((x) < 0) ? -(x) : (x))
|
||||
#define C_DIFF(a,b) C_ABS((a)-(b))
|
||||
#define C_IS_NAN(x) ((x) != (x))
|
||||
#define C_COMPARE(x, y) (((x) > (y)) - ((x) < (y)))
|
||||
#define C_SIGN(x) C_COMPARE(x, 0)
|
||||
#define C_IS_ODD( num ) ((num) & 1)
|
||||
#define C_IS_EVEN( num ) (!IS_ODD( (num) ))
|
||||
#define C_IS_BETWEEN(n,L,H) ((unsigned char)((n) >= (L) && (n) <= (H)))
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
|
||||
|
||||
#define C_BIT(x) (1<<(x))
|
||||
#define C_BIT_SET(x,p) ((x)|(1<<(p)))
|
||||
#define C_BIT_CLEAR(x,p) ((x)&(~(1<<(p))))
|
||||
#define C_BIT_GET(x,p) (((x)>>(p))&1)
|
||||
#define C_BIT_TOGGLE(x,p) ((x)^(1<<(p)))
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
|
||||
#define C_ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
|
||||
#define C_SET(d, n, v) do{ c_size_t i_, n_; \
|
||||
for ( n_ = (n), i_ = 0; n_ > 0; --n_, ++i_) \
|
||||
(d)[i_] = (v); } while(0)
|
||||
#define C_ZERO(d, n) C_SET(d, n, 0)
|
||||
#define C_COLUMNS(S,E) ( (E) - (S) + 1 )
|
||||
#define C_IS_ARRAY(a) ((void *)&a == (void *)a)
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
|
||||
#define C_STMT( stuff ) do { stuff } while (0)
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
|
||||
// 1. 底层拼接宏(真正执行拼接)
|
||||
#define C_UNIQUE_NAME_CONCAT(a, b) a ## b
|
||||
|
||||
// 2. 中间转换宏(强制将 __LINE__ 或 __COUNTER__ 展开为实际的数字/符号)
|
||||
#define C_UNIQUE_NAME_EVAL(a, b) C_UNIQUE_NAME_CONCAT(a, b)
|
||||
|
||||
// 3. 面向用户的唯一名称生成宏
|
||||
#if defined(__COUNTER__)
|
||||
// 工业级推荐:__COUNTER__ 从 0 开始,每次调用自动递增,保证绝对唯一
|
||||
#define C_UNIQUE_NAME(prefix) C_UNIQUE_NAME_EVAL(prefix, __COUNTER__)
|
||||
#else
|
||||
// 兼容标准:__LINE__ 使用当前行号,同一行内多次调用可能会冲突
|
||||
#define C_UNIQUE_NAME(prefix) C_UNIQUE_NAME_EVAL(prefix, __LINE__)
|
||||
#endif
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
|
||||
#define C_ONCE2(stmts, var) {static int var = 1;\
|
||||
if(var){stmts\
|
||||
var = 0;}}
|
||||
#define C_ONCE(stmts) C_ONCE2(stmts, C_UNIQUE_NAME(__onceVar__))
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
|
||||
#define C_CONTAINER_OF(ptr, type, member) \
|
||||
((type *)( (char *)(ptr) - offsetof(type, member) ))
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
|
||||
#define C_UNUSED(x) ((void)(x))
|
||||
|
||||
#endif /*INCLUDED_C_MACROS_H*/
|
||||
Reference in New Issue
Block a user