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

📄 glib-full.h

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 H
📖 第 1 页 / 共 5 页
字号:
/* GLIB - Library of useful routines for C programming * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. *//* * Modified by the GLib Team and others 1997-1999.  See the AUTHORS * file for a list of people on the GLib Team.  See the ChangeLog * files for a list of changes.  These files are distributed with * GLib at ftp://ftp.gtk.org/pub/gtk/.  */#ifndef __G_LIB_H__#define __G_LIB_H__/* system specific config file glibconfig.h provides definitions for * the extrema of many of the standard types. These are: * *  G_MINSHORT, G_MAXSHORT *  G_MININT, G_MAXINT *  G_MINLONG, G_MAXLONG *  G_MINFLOAT, G_MAXFLOAT *  G_MINDOUBLE, G_MAXDOUBLE * * It also provides the following typedefs: * *  gint8, guint8 *  gint16, guint16 *  gint32, guint32 *  gint64, guint64 * * It defines the G_BYTE_ORDER symbol to one of G_*_ENDIAN (see later in * this file).  * * And it provides a way to store and retrieve a `gint' in/from a `gpointer'. * This is useful to pass an integer instead of a pointer to a callback. * *  GINT_TO_POINTER(i), GUINT_TO_POINTER(i) *  GPOINTER_TO_INT(p), GPOINTER_TO_UINT(p) * * Finally, it provide the following wrappers to STDC functions: * *  g_ATEXIT *    To register hooks which are executed on exit(). *    Usually a wrapper for STDC atexit. * *  void *g_memmove(void *dest, const void *src, guint count); *    A wrapper for STDC memmove, or an implementation, if memmove doesn't *    exist.  The prototype looks like the above, give or take a const, *    or size_t. */#include <glibconfig.h>/* include varargs functions for assertment macros */#include <stdarg.h>/* optionally feature DMALLOC memory allocation debugger */#ifdef USE_DMALLOC#include "dmalloc.h"#endif#ifdef NATIVE_WIN32/* On native Win32, directory separator is the backslash, and search path * separator is the semicolon. */#define G_DIR_SEPARATOR '\\'#define G_DIR_SEPARATOR_S "\\"#define G_SEARCHPATH_SEPARATOR ';'#define G_SEARCHPATH_SEPARATOR_S ";"#else  /* !NATIVE_WIN32 *//* Unix */#define G_DIR_SEPARATOR '/'#define G_DIR_SEPARATOR_S "/"#define G_SEARCHPATH_SEPARATOR ':'#define G_SEARCHPATH_SEPARATOR_S ":"#endif /* !NATIVE_WIN32 */#ifdef __cplusplusextern "C" {#endif /* __cplusplus *//* Provide definitions for some commonly used macros. *  Some of them are only provided if they haven't already *  been defined. It is assumed that if they are already *  defined then the current definition is correct. */#ifndef	NULL#define	NULL	((void*) 0)#endif#ifndef	FALSE#define	FALSE	(0)#endif#ifndef	TRUE#define	TRUE	(!FALSE)#endif#undef	MAX#define MAX(a, b)  (((a) > (b)) ? (a) : (b))#undef	MIN#define MIN(a, b)  (((a) < (b)) ? (a) : (b))#undef	ABS#define ABS(a)	   (((a) < 0) ? -(a) : (a))#undef	CLAMP#define CLAMP(x, low, high)  (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))/* Define G_VA_COPY() to do the right thing for copying va_list variables. * glibconfig.h may have already defined G_VA_COPY as va_copy or __va_copy. */#if !defined (G_VA_COPY)#  if defined (__GNUC__) && defined (__PPC__) && (defined (_CALL_SYSV) || defined (_WIN32))#  define G_VA_COPY(ap1, ap2)	  (*(ap1) = *(ap2))#  elif defined (G_VA_COPY_AS_ARRAY)#  define G_VA_COPY(ap1, ap2)	  g_memmove ((ap1), (ap2), sizeof (va_list))#  else /* va_list is a pointer */#  define G_VA_COPY(ap1, ap2)	  ((ap1) = (ap2))#  endif /* va_list is a pointer */#endif /* !G_VA_COPY *//* Provide convenience macros for handling structure * fields through their offsets. */#define G_STRUCT_OFFSET(struct_type, member)	\    ((gulong) ((gchar*) &((struct_type*) 0)->member))#define G_STRUCT_MEMBER_P(struct_p, struct_offset)   \    ((gpointer) ((gchar*) (struct_p) + (gulong) (struct_offset)))#define G_STRUCT_MEMBER(member_type, struct_p, struct_offset)   \    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))/* inlining hassle. for compilers that don't allow the `inline' keyword, * mostly because of strict ANSI C compliance or dumbness, we try to fall * back to either `__inline__' or `__inline'. * we define G_CAN_INLINE, if the compiler seems to be actually * *capable* to do function inlining, in which case inline function bodys * do make sense. we also define G_INLINE_FUNC to properly export the * function prototypes if no inlining can be performed. * we special case most of the stuff, so inline functions can have a normal * implementation by defining G_INLINE_FUNC to extern and G_CAN_INLINE to 1. */#ifndef G_INLINE_FUNC#  define G_CAN_INLINE 1#endif#ifdef G_HAVE_INLINE#  if defined (__GNUC__) && defined (__STRICT_ANSI__)#    undef inline#    define inline __inline__#  endif#else /* !G_HAVE_INLINE */#  undef inline#  if defined (G_HAVE___INLINE__)#    define inline __inline__#  else /* !inline && !__inline__ */#    if defined (G_HAVE___INLINE)#      define inline __inline#    else /* !inline && !__inline__ && !__inline */#      define inline /* don't inline, then */#      ifndef G_INLINE_FUNC#	 undef G_CAN_INLINE#      endif#    endif#  endif#endif#ifndef G_INLINE_FUNC#  ifdef __GNUC__#    ifdef __OPTIMIZE__#      define G_INLINE_FUNC extern inline#    else#      undef G_CAN_INLINE#      define G_INLINE_FUNC extern#    endif#  else /* !__GNUC__ */#    ifdef G_CAN_INLINE#      define G_INLINE_FUNC static inline#    else#      define G_INLINE_FUNC extern#    endif#  endif /* !__GNUC__ */#endif /* !G_INLINE_FUNC *//* Provide simple macro statement wrappers (adapted from Perl): *  G_STMT_START { statements; } G_STMT_END; *  can be used as a single statement, as in *  if (x) G_STMT_START { ... } G_STMT_END; else ... * *  For gcc we will wrap the statements within `({' and `})' braces. *  For SunOS they will be wrapped within `if (1)' and `else (void) 0', *  and otherwise within `do' and `while (0)'. */#if !(defined (G_STMT_START) && defined (G_STMT_END))#  if defined (__GNUC__) && !defined (__STRICT_ANSI__) && !defined (__cplusplus)#    define G_STMT_START	(void)(#    define G_STMT_END		)#  else#    if (defined (sun) || defined (__sun__))#      define G_STMT_START	if (1)#      define G_STMT_END	else (void)0#    else#      define G_STMT_START	do#      define G_STMT_END	while (0)#    endif#  endif#endif/* Provide macros to feature the GCC function attribute. */#if	__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)#define G_GNUC_PRINTF( format_idx, arg_idx )	\  __attribute__((format (printf, format_idx, arg_idx)))#define G_GNUC_SCANF( format_idx, arg_idx )	\  __attribute__((format (scanf, format_idx, arg_idx)))#define G_GNUC_FORMAT( arg_idx )		\  __attribute__((format_arg (arg_idx)))#define G_GNUC_NORETURN				\  __attribute__((noreturn))#define G_GNUC_CONST				\  __attribute__((const))#define G_GNUC_UNUSED				\  __attribute__((unused))#else	/* !__GNUC__ */#define G_GNUC_PRINTF( format_idx, arg_idx )#define G_GNUC_SCANF( format_idx, arg_idx )#define G_GNUC_FORMAT( arg_idx )#define G_GNUC_NORETURN#define G_GNUC_CONST#define	G_GNUC_UNUSED#endif	/* !__GNUC__ *//* Wrap the gcc __PRETTY_FUNCTION__ and __FUNCTION__ variables with * macros, so we can refer to them as strings unconditionally. */#ifdef	__GNUC__#define	G_GNUC_FUNCTION		__FUNCTION__#define	G_GNUC_PRETTY_FUNCTION	__PRETTY_FUNCTION__#else	/* !__GNUC__ */#define	G_GNUC_FUNCTION		""#define	G_GNUC_PRETTY_FUNCTION	""#endif	/* !__GNUC__ *//* we try to provide a usefull equivalent for ATEXIT if it is * not defined, but use is actually abandoned. people should * use g_atexit() instead. */#ifndef ATEXIT# define ATEXIT(proc)	g_ATEXIT(proc)#else# define G_NATIVE_ATEXIT#endif /* ATEXIT *//* Hacker macro to place breakpoints for elected machines. * Actual use is strongly deprecated of course ;) */#if defined (__i386__) && defined (__GNUC__) && __GNUC__ >= 2#define	G_BREAKPOINT()		G_STMT_START{ __asm__ __volatile__ ("int $03"); }G_STMT_END#elif defined (__alpha__) && defined (__GNUC__) && __GNUC__ >= 2#define	G_BREAKPOINT()		G_STMT_START{ __asm__ __volatile__ ("bpt"); }G_STMT_END#else	/* !__i386__ && !__alpha__ */#define	G_BREAKPOINT()#endif	/* __i386__ *//* Provide macros for easily allocating memory. The macros *  will cast the allocated memory to the specified type *  in order to avoid compiler warnings. (Makes the code neater). */#ifdef __DMALLOC_H__#  define g_new(type, count)		(ALLOC (type, count))#  define g_new0(type, count)		(CALLOC (type, count))#  define g_renew(type, mem, count)	(REALLOC (mem, type, count))#else /* __DMALLOC_H__ */#  define g_new(type, count)	  \      ((type *) g_malloc ((unsigned) sizeof (type) * (count)))#  define g_new0(type, count)	  \      ((type *) g_malloc0 ((unsigned) sizeof (type) * (count)))#  define g_renew(type, mem, count)	  \      ((type *) g_realloc (mem, (unsigned) sizeof (type) * (count)))#endif /* __DMALLOC_H__ */#define g_mem_chunk_create(type, pre_alloc, alloc_type)	( \  g_mem_chunk_new (#type " mem chunks (" #pre_alloc ")", \		   sizeof (type), \		   sizeof (type) * (pre_alloc), \		   (alloc_type)) \)#define g_chunk_new(type, chunk)	( \  (type *) g_mem_chunk_alloc (chunk) \)#define g_chunk_new0(type, chunk)	( \  (type *) g_mem_chunk_alloc0 (chunk) \)#define g_chunk_free(mem, mem_chunk)	G_STMT_START { \  g_mem_chunk_free ((mem_chunk), (mem)); \} G_STMT_END#define g_string(x) #x/* Provide macros for error handling. The "assert" macros will *  exit on failure. The "return" macros will exit the current *  function. Two different definitions are given for the macros *  if G_DISABLE_ASSERT is not defined, in order to support gcc's *  __PRETTY_FUNCTION__ capability. */#ifdef G_DISABLE_ASSERT#define g_assert(expr)#define g_assert_not_reached()#else /* !G_DISABLE_ASSERT */#ifdef __GNUC__#define g_assert(expr)			G_STMT_START{		\     if (!(expr))						\       g_log (G_LOG_DOMAIN,					\	      G_LOG_LEVEL_ERROR,				\	      "file %s: line %d (%s): assertion failed: (%s)",	\	      __FILE__,						\	      __LINE__,						\	      __PRETTY_FUNCTION__,				\	      #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 (%s): should not be reached",	\	    __FILE__,						\	    __LINE__,						\	    __PRETTY_FUNCTION__);	}G_STMT_END#else /* !__GNUC__ */#define g_assert(expr)			G_STMT_START{		\     if (!(expr))						\       g_log (G_LOG_DOMAIN,					\	      G_LOG_LEVEL_ERROR,				\	      "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))						\       {							\

⌨️ 快捷键说明

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