⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 glib.h

📁 本文档详细介绍了在WINDOWS下用VC6.0编译ORTP的方法,还有要用到的4个头文件
💻 H
📖 第 1 页 / 共 5 页
字号:
					"file %s: line %d: assertion failed: (%s)",   \
					__FILE__,                     \
					__LINE__,                     \
					#expr);           }G_STMT_END

#define g_assert_not_reached()      G_STMT_START{   \
		 g_log (G_LOG_DOMAIN,               \
				G_LOG_LEVEL_ERROR,              \
				"file %s: line %d: should not be reached",  \
				__FILE__,                   \
				__LINE__);      }G_STMT_END

#endif /* __GNUC__ */

#endif /* !G_DISABLE_ASSERT */


#ifdef G_DISABLE_CHECKS

#define g_return_if_fail(expr)
#define g_return_val_if_fail(expr,val)

#else /* !G_DISABLE_CHECKS */

#ifdef __GNUC__

#define g_return_if_fail(expr)      G_STMT_START{           \
		 if (!(expr))                           \
			 {                                \
		 g_log (G_LOG_DOMAIN,                       \
				G_LOG_LEVEL_CRITICAL,                   \
				"file %s: line %d (%s): assertion `%s' failed.",    \
				__FILE__,                       \
				__LINE__,                       \
				__PRETTY_FUNCTION__,                    \
				#expr);                         \
		 return;                            \
			 };               }G_STMT_END

#define g_return_val_if_fail(expr,val)  G_STMT_START{           \
		 if (!(expr))                           \
			 {                                \
		 g_log (G_LOG_DOMAIN,                       \
				G_LOG_LEVEL_CRITICAL,                   \
				"file %s: line %d (%s): assertion `%s' failed.",    \
				__FILE__,                       \
				__LINE__,                       \
				__PRETTY_FUNCTION__,                    \
				#expr);                         \
		 return val;                            \
			 };               }G_STMT_END

#else /* !__GNUC__ */

#define g_return_if_fail(expr)      G_STMT_START{       \
		 if (!(expr))                       \
			 {                            \
		 g_log (G_LOG_DOMAIN,                   \
				G_LOG_LEVEL_CRITICAL,               \
				"file %s: line %d: assertion `%s' failed.", \
				__FILE__,                   \
				__LINE__,                   \
				#expr);                     \
		 return;                        \
			 };               }G_STMT_END

#define g_return_val_if_fail(expr, val) G_STMT_START{       \
		 if (!(expr))                       \
			 {                            \
		 g_log (G_LOG_DOMAIN,                   \
				G_LOG_LEVEL_CRITICAL,               \
				"file %s: line %d: assertion `%s' failed.", \
				__FILE__,                   \
				__LINE__,                   \
				#expr);                     \
		 return val;                        \
			 };               }G_STMT_END

#endif /* !__GNUC__ */

#endif /* !G_DISABLE_CHECKS */


/* Provide type definitions for commonly used types.
 *  These are useful because a "gint8" can be adjusted
 *  to be 1 byte (8 bits) on all platforms. Similarly and
 *  more importantly, "gint32" can be adjusted to be
 *  4 bytes (32 bits) on all platforms.
 */

typedef char   gchar;
typedef short  gshort;
typedef long   glong;
typedef int    gint;
typedef gint   gboolean;

typedef unsigned char   guchar;
typedef unsigned short  gushort;
typedef unsigned long   gulong;
typedef unsigned int    guint;

typedef float   gfloat;
typedef double  gdouble;

/* HAVE_LONG_DOUBLE doesn't work correctly on all platforms.
 * Since gldouble isn't used anywhere, just disable it for now */

#if 0
#ifdef HAVE_LONG_DOUBLE
typedef long double gldouble;
#else /* HAVE_LONG_DOUBLE */
typedef double gldouble;
#endif /* HAVE_LONG_DOUBLE */
#endif /* 0 */

typedef void* gpointer;
typedef const void *gconstpointer;


typedef gint32  gssize;
typedef guint32 gsize;
typedef guint32 GQuark;
typedef gint32  GTime;


/* Portable endian checks and conversions
 *
 * glibconfig.h defines G_BYTE_ORDER which expands to one of
 * the below macros.
 */
#define G_LITTLE_ENDIAN 1234
#define G_BIG_ENDIAN    4321
#define G_PDP_ENDIAN    3412        /* unused, need specific PDP check */   


/* Basic bit swapping functions
 */
#define GUINT16_SWAP_LE_BE_CONSTANT(val)    ((guint16) ( \
		(((guint16) (val) & (guint16) 0x00ffU) << 8) | \
		(((guint16) (val) & (guint16) 0xff00U) >> 8)))
