📄 gtypes.h
字号:
(__extension__ \ ({ register guint16 __v, __x = ((guint16) (val)); \ if (__builtin_constant_p (__x)) \ __v = GUINT16_SWAP_LE_BE_CONSTANT (__x); \ else \ __asm__ __volatile__ ("shl %0 = %1, 48 ;;" \ "mux1 %0 = %0, @rev ;;" \ : "=r" (__v) \ : "r" (__x)); \ __v; }))# define GUINT32_SWAP_LE_BE_IA64(val) \ (__extension__ \ ({ register guint32 __v, __x = ((guint32) (val)); \ if (__builtin_constant_p (__x)) \ __v = GUINT32_SWAP_LE_BE_CONSTANT (__x); \ else \ __asm__ __volatile__ ("shl %0 = %1, 32 ;;" \ "mux1 %0 = %0, @rev ;;" \ : "=r" (__v) \ : "r" (__x)); \ __v; }))# define GUINT64_SWAP_LE_BE_IA64(val) \ (__extension__ \ ({ register guint64 __v, __x = ((guint64) (val)); \ if (__builtin_constant_p (__x)) \ __v = GUINT64_SWAP_LE_BE_CONSTANT (__x); \ else \ __asm__ __volatile__ ("mux1 %0 = %1, @rev ;;" \ : "=r" (__v) \ : "r" (__x)); \ __v; }))# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_IA64 (val))# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_IA64 (val))# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_IA64 (val))# elif defined (__x86_64__)# define GUINT32_SWAP_LE_BE_X86_64(val) \ (__extension__ \ ({ register guint32 __v, __x = ((guint32) (val)); \ if (__builtin_constant_p (__x)) \ __v = GUINT32_SWAP_LE_BE_CONSTANT (__x); \ else \ __asm__ ("bswapl %0" \ : "=r" (__v) \ : "0" (__x)); \ __v; }))# define GUINT64_SWAP_LE_BE_X86_64(val) \ (__extension__ \ ({ register guint64 __v, __x = ((guint64) (val)); \ if (__builtin_constant_p (__x)) \ __v = GUINT64_SWAP_LE_BE_CONSTANT (__x); \ else \ __asm__ ("bswapq %0" \ : "=r" (__v) \ : "0" (__x)); \ __v; })) /* gcc seems to figure out optimal code for this on its own */# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_CONSTANT (val))# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_X86_64 (val))# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_X86_64 (val))# else /* generic gcc */# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_CONSTANT (val))# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_CONSTANT (val))# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_CONSTANT (val))# endif#else /* generic */# define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_CONSTANT (val))# define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_CONSTANT (val))# define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_CONSTANT (val))#endif /* generic */#define GUINT16_SWAP_LE_PDP(val) ((guint16) (val))#define GUINT16_SWAP_BE_PDP(val) (GUINT16_SWAP_LE_BE (val))#define GUINT32_SWAP_LE_PDP(val) ((guint32) ( \ (((guint32) (val) & (guint32) 0x0000ffffU) << 16) | \ (((guint32) (val) & (guint32) 0xffff0000U) >> 16)))#define GUINT32_SWAP_BE_PDP(val) ((guint32) ( \ (((guint32) (val) & (guint32) 0x00ff00ffU) << 8) | \ (((guint32) (val) & (guint32) 0xff00ff00U) >> 8)))/* The G*_TO_?E() macros are defined in glibconfig.h. * The transformation is symmetric, so the FROM just maps to the TO. */#define GINT16_FROM_LE(val) (GINT16_TO_LE (val))#define GUINT16_FROM_LE(val) (GUINT16_TO_LE (val))#define GINT16_FROM_BE(val) (GINT16_TO_BE (val))#define GUINT16_FROM_BE(val) (GUINT16_TO_BE (val))#define GINT32_FROM_LE(val) (GINT32_TO_LE (val))#define GUINT32_FROM_LE(val) (GUINT32_TO_LE (val))#define GINT32_FROM_BE(val) (GINT32_TO_BE (val))#define GUINT32_FROM_BE(val) (GUINT32_TO_BE (val))#define GINT64_FROM_LE(val) (GINT64_TO_LE (val))#define GUINT64_FROM_LE(val) (GUINT64_TO_LE (val))#define GINT64_FROM_BE(val) (GINT64_TO_BE (val))#define GUINT64_FROM_BE(val) (GUINT64_TO_BE (val))#define GLONG_FROM_LE(val) (GLONG_TO_LE (val))#define GULONG_FROM_LE(val) (GULONG_TO_LE (val))#define GLONG_FROM_BE(val) (GLONG_TO_BE (val))#define GULONG_FROM_BE(val) (GULONG_TO_BE (val))#define GINT_FROM_LE(val) (GINT_TO_LE (val))#define GUINT_FROM_LE(val) (GUINT_TO_LE (val))#define GINT_FROM_BE(val) (GINT_TO_BE (val))#define GUINT_FROM_BE(val) (GUINT_TO_BE (val))/* Portable versions of host-network order stuff */#define g_ntohl(val) (GUINT32_FROM_BE (val))#define g_ntohs(val) (GUINT16_FROM_BE (val))#define g_htonl(val) (GUINT32_TO_BE (val))#define g_htons(val) (GUINT16_TO_BE (val))/* IEEE Standard 754 Single Precision Storage Format (gfloat): * * 31 30 23 22 0 * +--------+---------------+---------------+ * | s 1bit | e[30:23] 8bit | f[22:0] 23bit | * +--------+---------------+---------------+ * B0------------------->B1------->B2-->B3--> * * IEEE Standard 754 Double Precision Storage Format (gdouble): * * 63 62 52 51 32 31 0 * +--------+----------------+----------------+ +---------------+ * | s 1bit | e[62:52] 11bit | f[51:32] 20bit | | f[31:0] 32bit | * +--------+----------------+----------------+ +---------------+ * B0--------------->B1---------->B2--->B3----> B4->B5->B6->B7-> *//* subtract from biased_exponent to form base2 exponent (normal numbers) */typedef union _GDoubleIEEE754 GDoubleIEEE754;typedef union _GFloatIEEE754 GFloatIEEE754;#define G_IEEE754_FLOAT_BIAS (127)#define G_IEEE754_DOUBLE_BIAS (1023)/* multiply with base2 exponent to get base10 exponent (normal numbers) */#define G_LOG_2_BASE_10 (0.30102999566398119521)#if G_BYTE_ORDER == G_LITTLE_ENDIANunion _GFloatIEEE754{ gfloat v_float; struct { guint mantissa : 23; guint biased_exponent : 8; guint sign : 1; } mpn;};union _GDoubleIEEE754{ gdouble v_double; struct { guint mantissa_low : 32; guint mantissa_high : 20; guint biased_exponent : 11; guint sign : 1; } mpn;};#elif G_BYTE_ORDER == G_BIG_ENDIANunion _GFloatIEEE754{ gfloat v_float; struct { guint sign : 1; guint biased_exponent : 8; guint mantissa : 23; } mpn;};union _GDoubleIEEE754{ gdouble v_double; struct { guint sign : 1; guint biased_exponent : 11; guint mantissa_high : 20; guint mantissa_low : 32; } mpn;};#else /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */#error unknown ENDIAN type#endif /* !G_LITTLE_ENDIAN && !G_BIG_ENDIAN */typedef struct _GTimeVal GTimeVal;struct _GTimeVal{ glong tv_sec; glong tv_usec;};G_END_DECLS/* We prefix variable declarations so they can * properly get exported in Windows DLLs. */#ifndef GLIB_VAR# ifdef G_PLATFORM_WIN32# ifdef GLIB_STATIC_COMPILATION# define GLIB_VAR extern# else /* !GLIB_STATIC_COMPILATION */# ifdef GLIB_COMPILATION# ifdef DLL_EXPORT# define GLIB_VAR __declspec(dllexport)# else /* !DLL_EXPORT */# define GLIB_VAR extern# endif /* !DLL_EXPORT */# else /* !GLIB_COMPILATION */# define GLIB_VAR extern __declspec(dllimport)# endif /* !GLIB_COMPILATION */# endif /* !GLIB_STATIC_COMPILATION */# else /* !G_PLATFORM_WIN32 */# define GLIB_VAR extern# endif /* !G_PLATFORM_WIN32 */#endif /* GLIB_VAR */#endif /* __G_TYPES_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -