vcpe/srcs/libs/include/common.h

94 lines
2.4 KiB
C

//
// Created by xajhuang on 2023/3/17.
//
#ifndef VCPE_COMMON_H
#define VCPE_COMMON_H
#ifdef __cplusplus
extern "C" {
#endif
#define _STR(s) #s
#define STR(s) _STR(s)
/**
* container_of - cast a member of a structure out to the containing structure
*
* @ptr: the pointer to the member.
* @type: the type of the container struct this is embedded in.
* @member: the name of the member within the struct.
*
*/
#define container_of(ptr, type, member) \
({ \
const typeof(((type *)0)->member) *__mptr = (ptr); \
(type *)((char *)__mptr - offsetof(type, member)); \
})
#ifndef MIN
#define MIN(a, b) \
({ \
typeof(a) __min1__ = (a); \
typeof(b) __min2__ = (b); \
(void)(&__min1__ == &__min2__); \
__min1__ < __min2__ ? __min1__ : __min2__; \
})
#endif
#ifndef MAX
#define MAX(a, b) \
({ \
typeof(a) __max1__ = (a); \
typeof(b) __max2__ = (b); \
(void)(&__max1__ == &__max2__); \
__max1__ > __max2__ ? __max1__ : __max2__; \
})
#endif
#ifndef ARRAY_SIZE
//#ifdef __cplusplus
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
//#else
//#define ARRAY_SIZE_TYPE_CHECK(a) (sizeof(typeof(int[1 - 2 * !!__builtin_types_compatible_p(typeof(a), typeof(&a[0]))])))
//#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]) + ARRAY_SIZE_TYPE_CHECK(a) * 0)
//#endif
#endif
#ifndef UNUSED
#define UNUSED(x) UNUSED_##x __attribute__((__unused__))
#endif
#ifndef MAX_PATH
#define MAX_PATH (512)
#endif
#ifndef TRUE
#define TRUE (1)
#endif
#ifndef FALSE
#define FALSE (0)
#endif
#define VERIFY_STRING(s) (((s) != NULL) && (strlen(s) > 0))
#define SAFETY_STR_STRING(s, defval) ((s) == NULL ? (defval) : (s))
#define MAX_IP_V4_STR (16)
#define MAX_MAC_ADDR_STR (18)
#define DEBUG_CODE_LINE() LOG_MSG(debug, "\n")
typedef unsigned char U8;
typedef unsigned short U16;
typedef unsigned int U32;
typedef unsigned long long U64;
typedef char S8;
typedef short S16;
typedef int S32;
typedef long long S64;
#ifdef __cplusplus
}
#endif
#endif //VCPE_COMMON_H