#define GUINT32_SWAP_LE_BE_CONSTANT(val)    ((guint32) ( \
		(((guint32) (val) & (guint32) 0x000000ffU) << 24) | \
		(((guint32) (val) & (guint32) 0x0000ff00U) <<  8) | \
		(((guint32) (val) & (guint32) 0x00ff0000U) >>  8) | \
		(((guint32) (val) & (guint32) 0xff000000U) >> 24)))

/* Intel specific stuff for speed
 */
#if defined (__i386__) && defined (__GNUC__) && __GNUC__ >= 2
#  define GUINT16_SWAP_LE_BE_X86(val) \
		 (__extension__                 \
			({ register guint16 __v;              \
		 if (__builtin_constant_p (val))        \
			 __v = GUINT16_SWAP_LE_BE_CONSTANT (val); \
		 else                       \
			 __asm__ __const__ ("rorw $8, %w0"        \
									: "=r" (__v)      \
									: "0" ((guint16) (val))); \
		__v; }))
#  define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_X86 (val))
#  if !defined(__i486__) && !defined(__i586__) \
			&& !defined(__pentium__) && !defined(__i686__) && !defined(__pentiumpro__)
#     define GUINT32_SWAP_LE_BE_X86(val) \
				(__extension__                      \
				 ({ register guint32 __v;               \
				if (__builtin_constant_p (val))         \
					__v = GUINT32_SWAP_LE_BE_CONSTANT (val);      \
			else                          \
				__asm__ __const__ ("rorw $8, %w0\n\t"       \
									 "rorl $16, %0\n\t"       \
									 "rorw $8, %w0"           \
									 : "=r" (__v)         \
									 : "0" ((guint32) (val)));    \
		__v; }))
#  else /* 486 and higher has bswap */
#     define GUINT32_SWAP_LE_BE_X86(val) \
				(__extension__                      \
				 ({ register guint32 __v;               \
				if (__builtin_constant_p (val))         \
					__v = GUINT32_SWAP_LE_BE_CONSTANT (val);      \
			else                          \
				__asm__ __const__ ("bswap %0"           \
									 : "=r" (__v)         \
									 : "0" ((guint32) (val)));    \
		__v; }))
#  endif /* processor specific 32-bit stuff */
#  define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_X86 (val))
#else /* !__i386__ */
#  define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_CONSTANT (val))
#  define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_CONSTANT (val))
#endif /* __i386__ */

#ifdef G_HAVE_GINT64
#  define GUINT64_SWAP_LE_BE_CONSTANT(val)  ((guint64) ( \
			(((guint64) (val) &                       \
		(guint64) G_GINT64_CONSTANT(0x00000000000000ffU)) << 56) |  \
			(((guint64) (val) &                       \
		(guint64) G_GINT64_CONSTANT(0x000000000000ff00U)) << 40) |  \
			(((guint64) (val) &                       \
		(guint64) G_GINT64_CONSTANT(0x0000000000ff0000U)) << 24) |  \
			(((guint64) (val) &                       \
		(guint64) G_GINT64_CONSTANT(0x00000000ff000000U)) <<  8) |  \
			(((guint64) (val) &                       \
		(guint64) G_GINT64_CONSTANT(0x000000ff00000000U)) >>  8) |  \
			(((guint64) (val) &                       \
		(guint64) G_GINT64_CONSTANT(0x0000ff0000000000U)) >> 24) |  \
			(((guint64) (val) &                       \
		(guint64) G_GINT64_CONSTANT(0x00ff000000000000U)) >> 40) |  \
			(((guint64) (val) &                       \
		(guint64) G_GINT64_CONSTANT(0xff00000000000000U)) >> 56)))
#  if defined (__i386__) && defined (__GNUC__) && __GNUC__ >= 2
#    define GUINT64_SWAP_LE_BE_X86(val) \
		(__extension__                      \
		 ({ union { guint64 __ll;               \
						guint32 __l[2]; } __r;          \
				if (__builtin_constant_p (val))         \
					__r.__ll = GUINT64_SWAP_LE_BE_CONSTANT (val); \
				else                        \
					{                         \
				union { guint64 __ll;               \
						guint32 __l[2]; } __w;          \
				__w.__ll = ((guint64) val);         \
				__r.__l[0] = GUINT32_SWAP_LE_BE (__w.__l[1]);   \
				__r.__l[1] = GUINT32_SWAP_LE_BE (__w.__l[0]);   \
					}                         \
			__r.__ll; }))
#    define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_X86 (val))
#  else /* !__i386__ */
#    define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_CONSTANT(val))
#  endif
#endif

#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))

#ifdef G_HAVE_GINT64
#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))
#endif

#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))


/* Glib version.
 * we prefix variable declarations so they can
 * properly get exported in windows dlls.
 */
#ifdef NATIVE_WIN32
#  ifdef GLIB_COMPILATION
#    define GUTILS_C_VAR __declspec(dllexport)
#  else /* !GLIB_COMPILATION */
#    define GUTILS_C_VAR extern __declspec(dllimport)
#  endif /* !GLIB_COMPILATION */
#else /* !NATIVE_WIN32 */
#  define GUTILS_C_VAR extern
#endif /* !NATIVE_WIN32 */

GUTILS_C_VAR const guint glib_major_version;
GUTILS_C_VAR const guint glib_minor_version;
GUTILS_C_VAR const guint glib_micro_version;
GUTILS_C_VAR const guint glib_interface_age;
GUTILS_C_VAR const guint glib_binary_age;

#define GLIB_CHECK_VERSION(major,minor,micro)    \
		(GLIB_MAJOR_VERSION > (major) || \
		 (GLIB_MAJOR_VERSION == (major) && GLIB_MINOR_VERSION > (minor)) || \
		 (GLIB_MAJOR_VERSION == (major) && GLIB_MINOR_VERSION == (minor) && \
			GLIB_MICRO_VERSION >= (micro)))

/* Forward declarations of glib types.
 */
typedef struct _GAllocator  GAllocator;
typedef struct _GArray      GArray;
typedef struct _GByteArray  GByteArray;
typedef struct _GCache      GCache;
typedef struct _GCompletion GCompletion;
typedef struct _GData       GData;
typedef struct _GDebugKey   GDebugKey;
typedef struct _GHashTable  GHashTable;
typedef struct _GHook       GHook;
typedef struct _GHookList   GHookList;
typedef struct _GList       GList;
typedef struct _GMemChunk   GMemChunk;
typedef struct _GNode       GNode;
typedef struct _GPtrArray   GPtrArray;
typedef struct _GRelation   GRelation;
typedef struct _GScanner    GScanner;
typedef struct _GScannerConfig  GScannerConfig;
typedef struct _GSList      GSList;
typedef struct _GString     GString;
typedef struct _GStringChunk    GStringChunk;
typedef struct _GTimer      GTimer;
typedef struct _GTree       GTree;
typedef struct _GTuples     GTuples;
typedef union  _GTokenValue GTokenValue;
typedef struct _GIOChannel  GIOChannel;

/* Tree traverse flags */
typedef enum
{
	G_TRAVERSE_LEAFS  = 1 << 0,
	G_TRAVERSE_NON_LEAFS  = 1 << 1,
	G_TRAVERSE_ALL    = G_TRAVERSE_LEAFS | G_TRAVERSE_NON_LEAFS,
	G_TRAVERSE_MASK   = 0x03
} GTraverseFlags;

/* Tree traverse orders */
typedef enum
{
	G_IN_ORDER,
	G_PRE_ORDER,
	G_POST_ORDER,
	G_LEVEL_ORDER
} GTraverseType;

/* Log level shift offset for user defined
 * log levels (0-7 are used by GLib).
 */
#define G_LOG_LEVEL_USER_SHIFT  (8)

/* Glib log levels and flags.
 */
typedef enum
{
	/* log flags */
	G_LOG_FLAG_RECURSION      = 1 << 0,
	G_LOG_FLAG_FATAL      = 1 << 1,
	
	/* GLib log levels */
	G_LOG_LEVEL_ERROR     = 1 << 2,   /* always fatal */
	G_LOG_LEVEL_CRITICAL      = 1 << 3,
	G_LOG_LEVEL_WARNING       = 1 << 4,
	G_LOG_LEVEL_MESSAGE       = 1 << 5,
	G_LOG_LEVEL_INFO      = 1 << 6,
	G_LOG_LEVEL_DEBUG     = 1 << 7,
	
	G_LOG_LEVEL_MASK      = ~(G_LOG_FLAG_RECURSION | G_LOG_FLAG_FATAL)
} GLogLevelFlags;

/* GLib log levels that are considered fatal by default */
#define G_LOG_FATAL_MASK    (G_LOG_FLAG_RECURSION | G_LOG_LEVEL_ERROR)


typedef gpointer    (*GCacheNewFunc)    (gpointer   key);
typedef gpointer    (*GCacheDupFunc)    (gpointer   value);
typedef void        (*GCacheDestroyFunc)    (gpointer   value);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -