25624 lines
		
	
	
		
			934 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			25624 lines
		
	
	
		
			934 KiB
		
	
	
	
		
			C
		
	
	
	
| #ifndef GUM_STATIC
 | |
| # define GUM_STATIC
 | |
| #endif
 | |
| 
 | |
| /*
 | |
|  * Copyright (C) 2008-2017 Ole André Vadla Ravnås <oleavr@nowsecure.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_H__
 | |
| #define __GUM_H__
 | |
| 
 | |
| /*
 | |
|  * Copyright (C) 2008-2014 Ole André Vadla Ravnås <ole.andre.ravnas@tillitech.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUMDEFS_H__
 | |
| #define __GUMDEFS_H__
 | |
| 
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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__
 | |
| 
 | |
| #define __GLIB_H_INSIDE__
 | |
| 
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_ALLOCA_H__
 | |
| #define __G_ALLOCA_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_TYPES_H__
 | |
| #define __G_TYPES_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| /* glibconfig.h
 | |
|  *
 | |
|  * This is a generated file.  Please modify 'configure.ac'
 | |
|  */
 | |
| 
 | |
| #ifndef __GLIBCONFIG_H__
 | |
| #define __GLIBCONFIG_H__
 | |
| 
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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/.
 | |
|  */
 | |
| 
 | |
| /* This file must not include any other glib header file and must thus
 | |
|  * not refer to variables from glibconfig.h
 | |
|  */
 | |
| 
 | |
| #ifndef __G_MACROS_H__
 | |
| #define __G_MACROS_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| /* We include stddef.h to get the system's definition of NULL
 | |
|  */
 | |
| #include <stddef.h>
 | |
| 
 | |
| #define G_GNUC_CHECK_VERSION(major, minor) \
 | |
|     (defined(__GNUC__) && \
 | |
|      ((__GNUC__ > (major)) || \
 | |
|       ((__GNUC__ == (major)) && \
 | |
|        (__GNUC_MINOR__ >= (minor)))))
 | |
| 
 | |
| /* Here we provide lG_GNUC_EXTENSION as an alias for __extension__,
 | |
|  * where this is valid. This allows for warningless compilation of
 | |
|  * "long long" types even in the presence of '-ansi -pedantic'. 
 | |
|  */
 | |
| #if     __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)
 | |
| #define lG_GNUC_EXTENSION __extension__
 | |
| #else
 | |
| #define lG_GNUC_EXTENSION
 | |
| #endif
 | |
| 
 | |
| /* Every compiler that we target supports inlining, but some of them may
 | |
|  * complain about it if we don't say "__inline".  If we have C99, or if
 | |
|  * we are using C++, then we can use "inline" directly.  Unfortunately
 | |
|  * Visual Studio does not support __STDC_VERSION__, so we need to check
 | |
|  * whether we are on Visual Studio 2013 or earlier to see that we need to
 | |
|  * say "__inline" in C mode.
 | |
|  * Otherwise, we say "__inline" to avoid the warning.
 | |
|  */
 | |
| #define G_CAN_INLINE
 | |
| #ifndef __cplusplus
 | |
| # ifdef _MSC_VER
 | |
| #  if (_MSC_VER < 1900)
 | |
| #   define G_INLINE_DEFINE_NEEDED
 | |
| #  endif
 | |
| # elif !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199900)
 | |
| #  define G_INLINE_DEFINE_NEEDED
 | |
| # endif
 | |
| #endif
 | |
| 
 | |
| #ifdef G_INLINE_DEFINE_NEEDED
 | |
| # undef inline
 | |
| # define inline __inline
 | |
| #endif
 | |
| 
 | |
| #undef G_INLINE_DEFINE_NEEDED
 | |
| 
 | |
| /* For historical reasons we need to continue to support those who
 | |
|  * define G_IMPLEMENT_INLINES to mean "don't implement this here".
 | |
|  */
 | |
| #ifdef G_IMPLEMENT_INLINES
 | |
| #  define G_INLINE_FUNC extern
 | |
| #  undef  G_CAN_INLINE
 | |
| #else
 | |
| #  define G_INLINE_FUNC static inline
 | |
| #endif /* G_IMPLEMENT_INLINES */
 | |
| 
 | |
| /* Provide macros to feature the GCC function attribute.
 | |
|  */
 | |
| #if    __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
 | |
| #define G_GNUC_PURE __attribute__((__pure__))
 | |
| #define G_GNUC_MALLOC __attribute__((__malloc__))
 | |
| #else
 | |
| #define G_GNUC_PURE
 | |
| #define G_GNUC_MALLOC
 | |
| #endif
 | |
| 
 | |
| #if     __GNUC__ >= 4
 | |
| #define G_GNUC_NULL_TERMINATED __attribute__((__sentinel__))
 | |
| #else
 | |
| #define G_GNUC_NULL_TERMINATED
 | |
| #endif
 | |
| 
 | |
| /* Clang feature detection: http://clang.llvm.org/docs/LanguageExtensions.html */
 | |
| #ifndef __has_attribute
 | |
| #define __has_attribute(x) 0
 | |
| #endif
 | |
| 
 | |
| #ifndef __has_feature
 | |
| #define __has_feature(x) 0
 | |
| #endif
 | |
| 
 | |
| #ifndef __has_builtin
 | |
| #define __has_builtin(x) 0
 | |
| #endif
 | |
| 
 | |
| #if     (!defined(__clang__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) || \
 | |
|         (defined(__clang__) && __has_attribute(__alloc_size__))
 | |
| #define G_GNUC_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
 | |
| #define G_GNUC_ALLOC_SIZE2(x,y) __attribute__((__alloc_size__(x,y)))
 | |
| #else
 | |
| #define G_GNUC_ALLOC_SIZE(x)
 | |
| #define G_GNUC_ALLOC_SIZE2(x,y)
 | |
| #endif
 | |
| 
 | |
| #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__))
 | |
| #define G_GNUC_NO_INSTRUMENT			\
 | |
|   __attribute__((__no_instrument_function__))
 | |
| #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
 | |
| #define G_GNUC_NO_INSTRUMENT
 | |
| #endif  /* !__GNUC__ */
 | |
| 
 | |
| #if    __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
 | |
| #define G_GNUC_DEPRECATED __attribute__((__deprecated__))
 | |
| #else
 | |
| #define G_GNUC_DEPRECATED
 | |
| #endif /* __GNUC__ */
 | |
| 
 | |
| #if    __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
 | |
| #define G_GNUC_DEPRECATED_FOR(f)                        \
 | |
|   __attribute__((deprecated("Use " #f " instead")))
 | |
| #else
 | |
| #define G_GNUC_DEPRECATED_FOR(f)        G_GNUC_DEPRECATED
 | |
| #endif /* __GNUC__ */
 | |
| 
 | |
| #if    __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
 | |
| #define lG_GNUC_BEGIN_IGNORE_DEPRECATIONS		\
 | |
|   _Pragma ("GCC diagnostic push")			\
 | |
|   _Pragma ("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
 | |
| #define lG_GNUC_END_IGNORE_DEPRECATIONS			\
 | |
|   _Pragma ("GCC diagnostic pop")
 | |
| #elif defined (_MSC_VER) && (_MSC_VER >= 1500)
 | |
| #define lG_GNUC_BEGIN_IGNORE_DEPRECATIONS		\
 | |
|   __pragma (warning (push))  \
 | |
|   __pragma (warning (disable : 4996))
 | |
| #define lG_GNUC_END_IGNORE_DEPRECATIONS			\
 | |
|   __pragma (warning (pop))
 | |
| #elif defined (__clang__)
 | |
| #define lG_GNUC_BEGIN_IGNORE_DEPRECATIONS \
 | |
|   _Pragma("clang diagnostic push") \
 | |
|   _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")
 | |
| #define lG_GNUC_END_IGNORE_DEPRECATIONS \
 | |
|   _Pragma("clang diagnostic pop")
 | |
| #else
 | |
| #define lG_GNUC_BEGIN_IGNORE_DEPRECATIONS
 | |
| #define lG_GNUC_END_IGNORE_DEPRECATIONS
 | |
| #endif
 | |
| 
 | |
| #if     __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
 | |
| #define G_GNUC_MAY_ALIAS __attribute__((may_alias))
 | |
| #else
 | |
| #define G_GNUC_MAY_ALIAS
 | |
| #endif
 | |
| 
 | |
| #if    __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
 | |
| #define G_GNUC_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
 | |
| #else
 | |
| #define G_GNUC_WARN_UNUSED_RESULT
 | |
| #endif /* __GNUC__ */
 | |
| 
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
| /* Wrap the gcc __PRETTY_FUNCTION__ and __FUNCTION__ variables with
 | |
|  * macros, so we can refer to them as strings unconditionally.
 | |
|  * usage not-recommended since gcc-3.0
 | |
|  */
 | |
| #if defined (__GNUC__) && (__GNUC__ < 3)
 | |
| #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__ */
 | |
| #endif  /* !G_DISABLE_DEPRECATED */
 | |
| 
 | |
| #if __has_feature(attribute_analyzer_noreturn) && defined(__clang_analyzer__)
 | |
| #define G_ANALYZER_ANALYZING 1
 | |
| #define G_ANALYZER_NORETURN __attribute__((analyzer_noreturn))
 | |
| #else
 | |
| #define G_ANALYZER_ANALYZING 0
 | |
| #define G_ANALYZER_NORETURN
 | |
| #endif
 | |
| 
 | |
| #define G_STRINGIFY(macro_or_string)	G_STRINGIFY_ARG (macro_or_string)
 | |
| #define	G_STRINGIFY_ARG(contents)	#contents
 | |
| 
 | |
| #ifndef __GI_SCANNER__ /* The static assert macro really confuses the introspection parser */
 | |
| #define G_PASTE_ARGS(identifier1,identifier2) identifier1 ## identifier2
 | |
| #define G_PASTE(identifier1,identifier2)      G_PASTE_ARGS (identifier1, identifier2)
 | |
| #ifdef __COUNTER__
 | |
| #define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
 | |
| #else
 | |
| #define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __LINE__)[(expr) ? 1 : -1] G_GNUC_UNUSED
 | |
| #endif
 | |
| #define G_STATIC_ASSERT_EXPR(expr) ((void) sizeof (char[(expr) ? 1 : -1]))
 | |
| #endif
 | |
| 
 | |
| /* Provide a string identifying the current code position */
 | |
| #if defined(__GNUC__) && (__GNUC__ < 3) && !defined(__cplusplus)
 | |
| #define G_STRLOC	__FILE__ ":" G_STRINGIFY (__LINE__) ":" __PRETTY_FUNCTION__ "()"
 | |
| #else
 | |
| #define G_STRLOC	__FILE__ ":" G_STRINGIFY (__LINE__)
 | |
| #endif
 | |
| 
 | |
| /* Provide a string identifying the current function, non-concatenatable */
 | |
| #if defined (__GNUC__) && defined (__cplusplus)
 | |
| #define G_STRFUNC     ((const char*) (__PRETTY_FUNCTION__))
 | |
| #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
 | |
| #define G_STRFUNC     ((const char*) (__func__))
 | |
| #elif defined (__GNUC__) || (defined(_MSC_VER) && (_MSC_VER > 1300))
 | |
| #define G_STRFUNC     ((const char*) (__FUNCTION__))
 | |
| #else
 | |
| #define G_STRFUNC     ((const char*) ("???"))
 | |
| #endif
 | |
| 
 | |
| /* Guard C code in headers, while including them from C++ */
 | |
| #ifdef  __cplusplus
 | |
| #define G_BEGIN_DECLS  extern "C" {
 | |
| #define G_END_DECLS    }
 | |
| #else
 | |
| #define G_BEGIN_DECLS
 | |
| #define G_END_DECLS
 | |
| #endif
 | |
| 
 | |
| /* 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
 | |
| #  ifdef __cplusplus
 | |
| #  define NULL        (0L)
 | |
| #  else /* !__cplusplus */
 | |
| #  define NULL        ((void*) 0)
 | |
| #  endif /* !__cplusplus */
 | |
| #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)))
 | |
| 
 | |
| /* Count the number of elements in an array. The array must be defined
 | |
|  * as such; using this with a dynamically allocated array will give
 | |
|  * incorrect results.
 | |
|  */
 | |
| #define G_N_ELEMENTS(arr)		(sizeof (arr) / sizeof ((arr)[0]))
 | |
| 
 | |
| /* Macros by analogy to GINT_TO_POINTER, GPOINTER_TO_INT
 | |
|  */
 | |
| #define GPOINTER_TO_SIZE(p)	((gsize) (p))
 | |
| #define GSIZE_TO_POINTER(s)	((gpointer) (gsize) (s))
 | |
| 
 | |
| /* Provide convenience macros for handling structure
 | |
|  * fields through their offsets.
 | |
|  */
 | |
| 
 | |
| #if (defined(__GNUC__)  && __GNUC__ >= 4) || defined (_MSC_VER)
 | |
| #define G_STRUCT_OFFSET(struct_type, member) \
 | |
|       ((glong) offsetof (struct_type, member))
 | |
| #else
 | |
| #define G_STRUCT_OFFSET(struct_type, member)	\
 | |
|       ((glong) ((guint8*) &((struct_type*) 0)->member))
 | |
| #endif
 | |
| 
 | |
| #define G_STRUCT_MEMBER_P(struct_p, struct_offset)   \
 | |
|     ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
 | |
| #define G_STRUCT_MEMBER(member_type, struct_p, struct_offset)   \
 | |
|     (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
 | |
| 
 | |
| /* Provide simple macro statement wrappers:
 | |
|  *   G_STMT_START { statements; } G_STMT_END;
 | |
|  * This can be used as a single statement, like:
 | |
|  *   if (x) G_STMT_START { ... } G_STMT_END; else ...
 | |
|  * This intentionally does not use compiler extensions like GCC's '({...})' to
 | |
|  * avoid portability issue or side effects when compiled with different compilers.
 | |
|  * MSVC complains about "while(0)": C4127: "Conditional expression is constant",
 | |
|  * so we use __pragma to avoid the warning since the use here is intentional.
 | |
|  */
 | |
| #if !(defined (G_STMT_START) && defined (G_STMT_END))
 | |
| #define G_STMT_START  do
 | |
| #if defined (_MSC_VER) && (_MSC_VER >= 1500)
 | |
| #define G_STMT_END \
 | |
|     __pragma(warning(push)) \
 | |
|     __pragma(warning(disable:4127)) \
 | |
|     while(0) \
 | |
|     __pragma(warning(pop))
 | |
| #else
 | |
| #define G_STMT_END    while (0)
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
| /* Deprecated -- do not use. */
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
| #ifdef G_DISABLE_CONST_RETURNS
 | |
| #define G_CONST_RETURN
 | |
| #else
 | |
| #define G_CONST_RETURN const
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
| /*
 | |
|  * The G_LIKELY and G_UNLIKELY macros let the programmer give hints to 
 | |
|  * the compiler about the expected result of an expression. Some compilers
 | |
|  * can use this information for optimizations.
 | |
|  *
 | |
|  * The _G_BOOLEAN_EXPR macro is intended to trigger a gcc warning when
 | |
|  * putting assignments in g_return_if_fail ().  
 | |
|  */
 | |
| #if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
 | |
| #define _G_BOOLEAN_EXPR(expr)                   \
 | |
|  lG_GNUC_EXTENSION ({                            \
 | |
|    int _g_boolean_var_;                         \
 | |
|    if (expr)                                    \
 | |
|       _g_boolean_var_ = 1;                      \
 | |
|    else                                         \
 | |
|       _g_boolean_var_ = 0;                      \
 | |
|    _g_boolean_var_;                             \
 | |
| })
 | |
| #define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR((expr)), 1))
 | |
| #define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR((expr)), 0))
 | |
| #else
 | |
| #define G_LIKELY(expr) (expr)
 | |
| #define G_UNLIKELY(expr) (expr)
 | |
| #endif
 | |
| 
 | |
| #if    __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
 | |
| #define G_DEPRECATED __attribute__((__deprecated__))
 | |
| #elif defined(_MSC_VER) && (_MSC_VER >= 1300)
 | |
| #define G_DEPRECATED __declspec(deprecated)
 | |
| #else
 | |
| #define G_DEPRECATED
 | |
| #endif
 | |
| 
 | |
| #if    __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
 | |
| #define G_DEPRECATED_FOR(f) __attribute__((__deprecated__("Use '" #f "' instead")))
 | |
| #elif defined(_MSC_FULL_VER) && (_MSC_FULL_VER > 140050320)
 | |
| #define G_DEPRECATED_FOR(f) __declspec(deprecated("is deprecated. Use '" #f "' instead"))
 | |
| #else
 | |
| #define G_DEPRECATED_FOR(f) G_DEPRECATED
 | |
| #endif
 | |
| 
 | |
| #if    __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
 | |
| #define G_UNAVAILABLE(maj,min) __attribute__((deprecated("Not available before " #maj "." #min)))
 | |
| #elif defined(_MSC_FULL_VER) && (_MSC_FULL_VER > 140050320)
 | |
| #define G_UNAVAILABLE(maj,min) __declspec(deprecated("is not available before " #maj "." #min))
 | |
| #else
 | |
| #define G_UNAVAILABLE(maj,min) G_DEPRECATED
 | |
| #endif
 | |
| 
 | |
| #ifndef _GLIB_EXTERN
 | |
| #define _GLIB_EXTERN extern
 | |
| #endif
 | |
| 
 | |
| /* These macros are used to mark deprecated functions in GLib headers,
 | |
|  * and thus have to be exposed in installed headers. But please
 | |
|  * do *not* use them in other projects. Instead, use G_DEPRECATED
 | |
|  * or define your own wrappers around it.
 | |
|  */
 | |
| 
 | |
| #ifdef GLIB_DISABLE_DEPRECATION_WARNINGS
 | |
| #define GLIB_DEPRECATED _GLIB_EXTERN
 | |
| #define GLIB_DEPRECATED_FOR(f) _GLIB_EXTERN
 | |
| #define GLIB_UNAVAILABLE(maj,min) _GLIB_EXTERN
 | |
| #else
 | |
| #define GLIB_DEPRECATED G_DEPRECATED _GLIB_EXTERN
 | |
| #define GLIB_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) _GLIB_EXTERN
 | |
| #define GLIB_UNAVAILABLE(maj,min) G_UNAVAILABLE(maj,min) _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #ifdef __GNUC__
 | |
| 
 | |
| /* these macros are private */
 | |
| #define l_GLIB_AUTOPTR_FUNC_NAME(TypeName) glib_autoptr_cleanup_##TypeName
 | |
| #define l_GLIB_AUTOPTR_TYPENAME(TypeName)  TypeName##_autoptr
 | |
| #define l_GLIB_AUTO_FUNC_NAME(TypeName)    glib_auto_cleanup_##TypeName
 | |
| #define l_GLIB_CLEANUP(func)               __attribute__((cleanup(func)))
 | |
| #define l_GLIB_DEFINE_AUTOPTR_CHAINUP(ModuleObjName, ParentName) \
 | |
|   typedef ModuleObjName *l_GLIB_AUTOPTR_TYPENAME(ModuleObjName);                                          \
 | |
|   static inline void l_GLIB_AUTOPTR_FUNC_NAME(ModuleObjName) (ModuleObjName **_ptr) {                     \
 | |
|     l_GLIB_AUTOPTR_FUNC_NAME(ParentName) ((ParentName **) _ptr); }                                        \
 | |
| 
 | |
| 
 | |
| /* these macros are API */
 | |
| #define G_DEFINE_AUTOPTR_CLEANUP_FUNC(TypeName, func) \
 | |
|   typedef TypeName *l_GLIB_AUTOPTR_TYPENAME(TypeName);                                                           \
 | |
|   lG_GNUC_BEGIN_IGNORE_DEPRECATIONS                                                                              \
 | |
|   static inline void l_GLIB_AUTOPTR_FUNC_NAME(TypeName) (TypeName **_ptr) { if (*_ptr) (func) (*_ptr); }         \
 | |
|   lG_GNUC_END_IGNORE_DEPRECATIONS
 | |
| #define G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(TypeName, func) \
 | |
|   lG_GNUC_BEGIN_IGNORE_DEPRECATIONS                                                                              \
 | |
|   static inline void l_GLIB_AUTO_FUNC_NAME(TypeName) (TypeName *_ptr) { (func) (_ptr); }                         \
 | |
|   lG_GNUC_END_IGNORE_DEPRECATIONS
 | |
| #define G_DEFINE_AUTO_CLEANUP_FREE_FUNC(TypeName, func, none) \
 | |
|   lG_GNUC_BEGIN_IGNORE_DEPRECATIONS                                                                              \
 | |
|   static inline void l_GLIB_AUTO_FUNC_NAME(TypeName) (TypeName *_ptr) { if (*_ptr != none) (func) (*_ptr); }     \
 | |
|   lG_GNUC_END_IGNORE_DEPRECATIONS
 | |
| #define g_autoptr(TypeName) l_GLIB_CLEANUP(l_GLIB_AUTOPTR_FUNC_NAME(TypeName)) l_GLIB_AUTOPTR_TYPENAME(TypeName)
 | |
| #define g_auto(TypeName) l_GLIB_CLEANUP(l_GLIB_AUTO_FUNC_NAME(TypeName)) TypeName
 | |
| #define g_autofree l_GLIB_CLEANUP(g_autoptr_cleanup_generic_gfree)
 | |
| 
 | |
| #else /* not GNU C */
 | |
| /* this (dummy) macro is private */
 | |
| #define l_GLIB_DEFINE_AUTOPTR_CHAINUP(ModuleObjName, ParentName)
 | |
| 
 | |
| /* these (dummy) macros are API */
 | |
| #define G_DEFINE_AUTOPTR_CLEANUP_FUNC(TypeName, func)
 | |
| #define G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(TypeName, func)
 | |
| #define G_DEFINE_AUTO_CLEANUP_FREE_FUNC(TypeName, func, none)
 | |
| 
 | |
| /* no declaration of g_auto() or g_autoptr() here */
 | |
| #endif
 | |
| 
 | |
| #endif /* __G_MACROS_H__ */
 | |
| 
 | |
| #include <limits.h>
 | |
| #include <float.h>
 | |
| #define GLIB_HAVE_ALLOCA_H
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| #define G_MINFLOAT	FLT_MIN
 | |
| #define G_MAXFLOAT	FLT_MAX
 | |
| #define G_MINDOUBLE	DBL_MIN
 | |
| #define G_MAXDOUBLE	DBL_MAX
 | |
| #define G_MINSHORT	SHRT_MIN
 | |
| #define G_MAXSHORT	SHRT_MAX
 | |
| #define G_MAXUSHORT	USHRT_MAX
 | |
| #define G_MININT	INT_MIN
 | |
| #define G_MAXINT	INT_MAX
 | |
| #define G_MAXUINT	UINT_MAX
 | |
| #define G_MINLONG	LONG_MIN
 | |
| #define G_MAXLONG	LONG_MAX
 | |
| #define G_MAXULONG	ULONG_MAX
 | |
| 
 | |
| typedef signed char gint8;
 | |
| typedef unsigned char guint8;
 | |
| typedef signed short gint16;
 | |
| typedef unsigned short guint16;
 | |
| #define G_GINT16_MODIFIER "h"
 | |
| #define G_GINT16_FORMAT "hi"
 | |
| #define G_GUINT16_FORMAT "hu"
 | |
| typedef signed int gint32;
 | |
| typedef unsigned int guint32;
 | |
| #define G_GINT32_MODIFIER ""
 | |
| #define G_GINT32_FORMAT "i"
 | |
| #define G_GUINT32_FORMAT "u"
 | |
| #define G_HAVE_GINT64 1          /* deprecated, always true */
 | |
| 
 | |
| lG_GNUC_EXTENSION typedef signed long long gint64;
 | |
| lG_GNUC_EXTENSION typedef unsigned long long guint64;
 | |
| 
 | |
| #define G_GINT64_CONSTANT(val)	(lG_GNUC_EXTENSION (val##LL))
 | |
| #define G_GUINT64_CONSTANT(val)	(lG_GNUC_EXTENSION (val##ULL))
 | |
| #define G_GINT64_MODIFIER "ll"
 | |
| #define G_GINT64_FORMAT "lli"
 | |
| #define G_GUINT64_FORMAT "llu"
 | |
| 
 | |
| #define GLIB_SIZEOF_VOID_P 4
 | |
| #define GLIB_SIZEOF_LONG   4
 | |
| #define GLIB_SIZEOF_SIZE_T 4
 | |
| #define GLIB_SIZEOF_SSIZE_T 4
 | |
| 
 | |
| typedef signed int gssize;
 | |
| typedef unsigned int gsize;
 | |
| #define G_GSIZE_MODIFIER ""
 | |
| #define G_GSSIZE_MODIFIER ""
 | |
| #define G_GSIZE_FORMAT "u"
 | |
| #define G_GSSIZE_FORMAT "i"
 | |
| 
 | |
| #define G_MAXSIZE	G_MAXUINT
 | |
| #define G_MINSSIZE	G_MININT
 | |
| #define G_MAXSSIZE	G_MAXINT
 | |
| 
 | |
| typedef gint64 goffset;
 | |
| #define G_MINOFFSET	G_MININT64
 | |
| #define G_MAXOFFSET	G_MAXINT64
 | |
| 
 | |
| #define G_GOFFSET_MODIFIER      G_GINT64_MODIFIER
 | |
| #define G_GOFFSET_FORMAT        G_GINT64_FORMAT
 | |
| #define G_GOFFSET_CONSTANT(val) G_GINT64_CONSTANT(val)
 | |
| 
 | |
| #define G_POLLFD_FORMAT "%d"
 | |
| 
 | |
| 
 | |
| #define GPOINTER_TO_INT(p)	((gint)  (gint) (p))
 | |
| #define GPOINTER_TO_UINT(p)	((guint) (guint) (p))
 | |
| 
 | |
| #define GINT_TO_POINTER(i)	((gpointer) (gint) (i))
 | |
| #define GUINT_TO_POINTER(u)	((gpointer) (guint) (u))
 | |
| 
 | |
| typedef signed int gintptr;
 | |
| typedef unsigned int guintptr;
 | |
| 
 | |
| #define G_GINTPTR_MODIFIER      ""
 | |
| #define G_GINTPTR_FORMAT        "i"
 | |
| #define G_GUINTPTR_FORMAT       "u"
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
| #define g_ATEXIT(proc)	(atexit (proc))
 | |
| #define g_memmove(dest,src,len) G_STMT_START { memmove ((dest), (src), (len)); } G_STMT_END
 | |
| #endif
 | |
| 
 | |
| #define GLIB_MAJOR_VERSION 2
 | |
| #define GLIB_MINOR_VERSION 51
 | |
| #define GLIB_MICRO_VERSION 5
 | |
| 
 | |
| #define G_OS_UNIX
 | |
| #define GLIB_STATIC_COMPILATION 1
 | |
| #define GOBJECT_STATIC_COMPILATION 1
 | |
| #define GIO_STATIC_COMPILATION 1
 | |
| 
 | |
| #define G_VA_COPY	va_copy
 | |
| 
 | |
| #ifndef __cplusplus
 | |
| # define G_HAVE_ISO_VARARGS 1
 | |
| #endif
 | |
| #ifdef __cplusplus
 | |
| # define G_HAVE_ISO_VARARGS 1
 | |
| #endif
 | |
| 
 | |
| /* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi
 | |
|  * is passed ISO vararg support is turned off, and there is no work
 | |
|  * around to turn it on, so we unconditionally turn it off.
 | |
|  */
 | |
| #if __GNUC__ == 2 && __GNUC_MINOR__ == 95
 | |
| #  undef G_HAVE_ISO_VARARGS
 | |
| #endif
 | |
| 
 | |
| #define G_HAVE_GNUC_VARARGS 1
 | |
| #define G_HAVE_GROWING_STACK 0
 | |
| 
 | |
| #define G_HAVE_GNUC_VISIBILITY 1
 | |
| #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
 | |
| #define G_GNUC_INTERNAL __attribute__((visibility("hidden")))
 | |
| #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
 | |
| #define G_GNUC_INTERNAL __hidden
 | |
| #elif defined (__GNUC__) && defined (G_HAVE_GNUC_VISIBILITY)
 | |
| #define G_GNUC_INTERNAL __attribute__((visibility("hidden")))
 | |
| #else
 | |
| #define G_GNUC_INTERNAL
 | |
| #endif
 | |
| 
 | |
| #define G_THREADS_ENABLED
 | |
| #define G_THREADS_IMPL_POSIX
 | |
| 
 | |
| #define G_ATOMIC_LOCK_FREE
 | |
| 
 | |
| #define GINT16_TO_LE(val)	((gint16) (val))
 | |
| #define GUINT16_TO_LE(val)	((guint16) (val))
 | |
| #define GINT16_TO_BE(val)	((gint16) GUINT16_SWAP_LE_BE (val))
 | |
| #define GUINT16_TO_BE(val)	(GUINT16_SWAP_LE_BE (val))
 | |
| #define GINT32_TO_LE(val)	((gint32) (val))
 | |
| #define GUINT32_TO_LE(val)	((guint32) (val))
 | |
| #define GINT32_TO_BE(val)	((gint32) GUINT32_SWAP_LE_BE (val))
 | |
| #define GUINT32_TO_BE(val)	(GUINT32_SWAP_LE_BE (val))
 | |
| #define GINT64_TO_LE(val)	((gint64) (val))
 | |
| #define GUINT64_TO_LE(val)	((guint64) (val))
 | |
| #define GINT64_TO_BE(val)	((gint64) GUINT64_SWAP_LE_BE (val))
 | |
| #define GUINT64_TO_BE(val)	(GUINT64_SWAP_LE_BE (val))
 | |
| #define GLONG_TO_LE(val)	((glong) GINT32_TO_LE (val))
 | |
| #define GULONG_TO_LE(val)	((gulong) GUINT32_TO_LE (val))
 | |
| #define GLONG_TO_BE(val)	((glong) GINT32_TO_BE (val))
 | |
| #define GULONG_TO_BE(val)	((gulong) GUINT32_TO_BE (val))
 | |
| #define GINT_TO_LE(val)		((gint) GINT32_TO_LE (val))
 | |
| #define GUINT_TO_LE(val)	((guint) GUINT32_TO_LE (val))
 | |
| #define GINT_TO_BE(val)		((gint) GINT32_TO_BE (val))
 | |
| #define GUINT_TO_BE(val)	((guint) GUINT32_TO_BE (val))
 | |
| #define GSIZE_TO_LE(val)	((gsize) GUINT32_TO_LE (val))
 | |
| #define GSSIZE_TO_LE(val)	((gssize) GINT32_TO_LE (val))
 | |
| #define GSIZE_TO_BE(val)	((gsize) GUINT32_TO_BE (val))
 | |
| #define GSSIZE_TO_BE(val)	((gssize) GINT32_TO_BE (val))
 | |
| #define G_BYTE_ORDER G_LITTLE_ENDIAN
 | |
| 
 | |
| #define GLIB_SYSDEF_POLLIN =1
 | |
| #define GLIB_SYSDEF_POLLOUT =4
 | |
| #define GLIB_SYSDEF_POLLPRI =2
 | |
| #define GLIB_SYSDEF_POLLHUP =16
 | |
| #define GLIB_SYSDEF_POLLERR =8
 | |
| #define GLIB_SYSDEF_POLLNVAL =32
 | |
| 
 | |
| #define G_MODULE_SUFFIX "so"
 | |
| 
 | |
| typedef int GPid;
 | |
| #define G_PID_FORMAT "i"
 | |
| 
 | |
| #define GLIB_SYSDEF_AF_UNIX 1
 | |
| #define GLIB_SYSDEF_AF_INET 2
 | |
| #define GLIB_SYSDEF_AF_INET6 10
 | |
| 
 | |
| #define GLIB_SYSDEF_MSG_OOB 1
 | |
| #define GLIB_SYSDEF_MSG_PEEK 2
 | |
| #define GLIB_SYSDEF_MSG_DONTROUTE 4
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __GLIBCONFIG_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_VERSION_MACROS_H__
 | |
| #define __G_VERSION_MACROS_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| /* Version boundaries checks */
 | |
| 
 | |
| #define G_ENCODE_VERSION(major,minor)   ((major) << 16 | (minor) << 8)
 | |
| 
 | |
| /* XXX: Every new stable minor release bump should add a macro here */
 | |
| 
 | |
| /**
 | |
|  * GLIB_VERSION_2_26:
 | |
|  *
 | |
|  * A macro that evaluates to the 2.26 version of GLib, in a format
 | |
|  * that can be used by the C pre-processor.
 | |
|  *
 | |
|  * Since: 2.32
 | |
|  */
 | |
| #define GLIB_VERSION_2_26       (G_ENCODE_VERSION (2, 26))
 | |
| 
 | |
| /**
 | |
|  * GLIB_VERSION_2_28:
 | |
|  *
 | |
|  * A macro that evaluates to the 2.28 version of GLib, in a format
 | |
|  * that can be used by the C pre-processor.
 | |
|  *
 | |
|  * Since: 2.32
 | |
|  */
 | |
| #define GLIB_VERSION_2_28       (G_ENCODE_VERSION (2, 28))
 | |
| 
 | |
| /**
 | |
|  * GLIB_VERSION_2_30:
 | |
|  *
 | |
|  * A macro that evaluates to the 2.30 version of GLib, in a format
 | |
|  * that can be used by the C pre-processor.
 | |
|  *
 | |
|  * Since: 2.32
 | |
|  */
 | |
| #define GLIB_VERSION_2_30       (G_ENCODE_VERSION (2, 30))
 | |
| 
 | |
| /**
 | |
|  * GLIB_VERSION_2_32:
 | |
|  *
 | |
|  * A macro that evaluates to the 2.32 version of GLib, in a format
 | |
|  * that can be used by the C pre-processor.
 | |
|  *
 | |
|  * Since: 2.32
 | |
|  */
 | |
| #define GLIB_VERSION_2_32       (G_ENCODE_VERSION (2, 32))
 | |
| 
 | |
| /**
 | |
|  * GLIB_VERSION_2_34:
 | |
|  *
 | |
|  * A macro that evaluates to the 2.34 version of GLib, in a format
 | |
|  * that can be used by the C pre-processor.
 | |
|  *
 | |
|  * Since: 2.34
 | |
|  */
 | |
| #define GLIB_VERSION_2_34       (G_ENCODE_VERSION (2, 34))
 | |
| 
 | |
| /**
 | |
|  * GLIB_VERSION_2_36:
 | |
|  *
 | |
|  * A macro that evaluates to the 2.36 version of GLib, in a format
 | |
|  * that can be used by the C pre-processor.
 | |
|  *
 | |
|  * Since: 2.36
 | |
|  */
 | |
| #define GLIB_VERSION_2_36       (G_ENCODE_VERSION (2, 36))
 | |
| 
 | |
| /**
 | |
|  * GLIB_VERSION_2_38:
 | |
|  *
 | |
|  * A macro that evaluates to the 2.38 version of GLib, in a format
 | |
|  * that can be used by the C pre-processor.
 | |
|  *
 | |
|  * Since: 2.38
 | |
|  */
 | |
| #define GLIB_VERSION_2_38       (G_ENCODE_VERSION (2, 38))
 | |
| 
 | |
| /**
 | |
|  * GLIB_VERSION_2_40:
 | |
|  *
 | |
|  * A macro that evaluates to the 2.40 version of GLib, in a format
 | |
|  * that can be used by the C pre-processor.
 | |
|  *
 | |
|  * Since: 2.40
 | |
|  */
 | |
| #define GLIB_VERSION_2_40       (G_ENCODE_VERSION (2, 40))
 | |
| 
 | |
| /**
 | |
|  * GLIB_VERSION_2_42:
 | |
|  *
 | |
|  * A macro that evaluates to the 2.42 version of GLib, in a format
 | |
|  * that can be used by the C pre-processor.
 | |
|  *
 | |
|  * Since: 2.42
 | |
|  */
 | |
| #define GLIB_VERSION_2_42       (G_ENCODE_VERSION (2, 42))
 | |
| 
 | |
| /**
 | |
|  * GLIB_VERSION_2_44:
 | |
|  *
 | |
|  * A macro that evaluates to the 2.44 version of GLib, in a format
 | |
|  * that can be used by the C pre-processor.
 | |
|  *
 | |
|  * Since: 2.44
 | |
|  */
 | |
| #define GLIB_VERSION_2_44       (G_ENCODE_VERSION (2, 44))
 | |
| 
 | |
| /**
 | |
|  * GLIB_VERSION_2_46:
 | |
|  *
 | |
|  * A macro that evaluates to the 2.46 version of GLib, in a format
 | |
|  * that can be used by the C pre-processor.
 | |
|  *
 | |
|  * Since: 2.46
 | |
|  */
 | |
| #define GLIB_VERSION_2_46       (G_ENCODE_VERSION (2, 46))
 | |
| 
 | |
| /**
 | |
|  * GLIB_VERSION_2_48:
 | |
|  *
 | |
|  * A macro that evaluates to the 2.48 version of GLib, in a format
 | |
|  * that can be used by the C pre-processor.
 | |
|  *
 | |
|  * Since: 2.48
 | |
|  */
 | |
| #define GLIB_VERSION_2_48       (G_ENCODE_VERSION (2, 48))
 | |
| 
 | |
| /**
 | |
|  * GLIB_VERSION_2_50:
 | |
|  *
 | |
|  * A macro that evaluates to the 2.50 version of GLib, in a format
 | |
|  * that can be used by the C pre-processor.
 | |
|  *
 | |
|  * Since: 2.50
 | |
|  */
 | |
| #define GLIB_VERSION_2_50       (G_ENCODE_VERSION (2, 50))
 | |
| 
 | |
| /**
 | |
|  * GLIB_VERSION_2_52:
 | |
|  *
 | |
|  * A macro that evaluates to the 2.52 version of GLib, in a format
 | |
|  * that can be used by the C pre-processor.
 | |
|  *
 | |
|  * Since: 2.52
 | |
|  */
 | |
| #define GLIB_VERSION_2_52       (G_ENCODE_VERSION (2, 52))
 | |
| 
 | |
| /* evaluates to the current stable version; for development cycles,
 | |
|  * this means the next stable target
 | |
|  */
 | |
| #if (GLIB_MINOR_VERSION % 2)
 | |
| #define GLIB_VERSION_CUR_STABLE         (G_ENCODE_VERSION (GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION + 1))
 | |
| #else
 | |
| #define GLIB_VERSION_CUR_STABLE         (G_ENCODE_VERSION (GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION))
 | |
| #endif
 | |
| 
 | |
| /* evaluates to the previous stable version */
 | |
| #if (GLIB_MINOR_VERSION % 2)
 | |
| #define GLIB_VERSION_PREV_STABLE        (G_ENCODE_VERSION (GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION - 1))
 | |
| #else
 | |
| #define GLIB_VERSION_PREV_STABLE        (G_ENCODE_VERSION (GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION - 2))
 | |
| #endif
 | |
| 
 | |
| /**
 | |
|  * GLIB_VERSION_MIN_REQUIRED:
 | |
|  *
 | |
|  * A macro that should be defined by the user prior to including
 | |
|  * the glib.h header.
 | |
|  * The definition should be one of the predefined GLib version
 | |
|  * macros: %GLIB_VERSION_2_26, %GLIB_VERSION_2_28,...
 | |
|  *
 | |
|  * This macro defines the earliest version of GLib that the package is
 | |
|  * required to be able to compile against.
 | |
|  *
 | |
|  * If the compiler is configured to warn about the use of deprecated
 | |
|  * functions, then using functions that were deprecated in version
 | |
|  * %GLIB_VERSION_MIN_REQUIRED or earlier will cause warnings (but
 | |
|  * using functions deprecated in later releases will not).
 | |
|  *
 | |
|  * Since: 2.32
 | |
|  */
 | |
| /* If the package sets GLIB_VERSION_MIN_REQUIRED to some future
 | |
|  * GLIB_VERSION_X_Y value that we don't know about, it will compare as
 | |
|  * 0 in preprocessor tests.
 | |
|  */
 | |
| #ifndef GLIB_VERSION_MIN_REQUIRED
 | |
| # define GLIB_VERSION_MIN_REQUIRED      (GLIB_VERSION_CUR_STABLE)
 | |
| #elif GLIB_VERSION_MIN_REQUIRED == 0
 | |
| # undef  GLIB_VERSION_MIN_REQUIRED
 | |
| # define GLIB_VERSION_MIN_REQUIRED      (GLIB_VERSION_CUR_STABLE + 2)
 | |
| #endif
 | |
| 
 | |
| /**
 | |
|  * GLIB_VERSION_MAX_ALLOWED:
 | |
|  *
 | |
|  * A macro that should be defined by the user prior to including
 | |
|  * the glib.h header.
 | |
|  * The definition should be one of the predefined GLib version
 | |
|  * macros: %GLIB_VERSION_2_26, %GLIB_VERSION_2_28,...
 | |
|  *
 | |
|  * This macro defines the latest version of the GLib API that the
 | |
|  * package is allowed to make use of.
 | |
|  *
 | |
|  * If the compiler is configured to warn about the use of deprecated
 | |
|  * functions, then using functions added after version
 | |
|  * %GLIB_VERSION_MAX_ALLOWED will cause warnings.
 | |
|  *
 | |
|  * Unless you are using GLIB_CHECK_VERSION() or the like to compile
 | |
|  * different code depending on the GLib version, then this should be
 | |
|  * set to the same value as %GLIB_VERSION_MIN_REQUIRED.
 | |
|  *
 | |
|  * Since: 2.32
 | |
|  */
 | |
| #if !defined (GLIB_VERSION_MAX_ALLOWED) || (GLIB_VERSION_MAX_ALLOWED == 0)
 | |
| # undef GLIB_VERSION_MAX_ALLOWED
 | |
| # define GLIB_VERSION_MAX_ALLOWED      (GLIB_VERSION_CUR_STABLE)
 | |
| #endif
 | |
| 
 | |
| /* sanity checks */
 | |
| #if GLIB_VERSION_MIN_REQUIRED > GLIB_VERSION_CUR_STABLE
 | |
| #error "GLIB_VERSION_MIN_REQUIRED must be <= GLIB_VERSION_CUR_STABLE"
 | |
| #endif
 | |
| #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_MIN_REQUIRED
 | |
| #error "GLIB_VERSION_MAX_ALLOWED must be >= GLIB_VERSION_MIN_REQUIRED"
 | |
| #endif
 | |
| #if GLIB_VERSION_MIN_REQUIRED < GLIB_VERSION_2_26
 | |
| #error "GLIB_VERSION_MIN_REQUIRED must be >= GLIB_VERSION_2_26"
 | |
| #endif
 | |
| 
 | |
| /* These macros are used to mark deprecated functions in GLib headers,
 | |
|  * and thus have to be exposed in installed headers. But please
 | |
|  * do *not* use them in other projects. Instead, use G_DEPRECATED
 | |
|  * or define your own wrappers around it.
 | |
|  */
 | |
| #define GLIB_AVAILABLE_IN_ALL                   _GLIB_EXTERN
 | |
| 
 | |
| /* XXX: Every new stable minor release should add a set of macros here */
 | |
| 
 | |
| #if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_26
 | |
| # define GLIB_DEPRECATED_IN_2_26                GLIB_DEPRECATED
 | |
| # define GLIB_DEPRECATED_IN_2_26_FOR(f)         GLIB_DEPRECATED_FOR(f)
 | |
| #else
 | |
| # define GLIB_DEPRECATED_IN_2_26                _GLIB_EXTERN
 | |
| # define GLIB_DEPRECATED_IN_2_26_FOR(f)         _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_26
 | |
| # define GLIB_AVAILABLE_IN_2_26                 GLIB_UNAVAILABLE(2, 26)
 | |
| #else
 | |
| # define GLIB_AVAILABLE_IN_2_26                 _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_28
 | |
| # define GLIB_DEPRECATED_IN_2_28                GLIB_DEPRECATED
 | |
| # define GLIB_DEPRECATED_IN_2_28_FOR(f)         GLIB_DEPRECATED_FOR(f)
 | |
| #else
 | |
| # define GLIB_DEPRECATED_IN_2_28                _GLIB_EXTERN
 | |
| # define GLIB_DEPRECATED_IN_2_28_FOR(f)         _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_28
 | |
| # define GLIB_AVAILABLE_IN_2_28                 GLIB_UNAVAILABLE(2, 28)
 | |
| #else
 | |
| # define GLIB_AVAILABLE_IN_2_28                 _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_30
 | |
| # define GLIB_DEPRECATED_IN_2_30                GLIB_DEPRECATED
 | |
| # define GLIB_DEPRECATED_IN_2_30_FOR(f)         GLIB_DEPRECATED_FOR(f)
 | |
| #else
 | |
| # define GLIB_DEPRECATED_IN_2_30                _GLIB_EXTERN
 | |
| # define GLIB_DEPRECATED_IN_2_30_FOR(f)         _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_30
 | |
| # define GLIB_AVAILABLE_IN_2_30                 GLIB_UNAVAILABLE(2, 30)
 | |
| #else
 | |
| # define GLIB_AVAILABLE_IN_2_30                 _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_32
 | |
| # define GLIB_DEPRECATED_IN_2_32                GLIB_DEPRECATED
 | |
| # define GLIB_DEPRECATED_IN_2_32_FOR(f)         GLIB_DEPRECATED_FOR(f)
 | |
| #else
 | |
| # define GLIB_DEPRECATED_IN_2_32                _GLIB_EXTERN
 | |
| # define GLIB_DEPRECATED_IN_2_32_FOR(f)         _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_32
 | |
| # define GLIB_AVAILABLE_IN_2_32                 GLIB_UNAVAILABLE(2, 32)
 | |
| #else
 | |
| # define GLIB_AVAILABLE_IN_2_32                 _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_34
 | |
| # define GLIB_DEPRECATED_IN_2_34                GLIB_DEPRECATED
 | |
| # define GLIB_DEPRECATED_IN_2_34_FOR(f)         GLIB_DEPRECATED_FOR(f)
 | |
| #else
 | |
| # define GLIB_DEPRECATED_IN_2_34                _GLIB_EXTERN
 | |
| # define GLIB_DEPRECATED_IN_2_34_FOR(f)         _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_34
 | |
| # define GLIB_AVAILABLE_IN_2_34                 GLIB_UNAVAILABLE(2, 34)
 | |
| #else
 | |
| # define GLIB_AVAILABLE_IN_2_34                 _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_36
 | |
| # define GLIB_DEPRECATED_IN_2_36                GLIB_DEPRECATED
 | |
| # define GLIB_DEPRECATED_IN_2_36_FOR(f)         GLIB_DEPRECATED_FOR(f)
 | |
| #else
 | |
| # define GLIB_DEPRECATED_IN_2_36                _GLIB_EXTERN
 | |
| # define GLIB_DEPRECATED_IN_2_36_FOR(f)         _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_36
 | |
| # define GLIB_AVAILABLE_IN_2_36                 GLIB_UNAVAILABLE(2, 36)
 | |
| #else
 | |
| # define GLIB_AVAILABLE_IN_2_36                 _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_38
 | |
| # define GLIB_DEPRECATED_IN_2_38                GLIB_DEPRECATED
 | |
| # define GLIB_DEPRECATED_IN_2_38_FOR(f)         GLIB_DEPRECATED_FOR(f)
 | |
| #else
 | |
| # define GLIB_DEPRECATED_IN_2_38                _GLIB_EXTERN
 | |
| # define GLIB_DEPRECATED_IN_2_38_FOR(f)         _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
 | |
| # define GLIB_AVAILABLE_IN_2_38                 GLIB_UNAVAILABLE(2, 38)
 | |
| #else
 | |
| # define GLIB_AVAILABLE_IN_2_38                 _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_40
 | |
| # define GLIB_DEPRECATED_IN_2_40                GLIB_DEPRECATED
 | |
| # define GLIB_DEPRECATED_IN_2_40_FOR(f)         GLIB_DEPRECATED_FOR(f)
 | |
| #else
 | |
| # define GLIB_DEPRECATED_IN_2_40                _GLIB_EXTERN
 | |
| # define GLIB_DEPRECATED_IN_2_40_FOR(f)         _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_40
 | |
| # define GLIB_AVAILABLE_IN_2_40                 GLIB_UNAVAILABLE(2, 40)
 | |
| #else
 | |
| # define GLIB_AVAILABLE_IN_2_40                 _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_42
 | |
| # define GLIB_DEPRECATED_IN_2_42                GLIB_DEPRECATED
 | |
| # define GLIB_DEPRECATED_IN_2_42_FOR(f)         GLIB_DEPRECATED_FOR(f)
 | |
| #else
 | |
| # define GLIB_DEPRECATED_IN_2_42                _GLIB_EXTERN
 | |
| # define GLIB_DEPRECATED_IN_2_42_FOR(f)         _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_42
 | |
| # define GLIB_AVAILABLE_IN_2_42                 GLIB_UNAVAILABLE(2, 42)
 | |
| #else
 | |
| # define GLIB_AVAILABLE_IN_2_42                 _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_44
 | |
| # define GLIB_DEPRECATED_IN_2_44                GLIB_DEPRECATED
 | |
| # define GLIB_DEPRECATED_IN_2_44_FOR(f)         GLIB_DEPRECATED_FOR(f)
 | |
| #else
 | |
| # define GLIB_DEPRECATED_IN_2_44                _GLIB_EXTERN
 | |
| # define GLIB_DEPRECATED_IN_2_44_FOR(f)         _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_44
 | |
| # define GLIB_AVAILABLE_IN_2_44                 GLIB_UNAVAILABLE(2, 44)
 | |
| #else
 | |
| # define GLIB_AVAILABLE_IN_2_44                 _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_46
 | |
| # define GLIB_DEPRECATED_IN_2_46                GLIB_DEPRECATED
 | |
| # define GLIB_DEPRECATED_IN_2_46_FOR(f)         GLIB_DEPRECATED_FOR(f)
 | |
| #else
 | |
| # define GLIB_DEPRECATED_IN_2_46                _GLIB_EXTERN
 | |
| # define GLIB_DEPRECATED_IN_2_46_FOR(f)         _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_46
 | |
| # define GLIB_AVAILABLE_IN_2_46                 GLIB_UNAVAILABLE(2, 46)
 | |
| #else
 | |
| # define GLIB_AVAILABLE_IN_2_46                 _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_48
 | |
| # define GLIB_DEPRECATED_IN_2_48                GLIB_DEPRECATED
 | |
| # define GLIB_DEPRECATED_IN_2_48_FOR(f)         GLIB_DEPRECATED_FOR(f)
 | |
| #else
 | |
| # define GLIB_DEPRECATED_IN_2_48                _GLIB_EXTERN
 | |
| # define GLIB_DEPRECATED_IN_2_48_FOR(f)         _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_48
 | |
| # define GLIB_AVAILABLE_IN_2_48                 GLIB_UNAVAILABLE(2, 48)
 | |
| #else
 | |
| # define GLIB_AVAILABLE_IN_2_48                 _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_50
 | |
| # define GLIB_DEPRECATED_IN_2_50                GLIB_DEPRECATED
 | |
| # define GLIB_DEPRECATED_IN_2_50_FOR(f)         GLIB_DEPRECATED_FOR(f)
 | |
| #else
 | |
| # define GLIB_DEPRECATED_IN_2_50                _GLIB_EXTERN
 | |
| # define GLIB_DEPRECATED_IN_2_50_FOR(f)         _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_50
 | |
| # define GLIB_AVAILABLE_IN_2_50                 GLIB_UNAVAILABLE(2, 50)
 | |
| #else
 | |
| # define GLIB_AVAILABLE_IN_2_50                 _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_52
 | |
| # define GLIB_DEPRECATED_IN_2_52                GLIB_DEPRECATED
 | |
| # define GLIB_DEPRECATED_IN_2_52_FOR(f)         GLIB_DEPRECATED_FOR(f)
 | |
| #else
 | |
| # define GLIB_DEPRECATED_IN_2_52                _GLIB_EXTERN
 | |
| # define GLIB_DEPRECATED_IN_2_52_FOR(f)         _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_52
 | |
| # define GLIB_AVAILABLE_IN_2_52                 GLIB_UNAVAILABLE(2, 52)
 | |
| #else
 | |
| # define GLIB_AVAILABLE_IN_2_52                 _GLIB_EXTERN
 | |
| #endif
 | |
| 
 | |
| #endif /*  __G_VERSION_MACROS_H__ */
 | |
| #include <time.h>
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* 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;
 | |
| 
 | |
| /* Define min and max constants for the fixed size numerical types */
 | |
| #define G_MININT8	((gint8) -0x80)
 | |
| #define G_MAXINT8	((gint8)  0x7f)
 | |
| #define G_MAXUINT8	((guint8) 0xff)
 | |
| 
 | |
| #define G_MININT16	((gint16) -0x8000)
 | |
| #define G_MAXINT16	((gint16)  0x7fff)
 | |
| #define G_MAXUINT16	((guint16) 0xffff)
 | |
| 
 | |
| #define G_MININT32	((gint32) (-0x7fffffff - 1))
 | |
| #define G_MAXINT32	((gint32)   0x7fffffff)
 | |
| #define G_MAXUINT32	((guint32)  0xffffffff)
 | |
| 
 | |
| #define G_MININT64	((gint64) G_GINT64_CONSTANT(-0x8000000000000000))
 | |
| #define G_MAXINT64	G_GINT64_CONSTANT(0x7fffffffffffffff)
 | |
| #define G_MAXUINT64	G_GUINT64_CONSTANT(0xffffffffffffffff)
 | |
| 
 | |
| typedef void* gpointer;
 | |
| typedef const void *gconstpointer;
 | |
| 
 | |
| typedef gint            (*GCompareFunc)         (gconstpointer  a,
 | |
|                                                  gconstpointer  b);
 | |
| typedef gint            (*GCompareDataFunc)     (gconstpointer  a,
 | |
|                                                  gconstpointer  b,
 | |
| 						 gpointer       user_data);
 | |
| typedef gboolean        (*GEqualFunc)           (gconstpointer  a,
 | |
|                                                  gconstpointer  b);
 | |
| typedef void            (*GDestroyNotify)       (gpointer       data);
 | |
| typedef void            (*GFunc)                (gpointer       data,
 | |
|                                                  gpointer       user_data);
 | |
| typedef guint           (*GHashFunc)            (gconstpointer  key);
 | |
| typedef void            (*GHFunc)               (gpointer       key,
 | |
|                                                  gpointer       value,
 | |
|                                                  gpointer       user_data);
 | |
| 
 | |
| /**
 | |
|  * GFreeFunc:
 | |
|  * @data: a data pointer
 | |
|  *
 | |
|  * Declares a type of function which takes an arbitrary
 | |
|  * data pointer argument and has no return value. It is
 | |
|  * not currently used in GLib or GTK+.
 | |
|  */
 | |
| typedef void            (*GFreeFunc)            (gpointer       data);
 | |
| 
 | |
| /**
 | |
|  * GTranslateFunc:
 | |
|  * @str: the untranslated string
 | |
|  * @data: user data specified when installing the function, e.g.
 | |
|  *  in g_option_group_set_translate_func()
 | |
|  * 
 | |
|  * The type of functions which are used to translate user-visible
 | |
|  * strings, for <option>--help</option> output.
 | |
|  * 
 | |
|  * Returns: a translation of the string for the current locale.
 | |
|  *  The returned string is owned by GLib and must not be freed.
 | |
|  */
 | |
| typedef const gchar *   (*GTranslateFunc)       (const gchar   *str,
 | |
| 						 gpointer       data);
 | |
| 
 | |
| 
 | |
| /* Define some mathematical constants that aren't available
 | |
|  * symbolically in some strict ISO C implementations.
 | |
|  *
 | |
|  * Note that the large number of digits used in these definitions
 | |
|  * doesn't imply that GLib or current computers in general would be
 | |
|  * able to handle floating point numbers with an accuracy like this.
 | |
|  * It's mostly an exercise in futility and future proofing. For
 | |
|  * extended precision floating point support, look somewhere else
 | |
|  * than GLib.
 | |
|  */
 | |
| #define G_E     2.7182818284590452353602874713526624977572470937000
 | |
| #define G_LN2   0.69314718055994530941723212145817656807550013436026
 | |
| #define G_LN10  2.3025850929940456840179914546843642076011014886288
 | |
| #define G_PI    3.1415926535897932384626433832795028841971693993751
 | |
| #define G_PI_2  1.5707963267948966192313216916397514420985846996876
 | |
| #define G_PI_4  0.78539816339744830961566084581987572104929234984378
 | |
| #define G_SQRT2 1.4142135623730950488016887242096980785696718753769
 | |
| 
 | |
| /* 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) ((guint16) (val) >> 8) |	\
 | |
|     (guint16) ((guint16) (val) << 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)))
 | |
| 
 | |
| #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)))
 | |
| 
 | |
| /* Arch specific stuff for speed
 | |
|  */
 | |
| #if defined (__GNUC__) && (__GNUC__ >= 2) && defined (__OPTIMIZE__)
 | |
| 
 | |
| #  if __GNUC__ >= 4 && defined (__GNUC_MINOR__) && __GNUC_MINOR__ >= 3
 | |
| #    define GUINT32_SWAP_LE_BE(val) ((guint32) __builtin_bswap32 ((gint32) (val)))
 | |
| #    define GUINT64_SWAP_LE_BE(val) ((guint64) __builtin_bswap64 ((gint64) (val)))
 | |
| #  endif
 | |
| 
 | |
| #  if defined (__i386__)
 | |
| #    define GUINT16_SWAP_LE_BE_IA32(val) \
 | |
|        (lG_GNUC_EXTENSION					\
 | |
| 	({ guint16 __v, __x = ((guint16) (val));		\
 | |
| 	   if (__builtin_constant_p (__x))			\
 | |
| 	     __v = GUINT16_SWAP_LE_BE_CONSTANT (__x);		\
 | |
| 	   else							\
 | |
| 	     __asm__ ("rorw $8, %w0"				\
 | |
| 		      : "=r" (__v)				\
 | |
| 		      : "0" (__x)				\
 | |
| 		      : "cc");					\
 | |
| 	    __v; }))
 | |
| #    if !defined (__i486__) && !defined (__i586__) \
 | |
| 	&& !defined (__pentium__) && !defined (__i686__) \
 | |
| 	&& !defined (__pentiumpro__) && !defined (__pentium4__)
 | |
| #       define GUINT32_SWAP_LE_BE_IA32(val) \
 | |
| 	  (lG_GNUC_EXTENSION					\
 | |
| 	   ({ guint32 __v, __x = ((guint32) (val));		\
 | |
| 	      if (__builtin_constant_p (__x))			\
 | |
| 		__v = GUINT32_SWAP_LE_BE_CONSTANT (__x);	\
 | |
| 	      else						\
 | |
| 		__asm__ ("rorw $8, %w0\n\t"			\
 | |
| 			 "rorl $16, %0\n\t"			\
 | |
| 			 "rorw $8, %w0"				\
 | |
| 			 : "=r" (__v)				\
 | |
| 			 : "0" (__x)				\
 | |
| 			 : "cc");				\
 | |
| 	      __v; }))
 | |
| #    else /* 486 and higher has bswap */
 | |
| #       define GUINT32_SWAP_LE_BE_IA32(val) \
 | |
| 	  (lG_GNUC_EXTENSION					\
 | |
| 	   ({ guint32 __v, __x = ((guint32) (val));		\
 | |
| 	      if (__builtin_constant_p (__x))			\
 | |
| 		__v = GUINT32_SWAP_LE_BE_CONSTANT (__x);	\
 | |
| 	      else						\
 | |
| 		__asm__ ("bswap %0"				\
 | |
| 			 : "=r" (__v)				\
 | |
| 			 : "0" (__x));				\
 | |
| 	      __v; }))
 | |
| #    endif /* processor specific 32-bit stuff */
 | |
| #    define GUINT64_SWAP_LE_BE_IA32(val) \
 | |
|        (lG_GNUC_EXTENSION						\
 | |
| 	({ union { guint64 __ll;					\
 | |
| 		   guint32 __l[2]; } __w, __r;				\
 | |
| 	   __w.__ll = ((guint64) (val));				\
 | |
| 	   if (__builtin_constant_p (__w.__ll))				\
 | |
| 	     __r.__ll = GUINT64_SWAP_LE_BE_CONSTANT (__w.__ll);		\
 | |
| 	   else								\
 | |
| 	     {								\
 | |
| 	       __r.__l[0] = GUINT32_SWAP_LE_BE (__w.__l[1]);		\
 | |
| 	       __r.__l[1] = GUINT32_SWAP_LE_BE (__w.__l[0]);		\
 | |
| 	     }								\
 | |
| 	   __r.__ll; }))
 | |
|      /* Possibly just use the constant version and let gcc figure it out? */
 | |
| #    define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_IA32 (val))
 | |
| #    ifndef GUINT32_SWAP_LE_BE
 | |
| #      define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_IA32 (val))
 | |
| #    endif
 | |
| #    ifndef GUINT64_SWAP_LE_BE
 | |
| #      define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_IA32 (val))
 | |
| #    endif
 | |
| #  elif defined (__ia64__)
 | |
| #    define GUINT16_SWAP_LE_BE_IA64(val) \
 | |
|        (lG_GNUC_EXTENSION					\
 | |
| 	({ 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) \
 | |
|        (lG_GNUC_EXTENSION					\
 | |
| 	 ({ 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) \
 | |
|        (lG_GNUC_EXTENSION					\
 | |
| 	({ 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))
 | |
| #    ifndef GUINT32_SWAP_LE_BE
 | |
| #      define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_IA64 (val))
 | |
| #    endif
 | |
| #    ifndef GUINT64_SWAP_LE_BE
 | |
| #      define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_IA64 (val))
 | |
| #    endif
 | |
| #  elif defined (__x86_64__)
 | |
| #    define GUINT32_SWAP_LE_BE_X86_64(val) \
 | |
|        (lG_GNUC_EXTENSION					\
 | |
| 	 ({ 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) \
 | |
|        (lG_GNUC_EXTENSION					\
 | |
| 	({ 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))
 | |
| #    ifndef GUINT32_SWAP_LE_BE
 | |
| #      define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_X86_64 (val))
 | |
| #    endif
 | |
| #    ifndef GUINT64_SWAP_LE_BE
 | |
| #      define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_X86_64 (val))
 | |
| #    endif
 | |
| #  else /* generic gcc */
 | |
| #    define GUINT16_SWAP_LE_BE(val) (GUINT16_SWAP_LE_BE_CONSTANT (val))
 | |
| #    ifndef GUINT32_SWAP_LE_BE
 | |
| #      define GUINT32_SWAP_LE_BE(val) (GUINT32_SWAP_LE_BE_CONSTANT (val))
 | |
| #    endif
 | |
| #    ifndef GUINT64_SWAP_LE_BE
 | |
| #      define GUINT64_SWAP_LE_BE(val) (GUINT64_SWAP_LE_BE_CONSTANT (val))
 | |
| #    endif
 | |
| #  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))
 | |
| 
 | |
| #define GSIZE_FROM_LE(val)	(GSIZE_TO_LE (val))
 | |
| #define GSSIZE_FROM_LE(val)	(GSSIZE_TO_LE (val))
 | |
| #define GSIZE_FROM_BE(val)	(GSIZE_TO_BE (val))
 | |
| #define GSSIZE_FROM_BE(val)	(GSSIZE_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))
 | |
| 
 | |
| /* Overflow-checked unsigned integer arithmetic
 | |
|  */
 | |
| #ifndef _GLIB_TEST_OVERFLOW_FALLBACK
 | |
| /* https://bugzilla.gnome.org/show_bug.cgi?id=769104 */
 | |
| #if __GNUC__ >= 5 && !defined(__INTEL_COMPILER)
 | |
| #define _GLIB_HAVE_BUILTIN_OVERFLOW_CHECKS
 | |
| #elif __has_builtin(__builtin_uadd_overflow)
 | |
| #define _GLIB_HAVE_BUILTIN_OVERFLOW_CHECKS
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
| #define g_uint_checked_add(dest, a, b) \
 | |
|     _GLIB_CHECKED_ADD_U32(dest, a, b)
 | |
| #define g_uint_checked_mul(dest, a, b) \
 | |
|     _GLIB_CHECKED_MUL_U32(dest, a, b)
 | |
| 
 | |
| #define g_uint64_checked_add(dest, a, b) \
 | |
|     _GLIB_CHECKED_ADD_U64(dest, a, b)
 | |
| #define g_uint64_checked_mul(dest, a, b) \
 | |
|     _GLIB_CHECKED_MUL_U64(dest, a, b)
 | |
| 
 | |
| #if GLIB_SIZEOF_SIZE_T == 8
 | |
| #define g_size_checked_add(dest, a, b) \
 | |
|     _GLIB_CHECKED_ADD_U64(dest, a, b)
 | |
| #define g_size_checked_mul(dest, a, b) \
 | |
|     _GLIB_CHECKED_MUL_U64(dest, a, b)
 | |
| #else
 | |
| #define g_size_checked_add(dest, a, b) \
 | |
|     _GLIB_CHECKED_ADD_U32(dest, a, b)
 | |
| #define g_size_checked_mul(dest, a, b) \
 | |
|     _GLIB_CHECKED_MUL_U32(dest, a, b)
 | |
| #endif
 | |
| 
 | |
| /* The names of the following inlines are private.  Use the macro
 | |
|  * definitions above.
 | |
|  */
 | |
| #ifdef _GLIB_HAVE_BUILTIN_OVERFLOW_CHECKS
 | |
| static inline gboolean _GLIB_CHECKED_ADD_U32 (guint32 *dest, guint32 a, guint32 b) {
 | |
|   return !__builtin_uadd_overflow(a, b, dest); }
 | |
| static inline gboolean _GLIB_CHECKED_MUL_U32 (guint32 *dest, guint32 a, guint32 b) {
 | |
|   return !__builtin_umul_overflow(a, b, dest); }
 | |
| static inline gboolean _GLIB_CHECKED_ADD_U64 (guint64 *dest, guint64 a, guint64 b) {
 | |
|   G_STATIC_ASSERT(sizeof (unsigned long long) == sizeof (guint64));
 | |
|   return !__builtin_uaddll_overflow(a, b, (unsigned long long *) dest); }
 | |
| static inline gboolean _GLIB_CHECKED_MUL_U64 (guint64 *dest, guint64 a, guint64 b) {
 | |
|   return !__builtin_umulll_overflow(a, b, (unsigned long long *) dest); }
 | |
| #else
 | |
| static inline gboolean _GLIB_CHECKED_ADD_U32 (guint32 *dest, guint32 a, guint32 b) {
 | |
|   *dest = a + b; return *dest >= a; }
 | |
| static inline gboolean _GLIB_CHECKED_MUL_U32 (guint32 *dest, guint32 a, guint32 b) {
 | |
|   *dest = a * b; return !a || *dest / a == b; }
 | |
| static inline gboolean _GLIB_CHECKED_ADD_U64 (guint64 *dest, guint64 a, guint64 b) {
 | |
|   *dest = a + b; return *dest >= a; }
 | |
| static inline gboolean _GLIB_CHECKED_MUL_U64 (guint64 *dest, guint64 a, guint64 b) {
 | |
|   *dest = a * b; return !a || *dest / a == b; }
 | |
| #endif
 | |
| 
 | |
| /* 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_ENDIAN
 | |
| union _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_ENDIAN
 | |
| union _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 _GLIB_EXTERN
 | |
| #  endif /* !G_PLATFORM_WIN32 */
 | |
| #endif /* GLIB_VAR */
 | |
| 
 | |
| #endif /* __G_TYPES_H__ */
 | |
| 
 | |
| #if defined(__BIONIC__) && defined (GLIB_HAVE_ALLOCA_H)
 | |
| # include <alloca.h>
 | |
| #elif defined(__GNUC__)
 | |
| /* GCC does the right thing */
 | |
| # undef alloca
 | |
| # define alloca(size)   __builtin_alloca (size)
 | |
| #elif defined (GLIB_HAVE_ALLOCA_H)
 | |
| /* a native and working alloca.h is there */ 
 | |
| # include <alloca.h>
 | |
| #else /* !__GNUC__ && !GLIB_HAVE_ALLOCA_H */
 | |
| # if defined(_MSC_VER) || defined(__DMC__)
 | |
| #  include <malloc.h>
 | |
| #  define alloca _alloca
 | |
| # else /* !_MSC_VER && !__DMC__ */
 | |
| #  ifdef _AIX
 | |
| #   pragma alloca
 | |
| #  else /* !_AIX */
 | |
| #   ifndef alloca /* predefined by HP cc +Olibcalls */
 | |
| G_BEGIN_DECLS
 | |
| char *alloca ();
 | |
| G_END_DECLS
 | |
| #   endif /* !alloca */
 | |
| #  endif /* !_AIX */
 | |
| # endif /* !_MSC_VER && !__DMC__ */
 | |
| #endif /* !__GNUC__ && !GLIB_HAVE_ALLOCA_H */
 | |
| 
 | |
| /**
 | |
|  * g_alloca:
 | |
|  * @size: number of bytes to allocate.
 | |
|  * 
 | |
|  * Allocates @size bytes on the stack; these bytes will be freed when the current
 | |
|  * stack frame is cleaned up. This macro essentially just wraps the alloca()
 | |
|  * function present on most UNIX variants.
 | |
|  * Thus it provides the same advantages and pitfalls as alloca():
 | |
|  *
 | |
|  * - alloca() is very fast, as on most systems it's implemented by just adjusting
 | |
|  *   the stack pointer register.
 | |
|  *
 | |
|  * - It doesn't cause any memory fragmentation, within its scope, separate alloca()
 | |
|  *   blocks just build up and are released together at function end.
 | |
|  *
 | |
|  * - Allocation sizes have to fit into the current stack frame. For instance in a
 | |
|  *   threaded environment on Linux, the per-thread stack size is limited to 2 Megabytes,
 | |
|  *   so be sparse with alloca() uses.
 | |
|  *
 | |
|  * - Allocation failure due to insufficient stack space is not indicated with a %NULL
 | |
|  *   return like e.g. with malloc(). Instead, most systems probably handle it the same
 | |
|  *   way as out of stack space situations from infinite function recursion, i.e.
 | |
|  *   with a segmentation fault.
 | |
|  *
 | |
|  * - Special care has to be taken when mixing alloca() with GNU C variable sized arrays.
 | |
|  *   Stack space allocated with alloca() in the same scope as a variable sized array
 | |
|  *   will be freed together with the variable sized array upon exit of that scope, and
 | |
|  *   not upon exit of the enclosing function scope.
 | |
|  * 
 | |
|  * Returns: space for @size bytes, allocated on the stack
 | |
|  */
 | |
| #define g_alloca(size)		 alloca (size)
 | |
| /**
 | |
|  * g_newa:
 | |
|  * @struct_type: Type of memory chunks to be allocated
 | |
|  * @n_structs: Number of chunks to be allocated
 | |
|  * 
 | |
|  * Wraps g_alloca() in a more typesafe manner.
 | |
|  * 
 | |
|  * Returns: Pointer to stack space for @n_structs chunks of type @struct_type
 | |
|  */
 | |
| #define g_newa(struct_type, n_structs)	((struct_type*) g_alloca (sizeof (struct_type) * (gsize) (n_structs)))
 | |
| 
 | |
| #endif /* __G_ALLOCA_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_ARRAY_H__
 | |
| #define __G_ARRAY_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GBytes          GBytes;
 | |
| typedef struct _GArray		GArray;
 | |
| typedef struct _GByteArray	GByteArray;
 | |
| typedef struct _GPtrArray	GPtrArray;
 | |
| 
 | |
| struct _GArray
 | |
| {
 | |
|   gchar *data;
 | |
|   guint len;
 | |
| };
 | |
| 
 | |
| struct _GByteArray
 | |
| {
 | |
|   guint8 *data;
 | |
|   guint	  len;
 | |
| };
 | |
| 
 | |
| struct _GPtrArray
 | |
| {
 | |
|   gpointer *pdata;
 | |
|   guint	    len;
 | |
| };
 | |
| 
 | |
| /* Resizable arrays. remove fills any cleared spot and shortens the
 | |
|  * array, while preserving the order. remove_fast will distort the
 | |
|  * order by moving the last element to the position of the removed.
 | |
|  */
 | |
| 
 | |
| #define g_array_append_val(a,v)	  g_array_append_vals (a, &(v), 1)
 | |
| #define g_array_prepend_val(a,v)  g_array_prepend_vals (a, &(v), 1)
 | |
| #define g_array_insert_val(a,i,v) g_array_insert_vals (a, i, &(v), 1)
 | |
| #define g_array_index(a,t,i)      (((t*) (void *) (a)->data) [(i)])
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GArray* g_array_new               (gboolean          zero_terminated,
 | |
| 				   gboolean          clear_,
 | |
| 				   guint             element_size);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GArray* g_array_sized_new         (gboolean          zero_terminated,
 | |
| 				   gboolean          clear_,
 | |
| 				   guint             element_size,
 | |
| 				   guint             reserved_size);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*  g_array_free              (GArray           *array,
 | |
| 				   gboolean          free_segment);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GArray *g_array_ref               (GArray           *array);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_array_unref             (GArray           *array);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint   g_array_get_element_size  (GArray           *array);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GArray* g_array_append_vals       (GArray           *array,
 | |
| 				   gconstpointer     data,
 | |
| 				   guint             len);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GArray* g_array_prepend_vals      (GArray           *array,
 | |
| 				   gconstpointer     data,
 | |
| 				   guint             len);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GArray* g_array_insert_vals       (GArray           *array,
 | |
| 				   guint             index_,
 | |
| 				   gconstpointer     data,
 | |
| 				   guint             len);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GArray* g_array_set_size          (GArray           *array,
 | |
| 				   guint             length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GArray* g_array_remove_index      (GArray           *array,
 | |
| 				   guint             index_);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GArray* g_array_remove_index_fast (GArray           *array,
 | |
| 				   guint             index_);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GArray* g_array_remove_range      (GArray           *array,
 | |
| 				   guint             index_,
 | |
| 				   guint             length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_array_sort              (GArray           *array,
 | |
| 				   GCompareFunc      compare_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_array_sort_with_data    (GArray           *array,
 | |
| 				   GCompareDataFunc  compare_func,
 | |
| 				   gpointer          user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_array_set_clear_func    (GArray           *array,
 | |
|                                    GDestroyNotify    clear_func);
 | |
| 
 | |
| /* Resizable pointer array.  This interface is much less complicated
 | |
|  * than the above.  Add appends a pointer.  Remove fills any cleared 
 | |
|  * spot and shortens the array. remove_fast will again distort order.  
 | |
|  */
 | |
| #define    g_ptr_array_index(array,index_) ((array)->pdata)[index_]
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GPtrArray* g_ptr_array_new                (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GPtrArray* g_ptr_array_new_with_free_func (GDestroyNotify    element_free_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GPtrArray* g_ptr_array_sized_new          (guint             reserved_size);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GPtrArray* g_ptr_array_new_full           (guint             reserved_size,
 | |
| 					   GDestroyNotify    element_free_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer*  g_ptr_array_free               (GPtrArray        *array,
 | |
| 					   gboolean          free_seg);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GPtrArray* g_ptr_array_ref                (GPtrArray        *array);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void       g_ptr_array_unref              (GPtrArray        *array);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void       g_ptr_array_set_free_func      (GPtrArray        *array,
 | |
|                                            GDestroyNotify    element_free_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void       g_ptr_array_set_size           (GPtrArray        *array,
 | |
| 					   gint              length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer   g_ptr_array_remove_index       (GPtrArray        *array,
 | |
| 					   guint             index_);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer   g_ptr_array_remove_index_fast  (GPtrArray        *array,
 | |
| 					   guint             index_);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean   g_ptr_array_remove             (GPtrArray        *array,
 | |
| 					   gpointer          data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean   g_ptr_array_remove_fast        (GPtrArray        *array,
 | |
| 					   gpointer          data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GPtrArray *g_ptr_array_remove_range       (GPtrArray        *array,
 | |
| 					   guint             index_,
 | |
| 					   guint             length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void       g_ptr_array_add                (GPtrArray        *array,
 | |
| 					   gpointer          data);
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| void       g_ptr_array_insert             (GPtrArray        *array,
 | |
|                                            gint              index_,
 | |
|                                            gpointer          data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void       g_ptr_array_sort               (GPtrArray        *array,
 | |
| 					   GCompareFunc      compare_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void       g_ptr_array_sort_with_data     (GPtrArray        *array,
 | |
| 					   GCompareDataFunc  compare_func,
 | |
| 					   gpointer          user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void       g_ptr_array_foreach            (GPtrArray        *array,
 | |
| 					   GFunc             func,
 | |
| 					   gpointer          user_data);
 | |
| 
 | |
| 
 | |
| /* Byte arrays, an array of guint8.  Implemented as a GArray,
 | |
|  * but type-safe.
 | |
|  */
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GByteArray* g_byte_array_new               (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GByteArray* g_byte_array_new_take          (guint8           *data,
 | |
|                                             gsize             len);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GByteArray* g_byte_array_sized_new         (guint             reserved_size);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint8*     g_byte_array_free              (GByteArray       *array,
 | |
| 					    gboolean          free_segment);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GBytes*     g_byte_array_free_to_bytes     (GByteArray       *array);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GByteArray *g_byte_array_ref               (GByteArray       *array);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_byte_array_unref             (GByteArray       *array);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GByteArray* g_byte_array_append            (GByteArray       *array,
 | |
| 					    const guint8     *data,
 | |
| 					    guint             len);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GByteArray* g_byte_array_prepend           (GByteArray       *array,
 | |
| 					    const guint8     *data,
 | |
| 					    guint             len);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GByteArray* g_byte_array_set_size          (GByteArray       *array,
 | |
| 					    guint             length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GByteArray* g_byte_array_remove_index      (GByteArray       *array,
 | |
| 					    guint             index_);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GByteArray* g_byte_array_remove_index_fast (GByteArray       *array,
 | |
| 					    guint             index_);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GByteArray* g_byte_array_remove_range      (GByteArray       *array,
 | |
| 					    guint             index_,
 | |
| 					    guint             length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_byte_array_sort              (GByteArray       *array,
 | |
| 					    GCompareFunc      compare_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_byte_array_sort_with_data    (GByteArray       *array,
 | |
| 					    GCompareDataFunc  compare_func,
 | |
| 					    gpointer          user_data);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_ARRAY_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_ASYNCQUEUE_H__
 | |
| #define __G_ASYNCQUEUE_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| /* 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 Lesser General Public License as
 | |
|  * published by the Free Software Foundation; either version 2 of the
 | |
|  * licence, 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_THREAD_H__
 | |
| #define __G_THREAD_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| /*
 | |
|  * Copyright © 2011 Ryan Lortie
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU Lesser General Public License as
 | |
|  * published by the Free Software Foundation; either version 2 of the
 | |
|  * licence, 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  * Author: Ryan Lortie <desrt@desrt.ca>
 | |
|  */
 | |
| 
 | |
| #ifndef __G_ATOMIC_H__
 | |
| #define __G_ATOMIC_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                    g_atomic_int_get                      (const volatile gint *atomic);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                    g_atomic_int_set                      (volatile gint  *atomic,
 | |
|                                                                gint            newval);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                    g_atomic_int_inc                      (volatile gint  *atomic);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                g_atomic_int_dec_and_test             (volatile gint  *atomic);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                g_atomic_int_compare_and_exchange     (volatile gint  *atomic,
 | |
|                                                                gint            oldval,
 | |
|                                                                gint            newval);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                    g_atomic_int_add                      (volatile gint  *atomic,
 | |
|                                                                gint            val);
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| guint                   g_atomic_int_and                      (volatile guint *atomic,
 | |
|                                                                guint           val);
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| guint                   g_atomic_int_or                       (volatile guint *atomic,
 | |
|                                                                guint           val);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint                   g_atomic_int_xor                      (volatile guint *atomic,
 | |
|                                                                guint           val);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer                g_atomic_pointer_get                  (const volatile void *atomic);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                    g_atomic_pointer_set                  (volatile void  *atomic,
 | |
|                                                                gpointer        newval);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                g_atomic_pointer_compare_and_exchange (volatile void  *atomic,
 | |
|                                                                gpointer        oldval,
 | |
|                                                                gpointer        newval);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gssize                  g_atomic_pointer_add                  (volatile void  *atomic,
 | |
|                                                                gssize          val);
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| gsize                   g_atomic_pointer_and                  (volatile void  *atomic,
 | |
|                                                                gsize           val);
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| gsize                   g_atomic_pointer_or                   (volatile void  *atomic,
 | |
|                                                                gsize           val);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize                   g_atomic_pointer_xor                  (volatile void  *atomic,
 | |
|                                                                gsize           val);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_30_FOR(g_atomic_int_add)
 | |
| gint                    g_atomic_int_exchange_and_add         (volatile gint  *atomic,
 | |
|                                                                gint            val);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #if defined(G_ATOMIC_LOCK_FREE) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
 | |
| 
 | |
| /* We prefer the new C11-style atomic extension of GCC if available */
 | |
| #if defined(__ATOMIC_SEQ_CST) && !defined(__clang__)
 | |
| 
 | |
| /* This assumes sizeof(int) is 4: gatomic.c statically
 | |
|  * asserts that (using G_STATIC_ASSERT at top-level in a header was
 | |
|  * problematic, see #730932) */
 | |
| 
 | |
| #define g_atomic_int_get(atomic) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
 | |
|     (void) (0 ? *(atomic) ^ *(atomic) : 0);                                  \
 | |
|     (gint) __atomic_load_4 ((atomic), __ATOMIC_SEQ_CST);                     \
 | |
|   }))
 | |
| #define g_atomic_int_set(atomic, newval) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
 | |
|     (void) (0 ? *(atomic) ^ (newval) : 0);                                   \
 | |
|     __atomic_store_4 ((atomic), (newval), __ATOMIC_SEQ_CST);                 \
 | |
|   }))
 | |
| 
 | |
| #if GLIB_SIZEOF_VOID_P == 8
 | |
| 
 | |
| #define g_atomic_pointer_get(atomic) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
 | |
|     (gpointer) __atomic_load_8 ((atomic), __ATOMIC_SEQ_CST);                 \
 | |
|   }))
 | |
| #define g_atomic_pointer_set(atomic, newval) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
 | |
|     (void) (0 ? (gpointer) *(atomic) : 0);                                   \
 | |
|     __atomic_store_8 ((atomic), (gsize) (newval), __ATOMIC_SEQ_CST);         \
 | |
|   }))
 | |
| 
 | |
| #else /* GLIB_SIZEOF_VOID_P == 8 */
 | |
| 
 | |
| /* This assumes that if sizeof(void *) is not 8, then it is 4:
 | |
|  * gatomic.c statically asserts that (using G_STATIC_ASSERT
 | |
|  * at top-level in a header was problematic, see #730932) */
 | |
| 
 | |
| #define g_atomic_pointer_get(atomic) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
 | |
|     (gpointer) __atomic_load_4 ((atomic), __ATOMIC_SEQ_CST);                 \
 | |
|   }))
 | |
| #define g_atomic_pointer_set(atomic, newval) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
 | |
|     (void) (0 ? (gpointer) *(atomic) : 0);                                   \
 | |
|     __atomic_store_4 ((atomic), (gsize) (newval), __ATOMIC_SEQ_CST);         \
 | |
|   }))
 | |
| 
 | |
| #endif /* GLIB_SIZEOF_VOID_P == 8 */
 | |
| 
 | |
| #else /* defined(__ATOMIC_SEQ_CST) */
 | |
| 
 | |
| #define g_atomic_int_get(atomic) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
 | |
|     (void) (0 ? *(atomic) ^ *(atomic) : 0);                                  \
 | |
|     __sync_synchronize ();                                                   \
 | |
|     (gint) *(atomic);                                                        \
 | |
|   }))
 | |
| #define g_atomic_int_set(atomic, newval) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
 | |
|     (void) (0 ? *(atomic) ^ (newval) : 0);                                   \
 | |
|     *(atomic) = (newval);                                                    \
 | |
|     __sync_synchronize ();                                                   \
 | |
|   }))
 | |
| #define g_atomic_pointer_get(atomic) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
 | |
|     __sync_synchronize ();                                                   \
 | |
|     (gpointer) *(atomic);                                                    \
 | |
|   }))
 | |
| #define g_atomic_pointer_set(atomic, newval) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
 | |
|     (void) (0 ? (gpointer) *(atomic) : 0);                                   \
 | |
|     *(atomic) = (__typeof__ (*(atomic))) (gsize) (newval);                   \
 | |
|     __sync_synchronize ();                                                   \
 | |
|   }))
 | |
| 
 | |
| #endif /* !defined(__ATOMIC_SEQ_CST) */
 | |
| 
 | |
| #define g_atomic_int_inc(atomic) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
 | |
|     (void) (0 ? *(atomic) ^ *(atomic) : 0);                                  \
 | |
|     (void) __sync_fetch_and_add ((atomic), 1);                               \
 | |
|   }))
 | |
| #define g_atomic_int_dec_and_test(atomic) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
 | |
|     (void) (0 ? *(atomic) ^ *(atomic) : 0);                                  \
 | |
|     __sync_fetch_and_sub ((atomic), 1) == 1;                                 \
 | |
|   }))
 | |
| #define g_atomic_int_compare_and_exchange(atomic, oldval, newval) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
 | |
|     (void) (0 ? *(atomic) ^ (newval) ^ (oldval) : 0);                        \
 | |
|     (gboolean) __sync_bool_compare_and_swap ((atomic), (oldval), (newval));  \
 | |
|   }))
 | |
| #define g_atomic_int_add(atomic, val) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
 | |
|     (void) (0 ? *(atomic) ^ (val) : 0);                                      \
 | |
|     (gint) __sync_fetch_and_add ((atomic), (val));                           \
 | |
|   }))
 | |
| #define g_atomic_int_and(atomic, val) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
 | |
|     (void) (0 ? *(atomic) ^ (val) : 0);                                      \
 | |
|     (guint) __sync_fetch_and_and ((atomic), (val));                          \
 | |
|   }))
 | |
| #define g_atomic_int_or(atomic, val) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
 | |
|     (void) (0 ? *(atomic) ^ (val) : 0);                                      \
 | |
|     (guint) __sync_fetch_and_or ((atomic), (val));                           \
 | |
|   }))
 | |
| #define g_atomic_int_xor(atomic, val) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
 | |
|     (void) (0 ? *(atomic) ^ (val) : 0);                                      \
 | |
|     (guint) __sync_fetch_and_xor ((atomic), (val));                          \
 | |
|   }))
 | |
| 
 | |
| #define g_atomic_pointer_compare_and_exchange(atomic, oldval, newval) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
 | |
|     (void) (0 ? (gpointer) *(atomic) : 0);                                   \
 | |
|     (gboolean) __sync_bool_compare_and_swap ((atomic), (oldval), (newval));  \
 | |
|   }))
 | |
| #define g_atomic_pointer_add(atomic, val) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
 | |
|     (void) (0 ? (gpointer) *(atomic) : 0);                                   \
 | |
|     (void) (0 ? (val) ^ (val) : 0);                                          \
 | |
|     (gssize) __sync_fetch_and_add ((atomic), (val));                         \
 | |
|   }))
 | |
| #define g_atomic_pointer_and(atomic, val) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
 | |
|     (void) (0 ? (gpointer) *(atomic) : 0);                                   \
 | |
|     (void) (0 ? (val) ^ (val) : 0);                                          \
 | |
|     (gsize) __sync_fetch_and_and ((atomic), (val));                          \
 | |
|   }))
 | |
| #define g_atomic_pointer_or(atomic, val) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
 | |
|     (void) (0 ? (gpointer) *(atomic) : 0);                                   \
 | |
|     (void) (0 ? (val) ^ (val) : 0);                                          \
 | |
|     (gsize) __sync_fetch_and_or ((atomic), (val));                           \
 | |
|   }))
 | |
| #define g_atomic_pointer_xor(atomic, val) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
 | |
|     (void) (0 ? (gpointer) *(atomic) : 0);                                   \
 | |
|     (void) (0 ? (val) ^ (val) : 0);                                          \
 | |
|     (gsize) __sync_fetch_and_xor ((atomic), (val));                          \
 | |
|   }))
 | |
| 
 | |
| #else /* defined(G_ATOMIC_LOCK_FREE) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) */
 | |
| 
 | |
| #define g_atomic_int_get(atomic) \
 | |
|   (g_atomic_int_get ((gint *) (atomic)))
 | |
| #define g_atomic_int_set(atomic, newval) \
 | |
|   (g_atomic_int_set ((gint *) (atomic), (gint) (newval)))
 | |
| #define g_atomic_int_compare_and_exchange(atomic, oldval, newval) \
 | |
|   (g_atomic_int_compare_and_exchange ((gint *) (atomic), (oldval), (newval)))
 | |
| #define g_atomic_int_add(atomic, val) \
 | |
|   (g_atomic_int_add ((gint *) (atomic), (val)))
 | |
| #define g_atomic_int_and(atomic, val) \
 | |
|   (g_atomic_int_and ((guint *) (atomic), (val)))
 | |
| #define g_atomic_int_or(atomic, val) \
 | |
|   (g_atomic_int_or ((guint *) (atomic), (val)))
 | |
| #define g_atomic_int_xor(atomic, val) \
 | |
|   (g_atomic_int_xor ((guint *) (atomic), (val)))
 | |
| #define g_atomic_int_inc(atomic) \
 | |
|   (g_atomic_int_inc ((gint *) (atomic)))
 | |
| #define g_atomic_int_dec_and_test(atomic) \
 | |
|   (g_atomic_int_dec_and_test ((gint *) (atomic)))
 | |
| 
 | |
| #define g_atomic_pointer_get(atomic) \
 | |
|   (g_atomic_pointer_get (atomic))
 | |
| #define g_atomic_pointer_set(atomic, newval) \
 | |
|   (g_atomic_pointer_set ((atomic), (gpointer) (newval)))
 | |
| #define g_atomic_pointer_compare_and_exchange(atomic, oldval, newval) \
 | |
|   (g_atomic_pointer_compare_and_exchange ((atomic), (gpointer) (oldval), (gpointer) (newval)))
 | |
| #define g_atomic_pointer_add(atomic, val) \
 | |
|   (g_atomic_pointer_add ((atomic), (gssize) (val)))
 | |
| #define g_atomic_pointer_and(atomic, val) \
 | |
|   (g_atomic_pointer_and ((atomic), (gsize) (val)))
 | |
| #define g_atomic_pointer_or(atomic, val) \
 | |
|   (g_atomic_pointer_or ((atomic), (gsize) (val)))
 | |
| #define g_atomic_pointer_xor(atomic, val) \
 | |
|   (g_atomic_pointer_xor ((atomic), (gsize) (val)))
 | |
| 
 | |
| #endif /* defined(__GNUC__) && defined(G_ATOMIC_OP_USE_GCC_BUILTINS) */
 | |
| 
 | |
| #endif /* __G_ATOMIC_H__ */
 | |
| /* gerror.h - Error reporting system
 | |
|  *
 | |
|  *  Copyright 2000 Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public License
 | |
|  * along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_ERROR_H__
 | |
| #define __G_ERROR_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| #include <stdarg.h>
 | |
| 
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_QUARK_H__
 | |
| #define __G_QUARK_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef guint32 GQuark;
 | |
| 
 | |
| /* Quarks (string<->id association)
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQuark                g_quark_try_string         (const gchar *string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQuark                g_quark_from_static_string (const gchar *string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQuark                g_quark_from_string        (const gchar *string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_quark_to_string          (GQuark       quark) G_GNUC_CONST;
 | |
| 
 | |
| #define G_DEFINE_QUARK(QN, q_n)                                         \
 | |
| GQuark                                                                  \
 | |
| q_n##_quark (void)                                                      \
 | |
| {                                                                       \
 | |
|   static GQuark q;                                                      \
 | |
|                                                                         \
 | |
|   if G_UNLIKELY (q == 0)                                                \
 | |
|     q = g_quark_from_static_string (#QN);                               \
 | |
|                                                                         \
 | |
|   return q;                                                             \
 | |
| }
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_intern_string            (const gchar *string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         lg_intern_static_string     (const gchar *string);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_QUARK_H__ */
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /**
 | |
|  * GError:
 | |
|  * @domain: error domain, e.g. #G_FILE_ERROR
 | |
|  * @code: error code, e.g. %G_FILE_ERROR_NOENT
 | |
|  * @message: human-readable informative error message
 | |
|  *
 | |
|  * The `GError` structure contains information about
 | |
|  * an error that has occurred.
 | |
|  */
 | |
| typedef struct _GError GError;
 | |
| 
 | |
| struct _GError
 | |
| {
 | |
|   GQuark       domain;
 | |
|   gint         code;
 | |
|   gchar       *message;
 | |
| };
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GError*  g_error_new           (GQuark         domain,
 | |
|                                 gint           code,
 | |
|                                 const gchar   *format,
 | |
|                                 ...) G_GNUC_PRINTF (3, 4);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GError*  g_error_new_literal   (GQuark         domain,
 | |
|                                 gint           code,
 | |
|                                 const gchar   *message);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GError*  g_error_new_valist    (GQuark         domain,
 | |
|                                 gint           code,
 | |
|                                 const gchar   *format,
 | |
|                                 va_list        args) G_GNUC_PRINTF(3, 0);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_error_free          (GError        *error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GError*  g_error_copy          (const GError  *error);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_error_matches       (const GError  *error,
 | |
|                                 GQuark         domain,
 | |
|                                 gint           code);
 | |
| 
 | |
| /* if (err) *err = g_error_new(domain, code, format, ...), also has
 | |
|  * some sanity checks.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_set_error           (GError       **err,
 | |
|                                 GQuark         domain,
 | |
|                                 gint           code,
 | |
|                                 const gchar   *format,
 | |
|                                 ...) G_GNUC_PRINTF (4, 5);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_set_error_literal   (GError       **err,
 | |
|                                 GQuark         domain,
 | |
|                                 gint           code,
 | |
|                                 const gchar   *message);
 | |
| 
 | |
| /* if (dest) *dest = src; also has some sanity checks.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_propagate_error     (GError       **dest,
 | |
| 				GError        *src);
 | |
| 
 | |
| /* if (err && *err) { g_error_free(*err); *err = NULL; } */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_clear_error         (GError       **err);
 | |
| 
 | |
| /* if (err) prefix the formatted string to the ->message */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_prefix_error               (GError       **err,
 | |
|                                        const gchar   *format,
 | |
|                                        ...) G_GNUC_PRINTF (2, 3);
 | |
| 
 | |
| /* g_propagate_error then g_error_prefix on dest */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_propagate_prefixed_error   (GError       **dest,
 | |
|                                        GError        *src,
 | |
|                                        const gchar   *format,
 | |
|                                        ...) G_GNUC_PRINTF (3, 4);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_ERROR_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_UTILS_H__
 | |
| #define __G_UTILS_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| #include <stdarg.h>
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* 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)	  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 */
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_get_user_name        (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_get_real_name        (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_get_home_dir         (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_get_tmp_dir          (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_get_host_name	     (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_get_prgname          (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_set_prgname          (const gchar *prgname);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_get_application_name (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_set_application_name (const gchar *application_name);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_reload_user_special_dirs_cache     (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_get_user_data_dir      (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_get_user_config_dir    (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_get_user_cache_dir     (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar * const * g_get_system_data_dirs   (void);
 | |
| 
 | |
| #ifdef G_OS_WIN32
 | |
| /* This functions is not part of the public GLib API */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar * const * g_win32_get_system_data_dirs_for_module (void (*address_of_function)(void));
 | |
| #endif
 | |
| 
 | |
| #if defined (G_OS_WIN32) && defined (G_CAN_INLINE) && !defined (__cplusplus)
 | |
| /* This function is not part of the public GLib API either. Just call
 | |
|  * g_get_system_data_dirs() in your code, never mind that that is
 | |
|  * actually a macro and you will in fact call this inline function.
 | |
|  */
 | |
| static inline const gchar * const *
 | |
| _g_win32_get_system_data_dirs (void)
 | |
| {
 | |
|   return g_win32_get_system_data_dirs_for_module ((void (*)(void)) &_g_win32_get_system_data_dirs);
 | |
| }
 | |
| #define g_get_system_data_dirs _g_win32_get_system_data_dirs
 | |
| #endif
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar * const * g_get_system_config_dirs (void);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar * g_get_user_runtime_dir (void);
 | |
| 
 | |
| /**
 | |
|  * GUserDirectory:
 | |
|  * @G_USER_DIRECTORY_DESKTOP: the user's Desktop directory
 | |
|  * @G_USER_DIRECTORY_DOCUMENTS: the user's Documents directory
 | |
|  * @G_USER_DIRECTORY_DOWNLOAD: the user's Downloads directory
 | |
|  * @G_USER_DIRECTORY_MUSIC: the user's Music directory
 | |
|  * @G_USER_DIRECTORY_PICTURES: the user's Pictures directory
 | |
|  * @G_USER_DIRECTORY_PUBLIC_SHARE: the user's shared directory
 | |
|  * @G_USER_DIRECTORY_TEMPLATES: the user's Templates directory
 | |
|  * @G_USER_DIRECTORY_VIDEOS: the user's Movies directory
 | |
|  * @G_USER_N_DIRECTORIES: the number of enum values
 | |
|  *
 | |
|  * These are logical ids for special directories which are defined
 | |
|  * depending on the platform used. You should use g_get_user_special_dir()
 | |
|  * to retrieve the full path associated to the logical id.
 | |
|  *
 | |
|  * The #GUserDirectory enumeration can be extended at later date. Not
 | |
|  * every platform has a directory for every logical id in this
 | |
|  * enumeration.
 | |
|  *
 | |
|  * Since: 2.14
 | |
|  */
 | |
| typedef enum {
 | |
|   G_USER_DIRECTORY_DESKTOP,
 | |
|   G_USER_DIRECTORY_DOCUMENTS,
 | |
|   G_USER_DIRECTORY_DOWNLOAD,
 | |
|   G_USER_DIRECTORY_MUSIC,
 | |
|   G_USER_DIRECTORY_PICTURES,
 | |
|   G_USER_DIRECTORY_PUBLIC_SHARE,
 | |
|   G_USER_DIRECTORY_TEMPLATES,
 | |
|   G_USER_DIRECTORY_VIDEOS,
 | |
| 
 | |
|   G_USER_N_DIRECTORIES
 | |
| } GUserDirectory;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar * g_get_user_special_dir (GUserDirectory directory);
 | |
| 
 | |
| /**
 | |
|  * GDebugKey:
 | |
|  * @key: the string
 | |
|  * @value: the flag
 | |
|  *
 | |
|  * Associates a string with a bit flag.
 | |
|  * Used in g_parse_debug_string().
 | |
|  */
 | |
| typedef struct _GDebugKey GDebugKey;
 | |
| struct _GDebugKey
 | |
| {
 | |
|   const gchar *key;
 | |
|   guint	       value;
 | |
| };
 | |
| 
 | |
| /* Miscellaneous utility functions
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint                 g_parse_debug_string (const gchar     *string,
 | |
| 					    const GDebugKey *keys,
 | |
| 					    guint            nkeys);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                  g_snprintf           (gchar       *string,
 | |
| 					    gulong       n,
 | |
| 					    gchar const *format,
 | |
| 					    ...) G_GNUC_PRINTF (3, 4);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                  g_vsnprintf          (gchar       *string,
 | |
| 					    gulong       n,
 | |
| 					    gchar const *format,
 | |
| 					    va_list      args)
 | |
| 					    G_GNUC_PRINTF(3, 0);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_nullify_pointer    (gpointer    *nullify_location);
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   G_FORMAT_SIZE_DEFAULT     = 0,
 | |
|   G_FORMAT_SIZE_LONG_FORMAT = 1 << 0,
 | |
|   G_FORMAT_SIZE_IEC_UNITS   = 1 << 1
 | |
| } GFormatSizeFlags;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| gchar *g_format_size_full   (guint64          size,
 | |
|                              GFormatSizeFlags flags);
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| gchar *g_format_size        (guint64          size);
 | |
| 
 | |
| GLIB_DEPRECATED_FOR(g_format_size)
 | |
| gchar *g_format_size_for_display (goffset size);
 | |
| 
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
| /**
 | |
|  * GVoidFunc:
 | |
|  *
 | |
|  * Declares a type of function which takes no arguments
 | |
|  * and has no return value. It is used to specify the type
 | |
|  * function passed to g_atexit().
 | |
|  */
 | |
| typedef void (*GVoidFunc) (void);
 | |
| #define ATEXIT(proc) g_ATEXIT(proc)
 | |
| GLIB_DEPRECATED
 | |
| void	g_atexit		(GVoidFunc    func);
 | |
| 
 | |
| #ifdef G_OS_WIN32
 | |
| /* It's a bad idea to wrap atexit() on Windows. If the GLib DLL calls
 | |
|  * atexit(), the function will be called when the GLib DLL is detached
 | |
|  * from the program, which is not what the caller wants. The caller
 | |
|  * wants the function to be called when it *itself* exits (or is
 | |
|  * detached, in case the caller, too, is a DLL).
 | |
|  */
 | |
| #if (defined(__MINGW_H) && !defined(_STDLIB_H_)) || (defined(_MSC_VER) && !defined(_INC_STDLIB))
 | |
| int atexit (void (*)(void));
 | |
| #endif
 | |
| #define g_atexit(func) atexit(func)
 | |
| #endif
 | |
| 
 | |
| #endif
 | |
| 
 | |
| 
 | |
| /* Look for an executable in PATH, following execvp() rules */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*  g_find_program_in_path  (const gchar *program);
 | |
| 
 | |
| /* Bit tests
 | |
|  *
 | |
|  * These are defined in a convoluted way because we want the compiler to
 | |
|  * be able to inline the code for performance reasons, but for
 | |
|  * historical reasons, we must continue to provide non-inline versions
 | |
|  * on our ABI.
 | |
|  *
 | |
|  * We define these as functions in gutils.c which are just implemented
 | |
|  * as calls to the _impl() versions in order to preserve the ABI.
 | |
|  */
 | |
| 
 | |
| #define g_bit_nth_lsf(mask, nth_bit) g_bit_nth_lsf_impl(mask, nth_bit)
 | |
| #define g_bit_nth_msf(mask, nth_bit) g_bit_nth_msf_impl(mask, nth_bit)
 | |
| #define g_bit_storage(number)        g_bit_storage_impl(number)
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint    (g_bit_nth_lsf)         (gulong mask,
 | |
|                                  gint   nth_bit);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint    (g_bit_nth_msf)         (gulong mask,
 | |
|                                  gint   nth_bit);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint   (g_bit_storage)         (gulong number);
 | |
| 
 | |
| static inline gint
 | |
| g_bit_nth_lsf_impl (gulong mask,
 | |
|                     gint   nth_bit)
 | |
| {
 | |
|   if (G_UNLIKELY (nth_bit < -1))
 | |
|     nth_bit = -1;
 | |
|   while (nth_bit < ((GLIB_SIZEOF_LONG * 8) - 1))
 | |
|     {
 | |
|       nth_bit++;
 | |
|       if (mask & (1UL << nth_bit))
 | |
|         return nth_bit;
 | |
|     }
 | |
|   return -1;
 | |
| }
 | |
| 
 | |
| static inline gint
 | |
| g_bit_nth_msf_impl (gulong mask,
 | |
|                     gint   nth_bit)
 | |
| {
 | |
|   if (nth_bit < 0 || G_UNLIKELY (nth_bit > GLIB_SIZEOF_LONG * 8))
 | |
|     nth_bit = GLIB_SIZEOF_LONG * 8;
 | |
|   while (nth_bit > 0)
 | |
|     {
 | |
|       nth_bit--;
 | |
|       if (mask & (1UL << nth_bit))
 | |
|         return nth_bit;
 | |
|     }
 | |
|   return -1;
 | |
| }
 | |
| 
 | |
| static inline guint
 | |
| g_bit_storage_impl (gulong number)
 | |
| {
 | |
| #if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__OPTIMIZE__)
 | |
|   return G_LIKELY (number) ?
 | |
|            ((GLIB_SIZEOF_LONG * 8U - 1) ^ (guint) __builtin_clzl(number)) + 1 : 1;
 | |
| #else
 | |
|   guint n_bits = 0;
 | |
| 
 | |
|   do
 | |
|     {
 | |
|       n_bits++;
 | |
|       number >>= 1;
 | |
|     }
 | |
|   while (number);
 | |
|   return n_bits;
 | |
| #endif
 | |
| }
 | |
| 
 | |
| /* Crashes the program. */
 | |
| #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_50
 | |
| #ifndef G_OS_WIN32
 | |
| #  define g_abort() abort ()
 | |
| #else
 | |
| GLIB_AVAILABLE_IN_2_50
 | |
| void g_abort (void) G_GNUC_NORETURN G_ANALYZER_NORETURN;
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
| 
 | |
| /*
 | |
|  * This macro is deprecated. This DllMain() is too complex. It is
 | |
|  * recommended to write an explicit minimal DLlMain() that just saves
 | |
|  * the handle to the DLL and then use that handle instead, for
 | |
|  * instance passing it to
 | |
|  * g_win32_get_package_installation_directory_of_module().
 | |
|  *
 | |
|  * On Windows, this macro defines a DllMain function that stores the
 | |
|  * actual DLL name that the code being compiled will be included in.
 | |
|  * STATIC should be empty or 'static'. DLL_NAME is the name of the
 | |
|  * (pointer to the) char array where the DLL name will be stored. If
 | |
|  * this is used, you must also include <windows.h>. If you need a more complex
 | |
|  * DLL entry point function, you cannot use this.
 | |
|  *
 | |
|  * On non-Windows platforms, expands to nothing.
 | |
|  */
 | |
| 
 | |
| #ifndef G_PLATFORM_WIN32
 | |
| # define G_WIN32_DLLMAIN_FOR_DLL_NAME(static, dll_name)
 | |
| #else
 | |
| # define G_WIN32_DLLMAIN_FOR_DLL_NAME(static, dll_name)			\
 | |
| static char *dll_name;							\
 | |
| 									\
 | |
| BOOL WINAPI								\
 | |
| DllMain (HINSTANCE hinstDLL,						\
 | |
| 	 DWORD     fdwReason,						\
 | |
| 	 LPVOID    lpvReserved)						\
 | |
| {									\
 | |
|   wchar_t wcbfr[1000];							\
 | |
|   char *tem;								\
 | |
|   switch (fdwReason)							\
 | |
|     {									\
 | |
|     case DLL_PROCESS_ATTACH:						\
 | |
|       GetModuleFileNameW ((HMODULE) hinstDLL, wcbfr, G_N_ELEMENTS (wcbfr)); \
 | |
|       tem = g_utf16_to_utf8 (wcbfr, -1, NULL, NULL, NULL);		\
 | |
|       dll_name = g_path_get_basename (tem);				\
 | |
|       g_free (tem);							\
 | |
|       break;								\
 | |
|     }									\
 | |
| 									\
 | |
|   return TRUE;								\
 | |
| }
 | |
| 
 | |
| #endif	/* !G_DISABLE_DEPRECATED */
 | |
| 
 | |
| #endif /* G_PLATFORM_WIN32 */
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_UTILS_H__ */
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| #define G_THREAD_ERROR g_thread_error_quark ()
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQuark g_thread_error_quark (void);
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   G_THREAD_ERROR_AGAIN /* Resource temporarily unavailable */
 | |
| } GThreadError;
 | |
| 
 | |
| typedef gpointer (*GThreadFunc) (gpointer data);
 | |
| 
 | |
| typedef struct _GThreadCallbacks GThreadCallbacks;
 | |
| typedef struct _GThread         GThread;
 | |
| 
 | |
| typedef union  _GMutex          GMutex;
 | |
| typedef struct _GRecMutex       GRecMutex;
 | |
| typedef struct _GRWLock         GRWLock;
 | |
| typedef struct _GCond           GCond;
 | |
| typedef struct _GPrivate        GPrivate;
 | |
| typedef struct _GOnce           GOnce;
 | |
| 
 | |
| struct _GThreadCallbacks
 | |
| {
 | |
|   void (*on_thread_init) (GThread *thread);
 | |
|   void (*on_thread_ready) (GThread *thread, GThreadFunc func, gpointer data,
 | |
|                            const gchar *name);
 | |
|   void (*on_private_destructor_enter) (GPrivate *key, GDestroyNotify notify,
 | |
|                                        gpointer value);
 | |
|   void (*on_private_destructor_leave) (GPrivate *key, GDestroyNotify notify,
 | |
|                                        gpointer value);
 | |
| };
 | |
| 
 | |
| union _GMutex
 | |
| {
 | |
|   /*< private >*/
 | |
|   gpointer p;
 | |
|   guint i[2];
 | |
| };
 | |
| 
 | |
| struct _GRWLock
 | |
| {
 | |
|   /*< private >*/
 | |
|   gpointer p;
 | |
|   guint i[2];
 | |
| };
 | |
| 
 | |
| struct _GCond
 | |
| {
 | |
|   /*< private >*/
 | |
|   gpointer p;
 | |
|   guint i[2];
 | |
| };
 | |
| 
 | |
| struct _GRecMutex
 | |
| {
 | |
|   /*< private >*/
 | |
|   gpointer p;
 | |
|   guint i[2];
 | |
| };
 | |
| 
 | |
| #define G_PRIVATE_INIT(notify) { NULL, (notify), { NULL, NULL } }
 | |
| struct _GPrivate
 | |
| {
 | |
|   /*< private >*/
 | |
|   gpointer       p;
 | |
|   GDestroyNotify notify;
 | |
|   gpointer future[2];
 | |
| };
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   G_ONCE_STATUS_NOTCALLED,
 | |
|   G_ONCE_STATUS_PROGRESS,
 | |
|   G_ONCE_STATUS_READY
 | |
| } GOnceStatus;
 | |
| 
 | |
| #define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
 | |
| struct _GOnce
 | |
| {
 | |
|   volatile GOnceStatus status;
 | |
|   volatile gpointer retval;
 | |
| };
 | |
| 
 | |
| #define G_LOCK_NAME(name)             g__ ## name ## _lock
 | |
| #define G_LOCK_DEFINE_STATIC(name)    static G_LOCK_DEFINE (name)
 | |
| #define G_LOCK_DEFINE(name)           GMutex G_LOCK_NAME (name)
 | |
| #define G_LOCK_EXTERN(name)           extern GMutex G_LOCK_NAME (name)
 | |
| 
 | |
| #ifdef G_DEBUG_LOCKS
 | |
| #  define G_LOCK(name)                G_STMT_START{             \
 | |
|       g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,                   \
 | |
|              "file %s: line %d (%s): locking: %s ",             \
 | |
|              __FILE__,        __LINE__, G_STRFUNC,              \
 | |
|              #name);                                            \
 | |
|       g_mutex_lock (&G_LOCK_NAME (name));                       \
 | |
|    }G_STMT_END
 | |
| #  define G_UNLOCK(name)              G_STMT_START{             \
 | |
|       g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,                   \
 | |
|              "file %s: line %d (%s): unlocking: %s ",           \
 | |
|              __FILE__,        __LINE__, G_STRFUNC,              \
 | |
|              #name);                                            \
 | |
|      g_mutex_unlock (&G_LOCK_NAME (name));                      \
 | |
|    }G_STMT_END
 | |
| #  define G_TRYLOCK(name)                                       \
 | |
|       (g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,                  \
 | |
|              "file %s: line %d (%s): try locking: %s ",         \
 | |
|              __FILE__,        __LINE__, G_STRFUNC,              \
 | |
|              #name), g_mutex_trylock (&G_LOCK_NAME (name)))
 | |
| #else  /* !G_DEBUG_LOCKS */
 | |
| #  define G_LOCK(name) g_mutex_lock       (&G_LOCK_NAME (name))
 | |
| #  define G_UNLOCK(name) g_mutex_unlock   (&G_LOCK_NAME (name))
 | |
| #  define G_TRYLOCK(name) g_mutex_trylock (&G_LOCK_NAME (name))
 | |
| #endif /* !G_DEBUG_LOCKS */
 | |
| 
 | |
| GLIB_VAR GThreadCallbacks *glib_thread_callbacks;
 | |
| GLIB_AVAILABLE_IN_2_52
 | |
| void            g_thread_set_callbacks          (GThreadCallbacks *callbacks);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| GThread *       g_thread_ref                    (GThread        *thread);
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| void            g_thread_unref                  (GThread        *thread);
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| GThread *       g_thread_new                    (const gchar    *name,
 | |
|                                                  GThreadFunc     func,
 | |
|                                                  gpointer        data);
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| GThread *       g_thread_try_new                (const gchar    *name,
 | |
|                                                  GThreadFunc     func,
 | |
|                                                  gpointer        data,
 | |
|                                                  GError        **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GThread *       g_thread_self                   (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_thread_exit                   (gpointer        retval);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer        g_thread_join                   (GThread        *thread);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_thread_yield                  (void);
 | |
| 
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| void            g_mutex_init                    (GMutex         *mutex);
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| void            g_mutex_clear                   (GMutex         *mutex);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_mutex_lock                    (GMutex         *mutex);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean        g_mutex_trylock                 (GMutex         *mutex);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_mutex_unlock                  (GMutex         *mutex);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| void            g_rw_lock_init                  (GRWLock        *rw_lock);
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| void            g_rw_lock_clear                 (GRWLock        *rw_lock);
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| void            g_rw_lock_writer_lock           (GRWLock        *rw_lock);
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| gboolean        g_rw_lock_writer_trylock        (GRWLock        *rw_lock);
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| void            g_rw_lock_writer_unlock         (GRWLock        *rw_lock);
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| void            g_rw_lock_reader_lock           (GRWLock        *rw_lock);
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| gboolean        g_rw_lock_reader_trylock        (GRWLock        *rw_lock);
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| void            g_rw_lock_reader_unlock         (GRWLock        *rw_lock);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| void            g_rec_mutex_init                (GRecMutex      *rec_mutex);
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| void            g_rec_mutex_clear               (GRecMutex      *rec_mutex);
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| void            g_rec_mutex_lock                (GRecMutex      *rec_mutex);
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| gboolean        g_rec_mutex_trylock             (GRecMutex      *rec_mutex);
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| void            g_rec_mutex_unlock              (GRecMutex      *rec_mutex);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| void            g_cond_init                     (GCond          *cond);
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| void            g_cond_clear                    (GCond          *cond);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_cond_wait                     (GCond          *cond,
 | |
|                                                  GMutex         *mutex);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_cond_signal                   (GCond          *cond);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_cond_broadcast                (GCond          *cond);
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| gboolean        g_cond_wait_until               (GCond          *cond,
 | |
|                                                  GMutex         *mutex,
 | |
|                                                  gint64          end_time);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer        g_private_get                   (GPrivate       *key);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_private_set                   (GPrivate       *key,
 | |
|                                                  gpointer        value);
 | |
| GLIB_AVAILABLE_IN_2_32
 | |
| void            g_private_replace               (GPrivate       *key,
 | |
|                                                  gpointer        value);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer        g_once_impl                     (GOnce          *once,
 | |
|                                                  GThreadFunc     func,
 | |
|                                                  gpointer        arg);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean        lg_once_init_enter               (volatile void  *location);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            lg_once_init_leave               (volatile void  *location,
 | |
|                                                  gsize           result);
 | |
| 
 | |
| #ifdef G_ATOMIC_OP_MEMORY_BARRIER_NEEDED
 | |
| # define g_once(once, func, arg) g_once_impl ((once), (func), (arg))
 | |
| #else /* !G_ATOMIC_OP_MEMORY_BARRIER_NEEDED*/
 | |
| # define g_once(once, func, arg) \
 | |
|   (((once)->status == G_ONCE_STATUS_READY) ? \
 | |
|    (once)->retval : \
 | |
|    g_once_impl ((once), (func), (arg)))
 | |
| #endif /* G_ATOMIC_OP_MEMORY_BARRIER_NEEDED */
 | |
| 
 | |
| #ifdef __GNUC__
 | |
| # define lg_once_init_enter(location) \
 | |
|   (lG_GNUC_EXTENSION ({                                               \
 | |
|     G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
 | |
|     (void) (0 ? (gpointer) *(location) : 0);                         \
 | |
|     (!g_atomic_pointer_get (location) &&                             \
 | |
|      lg_once_init_enter (location));                                  \
 | |
|   }))
 | |
| # define lg_once_init_leave(location, result) \
 | |
|   (lG_GNUC_EXTENSION ({                                               \
 | |
|     G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
 | |
|     (void) (0 ? *(location) = (result) : 0);                         \
 | |
|     lg_once_init_leave ((location), (gsize) (result));                \
 | |
|   }))
 | |
| #else
 | |
| # define lg_once_init_enter(location) \
 | |
|   (lg_once_init_enter((location)))
 | |
| # define lg_once_init_leave(location, result) \
 | |
|   (lg_once_init_leave((location), (gsize) (result)))
 | |
| #endif
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_36
 | |
| guint          g_get_num_processors (void);
 | |
| 
 | |
| /**
 | |
|  * GMutexLocker:
 | |
|  *
 | |
|  * Opaque type. See g_mutex_locker_new() for details.
 | |
|  * Since: 2.44
 | |
|  */
 | |
| typedef void GMutexLocker;
 | |
| 
 | |
| /**
 | |
|  * g_mutex_locker_new:
 | |
|  * @mutex: a mutex to lock
 | |
|  *
 | |
|  * Lock @mutex and return a new #GMutexLocker. Unlock with
 | |
|  * g_mutex_locker_free(). Using g_mutex_unlock() on @mutex
 | |
|  * while a #GMutexLocker exists can lead to undefined behaviour.
 | |
|  *
 | |
|  * This is intended to be used with g_autoptr().  Note that g_autoptr()
 | |
|  * is only available when using GCC or clang, so the following example
 | |
|  * will only work with those compilers:
 | |
|  * |[
 | |
|  * typedef struct
 | |
|  * {
 | |
|  *   ...
 | |
|  *   GMutex mutex;
 | |
|  *   ...
 | |
|  * } MyObject;
 | |
|  *
 | |
|  * static void
 | |
|  * my_object_do_stuff (MyObject *self)
 | |
|  * {
 | |
|  *   g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&self->mutex);
 | |
|  *
 | |
|  *   // Code with mutex locked here
 | |
|  *
 | |
|  *   if (cond)
 | |
|  *     // No need to unlock
 | |
|  *     return;
 | |
|  *
 | |
|  *   // Optionally early unlock
 | |
|  *   g_clear_pointer (&locker, g_mutex_locker_free);
 | |
|  *
 | |
|  *   // Code with mutex unlocked here
 | |
|  * }
 | |
|  * ]|
 | |
|  *
 | |
|  * Returns: a #GMutexLocker
 | |
|  * Since: 2.44
 | |
|  */
 | |
| static inline GMutexLocker *
 | |
| g_mutex_locker_new (GMutex *mutex)
 | |
| {
 | |
|   g_mutex_lock (mutex);
 | |
|   return (GMutexLocker *) mutex;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * g_mutex_locker_free:
 | |
|  * @locker: a GMutexLocker
 | |
|  *
 | |
|  * Unlock @locker's mutex. See g_mutex_locker_new() for details.
 | |
|  *
 | |
|  * Since: 2.44
 | |
|  */
 | |
| static inline void
 | |
| g_mutex_locker_free (GMutexLocker *locker)
 | |
| {
 | |
|   g_mutex_unlock ((GMutex *) locker);
 | |
| }
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_THREAD_H__ */
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GAsyncQueue GAsyncQueue;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GAsyncQueue *g_async_queue_new                  (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GAsyncQueue *g_async_queue_new_full             (GDestroyNotify item_free_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_async_queue_lock                 (GAsyncQueue      *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_async_queue_unlock               (GAsyncQueue      *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GAsyncQueue *g_async_queue_ref                  (GAsyncQueue      *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_async_queue_unref                (GAsyncQueue      *queue);
 | |
| 
 | |
| GLIB_DEPRECATED_FOR(g_async_queue_ref)
 | |
| void         g_async_queue_ref_unlocked         (GAsyncQueue      *queue);
 | |
| 
 | |
| GLIB_DEPRECATED_FOR(g_async_queue_unref)
 | |
| void         g_async_queue_unref_and_unlock     (GAsyncQueue      *queue);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_async_queue_push                 (GAsyncQueue      *queue,
 | |
|                                                  gpointer          data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_async_queue_push_unlocked        (GAsyncQueue      *queue,
 | |
|                                                  gpointer          data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_async_queue_push_sorted          (GAsyncQueue      *queue,
 | |
|                                                  gpointer          data,
 | |
|                                                  GCompareDataFunc  func,
 | |
|                                                  gpointer          user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_async_queue_push_sorted_unlocked (GAsyncQueue      *queue,
 | |
|                                                  gpointer          data,
 | |
|                                                  GCompareDataFunc  func,
 | |
|                                                  gpointer          user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer     g_async_queue_pop                  (GAsyncQueue      *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer     g_async_queue_pop_unlocked         (GAsyncQueue      *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer     g_async_queue_try_pop              (GAsyncQueue      *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer     g_async_queue_try_pop_unlocked     (GAsyncQueue      *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer     g_async_queue_timeout_pop          (GAsyncQueue      *queue,
 | |
|                                                  guint64           timeout);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer     g_async_queue_timeout_pop_unlocked (GAsyncQueue      *queue,
 | |
|                                                  guint64           timeout);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint         g_async_queue_length               (GAsyncQueue      *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint         g_async_queue_length_unlocked      (GAsyncQueue      *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_async_queue_sort                 (GAsyncQueue      *queue,
 | |
|                                                  GCompareDataFunc  func,
 | |
|                                                  gpointer          user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_async_queue_sort_unlocked        (GAsyncQueue      *queue,
 | |
|                                                  GCompareDataFunc  func,
 | |
|                                                  gpointer          user_data);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_46
 | |
| gboolean     g_async_queue_remove               (GAsyncQueue      *queue,
 | |
|                                                  gpointer          item);
 | |
| GLIB_AVAILABLE_IN_2_46
 | |
| gboolean     g_async_queue_remove_unlocked      (GAsyncQueue      *queue,
 | |
|                                                  gpointer          item);
 | |
| GLIB_AVAILABLE_IN_2_46
 | |
| void         g_async_queue_push_front           (GAsyncQueue      *queue,
 | |
|                                                  gpointer          item);
 | |
| GLIB_AVAILABLE_IN_2_46
 | |
| void         g_async_queue_push_front_unlocked  (GAsyncQueue      *queue,
 | |
|                                                  gpointer          item);
 | |
| 
 | |
| GLIB_DEPRECATED_FOR(g_async_queue_timeout_pop)
 | |
| gpointer     g_async_queue_timed_pop            (GAsyncQueue      *queue,
 | |
|                                                  GTimeVal         *end_time);
 | |
| GLIB_DEPRECATED_FOR(g_async_queue_timeout_pop_unlocked)
 | |
| gpointer     g_async_queue_timed_pop_unlocked   (GAsyncQueue      *queue,
 | |
|                                                  GTimeVal         *end_time);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_ASYNCQUEUE_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_BACKTRACE_H__
 | |
| #define __G_BACKTRACE_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| #include <signal.h>
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_on_error_query (const gchar *prg_name);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_on_error_stack_trace (const gchar *prg_name);
 | |
| 
 | |
| /**
 | |
|  * G_BREAKPOINT:
 | |
|  *
 | |
|  * Inserts a breakpoint instruction into the code.
 | |
|  *
 | |
|  * On x86 and alpha systems this is implemented as a soft interrupt
 | |
|  * and on other architectures it raises a `SIGTRAP` signal.
 | |
|  */
 | |
| #if (defined (__i386__) || defined (__x86_64__)) && defined (__GNUC__) && __GNUC__ >= 2
 | |
| #  define G_BREAKPOINT()        G_STMT_START{ __asm__ __volatile__ ("int $03"); }G_STMT_END
 | |
| #elif (defined (_MSC_VER) || defined (__DMC__)) && defined (_M_IX86)
 | |
| #  define G_BREAKPOINT()        G_STMT_START{ __asm int 3h }G_STMT_END
 | |
| #elif defined (_MSC_VER)
 | |
| #  define G_BREAKPOINT()        G_STMT_START{ __debugbreak(); }G_STMT_END
 | |
| #elif defined (__alpha__) && !defined(__osf__) && defined (__GNUC__) && __GNUC__ >= 2
 | |
| #  define G_BREAKPOINT()        G_STMT_START{ __asm__ __volatile__ ("bpt"); }G_STMT_END
 | |
| #elif defined (__APPLE__)
 | |
| #  define G_BREAKPOINT()        G_STMT_START{ __builtin_trap(); }G_STMT_END
 | |
| #else   /* !__i386__ && !__alpha__ */
 | |
| #  define G_BREAKPOINT()        G_STMT_START{ raise (SIGTRAP); }G_STMT_END
 | |
| #endif  /* __i386__ */
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_BACKTRACE_H__ */
 | |
| /* gbase64.h - Base64 coding functions
 | |
|  *
 | |
|  *  Copyright (C) 2005  Alexander Larsson <alexl@redhat.com>
 | |
|  *
 | |
|  * 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, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_BASE64_H__
 | |
| #define __G_BASE64_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize   g_base64_encode_step    (const guchar *in,
 | |
|                                  gsize         len,
 | |
|                                  gboolean      break_lines,
 | |
|                                  gchar        *out,
 | |
|                                  gint         *state,
 | |
|                                  gint         *save);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize   g_base64_encode_close   (gboolean      break_lines,
 | |
|                                  gchar        *out,
 | |
|                                  gint         *state,
 | |
|                                  gint         *save);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*  g_base64_encode         (const guchar *data,
 | |
|                                  gsize         len) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize   g_base64_decode_step    (const gchar  *in,
 | |
|                                  gsize         len,
 | |
|                                  guchar       *out,
 | |
|                                  gint         *state,
 | |
|                                  guint        *save);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guchar *g_base64_decode         (const gchar  *text,
 | |
|                                  gsize        *out_len) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guchar *g_base64_decode_inplace (gchar        *text,
 | |
|                                  gsize        *out_len);
 | |
| 
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_BASE64_H__ */
 | |
| /*
 | |
|  * Copyright © 2008 Ryan Lortie
 | |
|  * Copyright © 2010 Codethink Limited
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * License as published by the Free Software Foundation; either
 | |
|  * version 2 of the licence, 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  * Author: Ryan Lortie <desrt@desrt.ca>
 | |
|  */
 | |
| 
 | |
| #ifndef __G_BITLOCK_H__
 | |
| #define __G_BITLOCK_H__
 | |
| 
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_bit_lock                      (volatile gint *address,
 | |
|                                            gint           lock_bit);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean  g_bit_trylock                   (volatile gint *address,
 | |
|                                            gint           lock_bit);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_bit_unlock                    (volatile gint *address,
 | |
|                                            gint           lock_bit);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_pointer_bit_lock              (volatile void *address,
 | |
|                                            gint           lock_bit);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean  g_pointer_bit_trylock           (volatile void *address,
 | |
|                                            gint           lock_bit);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_pointer_bit_unlock            (volatile void *address,
 | |
|                                            gint           lock_bit);
 | |
| 
 | |
| #ifdef __GNUC__
 | |
| 
 | |
| #define g_pointer_bit_lock(address, lock_bit) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(address) == sizeof (gpointer));                \
 | |
|     g_pointer_bit_lock ((address), (lock_bit));                              \
 | |
|   }))
 | |
| 
 | |
| #define g_pointer_bit_trylock(address, lock_bit) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(address) == sizeof (gpointer));                \
 | |
|     g_pointer_bit_trylock ((address), (lock_bit));                           \
 | |
|   }))
 | |
| 
 | |
| #define g_pointer_bit_unlock(address, lock_bit) \
 | |
|   (lG_GNUC_EXTENSION ({                                                       \
 | |
|     G_STATIC_ASSERT (sizeof *(address) == sizeof (gpointer));                \
 | |
|     g_pointer_bit_unlock ((address), (lock_bit));                            \
 | |
|   }))
 | |
| 
 | |
| #endif
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_BITLOCK_H_ */
 | |
| /* gbookmarkfile.h: parsing and building desktop bookmarks
 | |
|  *
 | |
|  * Copyright (C) 2005-2006 Emmanuele Bassi
 | |
|  *
 | |
|  * 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, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_BOOKMARK_FILE_H__
 | |
| #define __G_BOOKMARK_FILE_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| #include <time.h>
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /**
 | |
|  * G_BOOKMARK_FILE_ERROR:
 | |
|  *
 | |
|  * Error domain for bookmark file parsing.
 | |
|  * Errors in this domain will be from the #GBookmarkFileError
 | |
|  * enumeration. See #GError for information on error domains.
 | |
|  */
 | |
| #define G_BOOKMARK_FILE_ERROR	(g_bookmark_file_error_quark ())
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * GBookmarkFileError:
 | |
|  * @G_BOOKMARK_FILE_ERROR_INVALID_URI: URI was ill-formed
 | |
|  * @G_BOOKMARK_FILE_ERROR_INVALID_VALUE: a requested field was not found
 | |
|  * @G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED: a requested application did
 | |
|  *     not register a bookmark
 | |
|  * @G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND: a requested URI was not found
 | |
|  * @G_BOOKMARK_FILE_ERROR_READ: document was ill formed
 | |
|  * @G_BOOKMARK_FILE_ERROR_UNKNOWN_ENCODING: the text being parsed was
 | |
|  *     in an unknown encoding
 | |
|  * @G_BOOKMARK_FILE_ERROR_WRITE: an error occurred while writing
 | |
|  * @G_BOOKMARK_FILE_ERROR_FILE_NOT_FOUND: requested file was not found
 | |
|  *
 | |
|  * Error codes returned by bookmark file parsing.
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_BOOKMARK_FILE_ERROR_INVALID_URI,
 | |
|   G_BOOKMARK_FILE_ERROR_INVALID_VALUE,
 | |
|   G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED,
 | |
|   G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND,
 | |
|   G_BOOKMARK_FILE_ERROR_READ,
 | |
|   G_BOOKMARK_FILE_ERROR_UNKNOWN_ENCODING,
 | |
|   G_BOOKMARK_FILE_ERROR_WRITE,
 | |
|   G_BOOKMARK_FILE_ERROR_FILE_NOT_FOUND
 | |
| } GBookmarkFileError;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQuark g_bookmark_file_error_quark (void);
 | |
| 
 | |
| /**
 | |
|  * GBookmarkFile:
 | |
|  *
 | |
|  * The `GBookmarkFile` structure contains only
 | |
|  * private data and should not be directly accessed.
 | |
|  */
 | |
| typedef struct _GBookmarkFile GBookmarkFile;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GBookmarkFile *g_bookmark_file_new                 (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_bookmark_file_free                (GBookmarkFile  *bookmark);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean       g_bookmark_file_load_from_file      (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *filename,
 | |
| 						    GError        **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean       g_bookmark_file_load_from_data      (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *data,
 | |
| 						    gsize           length,
 | |
| 						    GError        **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean       g_bookmark_file_load_from_data_dirs (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *file,
 | |
| 						    gchar         **full_path,
 | |
| 						    GError        **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *        g_bookmark_file_to_data             (GBookmarkFile  *bookmark,
 | |
| 						    gsize          *length,
 | |
| 						    GError        **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean       g_bookmark_file_to_file             (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *filename,
 | |
| 						    GError        **error);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_bookmark_file_set_title           (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    const gchar    *title);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *        g_bookmark_file_get_title           (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    GError        **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_bookmark_file_set_description     (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    const gchar    *description);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *        g_bookmark_file_get_description     (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    GError        **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_bookmark_file_set_mime_type       (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    const gchar    *mime_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *        g_bookmark_file_get_mime_type       (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    GError        **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_bookmark_file_set_groups          (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    const gchar   **groups,
 | |
| 						    gsize           length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_bookmark_file_add_group           (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    const gchar    *group);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean       g_bookmark_file_has_group           (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    const gchar    *group,
 | |
| 						    GError        **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar **       g_bookmark_file_get_groups          (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    gsize          *length,
 | |
| 						    GError        **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_bookmark_file_add_application     (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    const gchar    *name,
 | |
| 						    const gchar    *exec);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean       g_bookmark_file_has_application     (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    const gchar    *name,
 | |
| 						    GError        **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar **       g_bookmark_file_get_applications    (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    gsize          *length,
 | |
| 						    GError        **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean       g_bookmark_file_set_app_info        (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    const gchar    *name,
 | |
| 						    const gchar    *exec,
 | |
| 						    gint            count,
 | |
| 						    time_t          stamp,
 | |
| 						    GError        **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean       g_bookmark_file_get_app_info        (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    const gchar    *name,
 | |
| 						    gchar         **exec,
 | |
| 						    guint          *count,
 | |
| 						    time_t         *stamp,
 | |
| 						    GError        **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_bookmark_file_set_is_private      (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    gboolean        is_private);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean       g_bookmark_file_get_is_private      (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    GError        **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_bookmark_file_set_icon            (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    const gchar    *href,
 | |
| 						    const gchar    *mime_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean       g_bookmark_file_get_icon            (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    gchar         **href,
 | |
| 						    gchar         **mime_type,
 | |
| 						    GError        **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_bookmark_file_set_added           (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    time_t          added);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| time_t         g_bookmark_file_get_added           (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    GError        **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_bookmark_file_set_modified        (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    time_t          modified);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| time_t         g_bookmark_file_get_modified        (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    GError        **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_bookmark_file_set_visited         (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    time_t          visited);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| time_t         g_bookmark_file_get_visited         (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri, 
 | |
| 						    GError        **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean       g_bookmark_file_has_item            (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint           g_bookmark_file_get_size            (GBookmarkFile  *bookmark);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar **       g_bookmark_file_get_uris            (GBookmarkFile  *bookmark,
 | |
| 						    gsize          *length) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean       g_bookmark_file_remove_group        (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    const gchar    *group,
 | |
| 						    GError        **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean       g_bookmark_file_remove_application  (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    const gchar    *name,
 | |
| 						    GError        **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean       g_bookmark_file_remove_item         (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *uri,
 | |
| 						    GError        **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean       g_bookmark_file_move_item           (GBookmarkFile  *bookmark,
 | |
| 						    const gchar    *old_uri,
 | |
| 						    const gchar    *new_uri,
 | |
| 						    GError        **error);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_BOOKMARK_FILE_H__ */
 | |
| /*
 | |
|  * Copyright © 2009, 2010 Codethink Limited
 | |
|  * Copyright © 2011 Collabora Ltd.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * License as published by the Free Software Foundation; either
 | |
|  * version 2 of the licence, 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  * Author: Ryan Lortie <desrt@desrt.ca>
 | |
|  *         Stef Walter <stefw@collabora.co.uk>
 | |
|  */
 | |
| 
 | |
| #ifndef __G_BYTES_H__
 | |
| #define __G_BYTES_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GBytes *        g_bytes_new                     (gconstpointer   data,
 | |
|                                                  gsize           size);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GBytes *        g_bytes_new_take                (gpointer        data,
 | |
|                                                  gsize           size);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GBytes *        g_bytes_new_static              (gconstpointer   data,
 | |
|                                                  gsize           size);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GBytes *        g_bytes_new_with_free_func      (gconstpointer   data,
 | |
|                                                  gsize           size,
 | |
|                                                  GDestroyNotify  free_func,
 | |
|                                                  gpointer        user_data);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GBytes *        g_bytes_new_from_bytes          (GBytes         *bytes,
 | |
|                                                  gsize           offset,
 | |
|                                                  gsize           length);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gconstpointer   g_bytes_get_data                (GBytes         *bytes,
 | |
|                                                  gsize          *size);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize           g_bytes_get_size                (GBytes         *bytes);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GBytes *        g_bytes_ref                     (GBytes         *bytes);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_bytes_unref                   (GBytes         *bytes);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer        g_bytes_unref_to_data           (GBytes         *bytes,
 | |
|                                                  gsize          *size);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GByteArray *    g_bytes_unref_to_array          (GBytes         *bytes);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint           g_bytes_hash                    (gconstpointer   bytes);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean        g_bytes_equal                   (gconstpointer   bytes1,
 | |
|                                                  gconstpointer   bytes2);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint            g_bytes_compare                 (gconstpointer   bytes1,
 | |
|                                                  gconstpointer   bytes2);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_BYTES_H__ */
 | |
| /* gcharset.h - Charset functions
 | |
|  *
 | |
|  *  Copyright (C) 2011 Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public License
 | |
|  * along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_CHARSET_H__
 | |
| #define __G_CHARSET_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean              g_get_charset         (const char **charset);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *               g_get_codeset         (void);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar * const * g_get_language_names  (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar **              g_get_locale_variants (const gchar *locale);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif  /* __G_CHARSET_H__ */
 | |
| /* gchecksum.h - data hashing functions
 | |
|  *
 | |
|  * Copyright (C) 2007  Emmanuele Bassi  <ebassi@gnome.org>
 | |
|  *
 | |
|  * 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, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_CHECKSUM_H__
 | |
| #define __G_CHECKSUM_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /**
 | |
|  * GChecksumType:
 | |
|  * @G_CHECKSUM_MD5: Use the MD5 hashing algorithm
 | |
|  * @G_CHECKSUM_SHA1: Use the SHA-1 hashing algorithm
 | |
|  * @G_CHECKSUM_SHA256: Use the SHA-256 hashing algorithm
 | |
|  * @G_CHECKSUM_SHA384: Use the SHA-384 hashing algorithm (Since: 2.51)
 | |
|  * @G_CHECKSUM_SHA512: Use the SHA-512 hashing algorithm (Since: 2.36)
 | |
|  *
 | |
|  * The hashing algorithm to be used by #GChecksum when performing the
 | |
|  * digest of some data.
 | |
|  *
 | |
|  * Note that the #GChecksumType enumeration may be extended at a later
 | |
|  * date to include new hashing algorithm types.
 | |
|  *
 | |
|  * Since: 2.16
 | |
|  */
 | |
| typedef enum {
 | |
|   G_CHECKSUM_MD5,
 | |
|   G_CHECKSUM_SHA1,
 | |
|   G_CHECKSUM_SHA256,
 | |
|   G_CHECKSUM_SHA512,
 | |
|   G_CHECKSUM_SHA384
 | |
| } GChecksumType;
 | |
| 
 | |
| /**
 | |
|  * GChecksum:
 | |
|  *
 | |
|  * An opaque structure representing a checksumming operation.
 | |
|  * To create a new GChecksum, use g_checksum_new(). To free
 | |
|  * a GChecksum, use g_checksum_free().
 | |
|  *
 | |
|  * Since: 2.16
 | |
|  */
 | |
| typedef struct _GChecksum       GChecksum;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gssize                g_checksum_type_get_length    (GChecksumType    checksum_type);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GChecksum *           g_checksum_new                (GChecksumType    checksum_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_checksum_reset              (GChecksum       *checksum);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GChecksum *           g_checksum_copy               (const GChecksum *checksum);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_checksum_free               (GChecksum       *checksum);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_checksum_update             (GChecksum       *checksum,
 | |
|                                                      const guchar    *data,
 | |
|                                                      gssize           length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_checksum_get_string         (GChecksum       *checksum);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_checksum_get_digest         (GChecksum       *checksum,
 | |
|                                                      guint8          *buffer,
 | |
|                                                      gsize           *digest_len);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar                *g_compute_checksum_for_data   (GChecksumType    checksum_type,
 | |
|                                                      const guchar    *data,
 | |
|                                                      gsize            length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar                *g_compute_checksum_for_string (GChecksumType    checksum_type,
 | |
|                                                      const gchar     *str,
 | |
|                                                      gssize           length);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_34
 | |
| gchar                *g_compute_checksum_for_bytes  (GChecksumType    checksum_type,
 | |
|                                                      GBytes          *data);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_CHECKSUM_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_CONVERT_H__
 | |
| #define __G_CONVERT_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /**
 | |
|  * GConvertError:
 | |
|  * @G_CONVERT_ERROR_NO_CONVERSION: Conversion between the requested character
 | |
|  *     sets is not supported.
 | |
|  * @G_CONVERT_ERROR_ILLEGAL_SEQUENCE: Invalid byte sequence in conversion input.
 | |
|  * @G_CONVERT_ERROR_FAILED: Conversion failed for some reason.
 | |
|  * @G_CONVERT_ERROR_PARTIAL_INPUT: Partial character sequence at end of input.
 | |
|  * @G_CONVERT_ERROR_BAD_URI: URI is invalid.
 | |
|  * @G_CONVERT_ERROR_NOT_ABSOLUTE_PATH: Pathname is not an absolute path.
 | |
|  * @G_CONVERT_ERROR_NO_MEMORY: No memory available. Since: 2.40
 | |
|  *
 | |
|  * Error codes returned by character set conversion routines.
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_CONVERT_ERROR_NO_CONVERSION,
 | |
|   G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
 | |
|   G_CONVERT_ERROR_FAILED,
 | |
|   G_CONVERT_ERROR_PARTIAL_INPUT,
 | |
|   G_CONVERT_ERROR_BAD_URI,
 | |
|   G_CONVERT_ERROR_NOT_ABSOLUTE_PATH,
 | |
|   G_CONVERT_ERROR_NO_MEMORY
 | |
| } GConvertError;
 | |
| 
 | |
| /**
 | |
|  * G_CONVERT_ERROR:
 | |
|  *
 | |
|  * Error domain for character set conversions. Errors in this domain will
 | |
|  * be from the #GConvertError enumeration. See #GError for information on
 | |
|  * error domains.
 | |
|  */
 | |
| #define G_CONVERT_ERROR g_convert_error_quark()
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQuark g_convert_error_quark (void);
 | |
| 
 | |
| /**
 | |
|  * GIConv:
 | |
|  *
 | |
|  * The GIConv struct wraps an iconv() conversion descriptor. It contains
 | |
|  * private data and should only be accessed using the following functions.
 | |
|  */
 | |
| typedef struct _GIConv *GIConv;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIConv g_iconv_open   (const gchar  *to_codeset,
 | |
| 		       const gchar  *from_codeset);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize  g_iconv        (GIConv        converter,
 | |
| 		       gchar       **inbuf,
 | |
| 		       gsize        *inbytes_left,
 | |
| 		       gchar       **outbuf,
 | |
| 		       gsize        *outbytes_left);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint   g_iconv_close  (GIConv        converter);
 | |
| 
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar* g_convert               (const gchar  *str,
 | |
| 				gssize        len,            
 | |
| 				const gchar  *to_codeset,
 | |
| 				const gchar  *from_codeset,
 | |
| 				gsize        *bytes_read,     
 | |
| 				gsize        *bytes_written,  
 | |
| 				GError      **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar* g_convert_with_iconv    (const gchar  *str,
 | |
| 				gssize        len,
 | |
| 				GIConv        converter,
 | |
| 				gsize        *bytes_read,     
 | |
| 				gsize        *bytes_written,  
 | |
| 				GError      **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar* g_convert_with_fallback (const gchar  *str,
 | |
| 				gssize        len,            
 | |
| 				const gchar  *to_codeset,
 | |
| 				const gchar  *from_codeset,
 | |
| 				const gchar  *fallback,
 | |
| 				gsize        *bytes_read,     
 | |
| 				gsize        *bytes_written,  
 | |
| 				GError      **error) G_GNUC_MALLOC;
 | |
| 
 | |
| 
 | |
| /* Convert between libc's idea of strings and UTF-8.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar* g_locale_to_utf8   (const gchar  *opsysstring,
 | |
| 			   gssize        len,            
 | |
| 			   gsize        *bytes_read,     
 | |
| 			   gsize        *bytes_written,  
 | |
| 			   GError      **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar* g_locale_from_utf8 (const gchar  *utf8string,
 | |
| 			   gssize        len,            
 | |
| 			   gsize        *bytes_read,     
 | |
| 			   gsize        *bytes_written,  
 | |
| 			   GError      **error) G_GNUC_MALLOC;
 | |
| 
 | |
| /* Convert between the operating system (or C runtime)
 | |
|  * representation of file names and UTF-8.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar* g_filename_to_utf8   (const gchar  *opsysstring,
 | |
| 			     gssize        len,            
 | |
| 			     gsize        *bytes_read,     
 | |
| 			     gsize        *bytes_written,  
 | |
| 			     GError      **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar* g_filename_from_utf8 (const gchar  *utf8string,
 | |
| 			     gssize        len,            
 | |
| 			     gsize        *bytes_read,     
 | |
| 			     gsize        *bytes_written,  
 | |
| 			     GError      **error) G_GNUC_MALLOC;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *g_filename_from_uri (const gchar *uri,
 | |
| 			    gchar      **hostname,
 | |
| 			    GError     **error) G_GNUC_MALLOC;
 | |
|   
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *g_filename_to_uri   (const gchar *filename,
 | |
| 			    const gchar *hostname,
 | |
| 			    GError     **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *g_filename_display_name (const gchar *filename) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_get_filename_charsets (const gchar ***charsets);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *g_filename_display_basename (const gchar *filename) G_GNUC_MALLOC;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar **g_uri_list_extract_uris (const gchar *uri_list) G_GNUC_MALLOC;
 | |
| 
 | |
| #ifndef __GTK_DOC_IGNORE__
 | |
| #ifdef G_OS_WIN32
 | |
| #define g_filename_to_utf8   g_filename_to_utf8_utf8
 | |
| #define g_filename_from_utf8 g_filename_from_utf8_utf8
 | |
| #define g_filename_from_uri  g_filename_from_uri_utf8
 | |
| #define g_filename_to_uri    g_filename_to_uri_utf8
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar* g_filename_to_utf8_utf8   (const gchar  *opsysstring,
 | |
|                                   gssize        len,
 | |
|                                   gsize        *bytes_read,
 | |
|                                   gsize        *bytes_written,
 | |
|                                   GError      **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar* g_filename_from_utf8_utf8 (const gchar  *utf8string,
 | |
|                                   gssize        len,
 | |
|                                   gsize        *bytes_read,
 | |
|                                   gsize        *bytes_written,
 | |
|                                   GError      **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *g_filename_from_uri_utf8  (const gchar  *uri,
 | |
|                                   gchar       **hostname,
 | |
|                                   GError      **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *g_filename_to_uri_utf8    (const gchar  *filename,
 | |
|                                   const gchar  *hostname,
 | |
|                                   GError      **error) G_GNUC_MALLOC;
 | |
| #endif
 | |
| #endif /* __GTK_DOC_IGNORE__ */
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_CONVERT_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_DATASET_H__
 | |
| #define __G_DATASET_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GData           GData;
 | |
| 
 | |
| typedef void            (*GDataForeachFunc)     (GQuark         key_id,
 | |
|                                                  gpointer       data,
 | |
|                                                  gpointer       user_data);
 | |
| 
 | |
| /* Keyed Data List
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_datalist_init                (GData            **datalist);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_datalist_clear               (GData            **datalist);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_datalist_id_get_data         (GData            **datalist,
 | |
| 					 GQuark             key_id);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_datalist_id_set_data_full    (GData            **datalist,
 | |
| 					 GQuark             key_id,
 | |
| 					 gpointer           data,
 | |
| 					 GDestroyNotify     destroy_func);
 | |
| 
 | |
| typedef gpointer (*GDuplicateFunc) (gpointer data, gpointer user_data);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_34
 | |
| gpointer g_datalist_id_dup_data         (GData            **datalist,
 | |
|                                          GQuark             key_id,
 | |
|                                          GDuplicateFunc     dup_func,
 | |
| 					 gpointer           user_data);
 | |
| GLIB_AVAILABLE_IN_2_34
 | |
| gboolean g_datalist_id_replace_data     (GData            **datalist,
 | |
|                                          GQuark             key_id,
 | |
|                                          gpointer           oldval,
 | |
|                                          gpointer           newval,
 | |
|                                          GDestroyNotify     destroy,
 | |
| 					 GDestroyNotify    *old_destroy);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_datalist_id_remove_no_notify (GData            **datalist,
 | |
| 					 GQuark             key_id);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_datalist_foreach             (GData            **datalist,
 | |
| 					 GDataForeachFunc   func,
 | |
| 					 gpointer           user_data);
 | |
| 
 | |
| /**
 | |
|  * G_DATALIST_FLAGS_MASK:
 | |
|  *
 | |
|  * A bitmask that restricts the possible flags passed to
 | |
|  * g_datalist_set_flags(). Passing a flags value where
 | |
|  * flags & ~G_DATALIST_FLAGS_MASK != 0 is an error.
 | |
|  */
 | |
| #define G_DATALIST_FLAGS_MASK 0x3
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_datalist_set_flags           (GData            **datalist,
 | |
| 					 guint              flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_datalist_unset_flags         (GData            **datalist,
 | |
| 					 guint              flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_datalist_get_flags           (GData            **datalist);
 | |
| 
 | |
| #define   g_datalist_id_set_data(dl, q, d)      \
 | |
|      g_datalist_id_set_data_full ((dl), (q), (d), NULL)
 | |
| #define   g_datalist_id_remove_data(dl, q)      \
 | |
|      g_datalist_id_set_data ((dl), (q), NULL)
 | |
| #define   g_datalist_set_data_full(dl, k, d, f) \
 | |
|      g_datalist_id_set_data_full ((dl), g_quark_from_string (k), (d), (f))
 | |
| #define   g_datalist_remove_no_notify(dl, k)    \
 | |
|      g_datalist_id_remove_no_notify ((dl), g_quark_try_string (k))
 | |
| #define   g_datalist_set_data(dl, k, d)         \
 | |
|      g_datalist_set_data_full ((dl), (k), (d), NULL)
 | |
| #define   g_datalist_remove_data(dl, k)         \
 | |
|      g_datalist_id_set_data ((dl), g_quark_try_string (k), NULL)
 | |
| 
 | |
| /* Location Associated Keyed Data
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_dataset_destroy             (gconstpointer    dataset_location);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer  g_dataset_id_get_data         (gconstpointer    dataset_location,
 | |
|                                          GQuark           key_id);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer  g_datalist_get_data            (GData	 **datalist,
 | |
| 					  const gchar *key);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_dataset_id_set_data_full    (gconstpointer    dataset_location,
 | |
|                                          GQuark           key_id,
 | |
|                                          gpointer         data,
 | |
|                                          GDestroyNotify   destroy_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer  g_dataset_id_remove_no_notify (gconstpointer    dataset_location,
 | |
|                                          GQuark           key_id);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_dataset_foreach             (gconstpointer    dataset_location,
 | |
|                                          GDataForeachFunc func,
 | |
|                                          gpointer         user_data);
 | |
| #define   g_dataset_id_set_data(l, k, d)        \
 | |
|      g_dataset_id_set_data_full ((l), (k), (d), NULL)
 | |
| #define   g_dataset_id_remove_data(l, k)        \
 | |
|      g_dataset_id_set_data ((l), (k), NULL)
 | |
| #define   g_dataset_get_data(l, k)              \
 | |
|      (g_dataset_id_get_data ((l), g_quark_try_string (k)))
 | |
| #define   g_dataset_set_data_full(l, k, d, f)   \
 | |
|      g_dataset_id_set_data_full ((l), g_quark_from_string (k), (d), (f))
 | |
| #define   g_dataset_remove_no_notify(l, k)      \
 | |
|      g_dataset_id_remove_no_notify ((l), g_quark_try_string (k))
 | |
| #define   g_dataset_set_data(l, k, d)           \
 | |
|      g_dataset_set_data_full ((l), (k), (d), NULL)
 | |
| #define   g_dataset_remove_data(l, k)           \
 | |
|      g_dataset_id_set_data ((l), g_quark_try_string (k), NULL)
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_DATASET_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_DATE_H__
 | |
| #define __G_DATE_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| #include <time.h>
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* GDate
 | |
|  *
 | |
|  * Date calculations (not time for now, to be resolved). These are a
 | |
|  * mutant combination of Steffen Beyer's DateCalc routines
 | |
|  * (http://www.perl.com/CPAN/authors/id/STBEY/) and Jon Trowbridge's
 | |
|  * date routines (written for in-house software).  Written by Havoc
 | |
|  * Pennington <hp@pobox.com>
 | |
|  */
 | |
| 
 | |
| typedef gint32  GTime;
 | |
| typedef guint16 GDateYear;
 | |
| typedef guint8  GDateDay;   /* day of the month */
 | |
| typedef struct _GDate GDate;
 | |
| 
 | |
| /* enum used to specify order of appearance in parsed date strings */
 | |
| typedef enum
 | |
| {
 | |
|   G_DATE_DAY   = 0,
 | |
|   G_DATE_MONTH = 1,
 | |
|   G_DATE_YEAR  = 2
 | |
| } GDateDMY;
 | |
| 
 | |
| /* actual week and month values */
 | |
| typedef enum
 | |
| {
 | |
|   G_DATE_BAD_WEEKDAY  = 0,
 | |
|   G_DATE_MONDAY       = 1,
 | |
|   G_DATE_TUESDAY      = 2,
 | |
|   G_DATE_WEDNESDAY    = 3,
 | |
|   G_DATE_THURSDAY     = 4,
 | |
|   G_DATE_FRIDAY       = 5,
 | |
|   G_DATE_SATURDAY     = 6,
 | |
|   G_DATE_SUNDAY       = 7
 | |
| } GDateWeekday;
 | |
| typedef enum
 | |
| {
 | |
|   G_DATE_BAD_MONTH = 0,
 | |
|   G_DATE_JANUARY   = 1,
 | |
|   G_DATE_FEBRUARY  = 2,
 | |
|   G_DATE_MARCH     = 3,
 | |
|   G_DATE_APRIL     = 4,
 | |
|   G_DATE_MAY       = 5,
 | |
|   G_DATE_JUNE      = 6,
 | |
|   G_DATE_JULY      = 7,
 | |
|   G_DATE_AUGUST    = 8,
 | |
|   G_DATE_SEPTEMBER = 9,
 | |
|   G_DATE_OCTOBER   = 10,
 | |
|   G_DATE_NOVEMBER  = 11,
 | |
|   G_DATE_DECEMBER  = 12
 | |
| } GDateMonth;
 | |
| 
 | |
| #define G_DATE_BAD_JULIAN 0U
 | |
| #define G_DATE_BAD_DAY    0U
 | |
| #define G_DATE_BAD_YEAR   0U
 | |
| 
 | |
| /* Note: directly manipulating structs is generally a bad idea, but
 | |
|  * in this case it's an *incredibly* bad idea, because all or part
 | |
|  * of this struct can be invalid at any given time. Use the functions,
 | |
|  * or you will get hosed, I promise.
 | |
|  */
 | |
| struct _GDate
 | |
| {
 | |
|   guint julian_days : 32; /* julian days representation - we use a
 | |
|                            *  bitfield hoping that 64 bit platforms
 | |
|                            *  will pack this whole struct in one big
 | |
|                            *  int
 | |
|                            */
 | |
| 
 | |
|   guint julian : 1;    /* julian is valid */
 | |
|   guint dmy    : 1;    /* dmy is valid */
 | |
| 
 | |
|   /* DMY representation */
 | |
|   guint day    : 6;
 | |
|   guint month  : 4;
 | |
|   guint year   : 16;
 | |
| };
 | |
| 
 | |
| /* g_date_new() returns an invalid date, you then have to _set() stuff
 | |
|  * to get a usable object. You can also allocate a GDate statically,
 | |
|  * then call g_date_clear() to initialize.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDate*       g_date_new                   (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDate*       g_date_new_dmy               (GDateDay     day,
 | |
|                                            GDateMonth   month,
 | |
|                                            GDateYear    year);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDate*       g_date_new_julian            (guint32      julian_day);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_free                  (GDate       *date);
 | |
| 
 | |
| /* check g_date_valid() after doing an operation that might fail, like
 | |
|  * _parse.  Almost all g_date operations are undefined on invalid
 | |
|  * dates (the exceptions are the mutators, since you need those to
 | |
|  * return to validity).
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean     g_date_valid                 (const GDate *date);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean     g_date_valid_day             (GDateDay     day) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean     g_date_valid_month           (GDateMonth month) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean     g_date_valid_year            (GDateYear  year) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean     g_date_valid_weekday         (GDateWeekday weekday) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean     g_date_valid_julian          (guint32 julian_date) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean     g_date_valid_dmy             (GDateDay     day,
 | |
|                                            GDateMonth   month,
 | |
|                                            GDateYear    year) G_GNUC_CONST;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDateWeekday g_date_get_weekday           (const GDate *date);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDateMonth   g_date_get_month             (const GDate *date);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDateYear    g_date_get_year              (const GDate *date);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDateDay     g_date_get_day               (const GDate *date);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint32      g_date_get_julian            (const GDate *date);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint        g_date_get_day_of_year       (const GDate *date);
 | |
| /* First monday/sunday is the start of week 1; if we haven't reached
 | |
|  * that day, return 0. These are not ISO weeks of the year; that
 | |
|  * routine needs to be added.
 | |
|  * these functions return the number of weeks, starting on the
 | |
|  * corrsponding day
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint        g_date_get_monday_week_of_year (const GDate *date);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint        g_date_get_sunday_week_of_year (const GDate *date);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint        g_date_get_iso8601_week_of_year (const GDate *date);
 | |
| 
 | |
| /* If you create a static date struct you need to clear it to get it
 | |
|  * in a sane state before use. You can clear a whole array at
 | |
|  * once with the ndates argument.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_clear                 (GDate       *date,
 | |
|                                            guint        n_dates);
 | |
| 
 | |
| /* The parse routine is meant for dates typed in by a user, so it
 | |
|  * permits many formats but tries to catch common typos. If your data
 | |
|  * needs to be strictly validated, it is not an appropriate function.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_set_parse             (GDate       *date,
 | |
|                                            const gchar *str);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_set_time_t            (GDate       *date,
 | |
| 					   time_t       timet);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_set_time_val          (GDate       *date,
 | |
| 					   GTimeVal    *timeval);
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
| GLIB_DEPRECATED_FOR(g_date_set_time_t)
 | |
| void         g_date_set_time              (GDate       *date,
 | |
|                                            GTime        time_);
 | |
| #endif
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_set_month             (GDate       *date,
 | |
|                                            GDateMonth   month);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_set_day               (GDate       *date,
 | |
|                                            GDateDay     day);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_set_year              (GDate       *date,
 | |
|                                            GDateYear    year);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_set_dmy               (GDate       *date,
 | |
|                                            GDateDay     day,
 | |
|                                            GDateMonth   month,
 | |
|                                            GDateYear    y);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_set_julian            (GDate       *date,
 | |
|                                            guint32      julian_date);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean     g_date_is_first_of_month     (const GDate *date);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean     g_date_is_last_of_month      (const GDate *date);
 | |
| 
 | |
| /* To go forward by some number of weeks just go forward weeks*7 days */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_add_days              (GDate       *date,
 | |
|                                            guint        n_days);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_subtract_days         (GDate       *date,
 | |
|                                            guint        n_days);
 | |
| 
 | |
| /* If you add/sub months while day > 28, the day might change */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_add_months            (GDate       *date,
 | |
|                                            guint        n_months);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_subtract_months       (GDate       *date,
 | |
|                                            guint        n_months);
 | |
| 
 | |
| /* If it's feb 29, changing years can move you to the 28th */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_add_years             (GDate       *date,
 | |
|                                            guint        n_years);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_subtract_years        (GDate       *date,
 | |
|                                            guint        n_years);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean     g_date_is_leap_year          (GDateYear    year) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint8       g_date_get_days_in_month     (GDateMonth   month,
 | |
|                                            GDateYear    year) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint8       g_date_get_monday_weeks_in_year  (GDateYear    year) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint8       g_date_get_sunday_weeks_in_year  (GDateYear    year) G_GNUC_CONST;
 | |
| 
 | |
| /* Returns the number of days between the two dates.  If date2 comes
 | |
|    before date1, a negative value is return. */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint         g_date_days_between          (const GDate *date1,
 | |
| 					   const GDate *date2);
 | |
| 
 | |
| /* qsort-friendly (with a cast...) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint         g_date_compare               (const GDate *lhs,
 | |
|                                            const GDate *rhs);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_to_struct_tm          (const GDate *date,
 | |
|                                            struct tm   *tm);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_clamp                 (GDate *date,
 | |
| 					   const GDate *min_date,
 | |
| 					   const GDate *max_date);
 | |
| 
 | |
| /* Swap date1 and date2's values if date1 > date2. */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_date_order                 (GDate *date1, GDate *date2);
 | |
| 
 | |
| /* Just like strftime() except you can only use date-related formats.
 | |
|  *   Using a time format is undefined.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize        g_date_strftime              (gchar       *s,
 | |
|                                            gsize        slen,
 | |
|                                            const gchar *format,
 | |
|                                            const GDate *date);
 | |
| 
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
| 
 | |
| #define g_date_weekday 			g_date_get_weekday
 | |
| #define g_date_month 			g_date_get_month
 | |
| #define g_date_year 			g_date_get_year
 | |
| #define g_date_day 			g_date_get_day
 | |
| #define g_date_julian 			g_date_get_julian
 | |
| #define g_date_day_of_year 		g_date_get_day_of_year
 | |
| #define g_date_monday_week_of_year 	g_date_get_monday_week_of_year
 | |
| #define g_date_sunday_week_of_year 	g_date_get_sunday_week_of_year
 | |
| #define g_date_days_in_month 		g_date_get_days_in_month
 | |
| #define g_date_monday_weeks_in_year 	g_date_get_monday_weeks_in_year
 | |
| #define g_date_sunday_weeks_in_year	g_date_get_sunday_weeks_in_year
 | |
| 
 | |
| #endif /* G_DISABLE_DEPRECATED */
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_DATE_H__ */
 | |
| /*
 | |
|  * Copyright (C) 2009-2010 Christian Hergert <chris@dronelabs.com>
 | |
|  * Copyright © 2010 Codethink Limited
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU Lesser General Public License as
 | |
|  * published by the Free Software Foundation; either version 2.1 of the
 | |
|  * licence, or (at your option) any later version.
 | |
|  *
 | |
|  * This 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 Lesser General Public
 | |
|  * License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public License
 | |
|  * along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  * Authors: Christian Hergert <chris@dronelabs.com>
 | |
|  *          Thiago Santos <thiago.sousa.santos@collabora.co.uk>
 | |
|  *          Emmanuele Bassi <ebassi@linux.intel.com>
 | |
|  *          Ryan Lortie <desrt@desrt.ca>
 | |
|  */
 | |
| 
 | |
| #ifndef __G_DATE_TIME_H__
 | |
| #define __G_DATE_TIME_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| /*
 | |
|  * Copyright © 2010 Codethink Limited
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU Lesser General Public License as
 | |
|  * published by the Free Software Foundation; either version 2 of the
 | |
|  * licence, 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  * Author: Ryan Lortie <desrt@desrt.ca>
 | |
|  */
 | |
| 
 | |
| #ifndef __G_TIME_ZONE_H__
 | |
| #define __G_TIME_ZONE_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GTimeZone GTimeZone;
 | |
| 
 | |
| /**
 | |
|  * GTimeType:
 | |
|  * @G_TIME_TYPE_STANDARD: the time is in local standard time
 | |
|  * @G_TIME_TYPE_DAYLIGHT: the time is in local daylight time
 | |
|  * @G_TIME_TYPE_UNIVERSAL: the time is in UTC
 | |
|  *
 | |
|  * Disambiguates a given time in two ways.
 | |
|  *
 | |
|  * First, specifies if the given time is in universal or local time.
 | |
|  *
 | |
|  * Second, if the time is in local time, specifies if it is local
 | |
|  * standard time or local daylight time.  This is important for the case
 | |
|  * where the same local time occurs twice (during daylight savings time
 | |
|  * transitions, for example).
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_TIME_TYPE_STANDARD,
 | |
|   G_TIME_TYPE_DAYLIGHT,
 | |
|   G_TIME_TYPE_UNIVERSAL
 | |
| } GTimeType;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTimeZone *             g_time_zone_new                                 (const gchar *identifier);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTimeZone *             g_time_zone_new_utc                             (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTimeZone *             g_time_zone_new_local                           (void);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTimeZone *             g_time_zone_ref                                 (GTimeZone   *tz);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                    g_time_zone_unref                               (GTimeZone   *tz);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                    g_time_zone_find_interval                       (GTimeZone   *tz,
 | |
|                                                                          GTimeType    type,
 | |
|                                                                          gint64       time_);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                    g_time_zone_adjust_time                         (GTimeZone   *tz,
 | |
|                                                                          GTimeType    type,
 | |
|                                                                          gint64      *time_);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *           g_time_zone_get_abbreviation                    (GTimeZone   *tz,
 | |
|                                                                          gint         interval);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint32                  g_time_zone_get_offset                          (GTimeZone   *tz,
 | |
|                                                                          gint         interval);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                g_time_zone_is_dst                              (GTimeZone   *tz,
 | |
|                                                                          gint         interval);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_TIME_ZONE_H__ */
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /**
 | |
|  * G_TIME_SPAN_DAY:
 | |
|  *
 | |
|  * Evaluates to a time span of one day.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| #define G_TIME_SPAN_DAY                 (G_GINT64_CONSTANT (86400000000))
 | |
| 
 | |
| /**
 | |
|  * G_TIME_SPAN_HOUR:
 | |
|  *
 | |
|  * Evaluates to a time span of one hour.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| #define G_TIME_SPAN_HOUR                (G_GINT64_CONSTANT (3600000000))
 | |
| 
 | |
| /**
 | |
|  * G_TIME_SPAN_MINUTE:
 | |
|  *
 | |
|  * Evaluates to a time span of one minute.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| #define G_TIME_SPAN_MINUTE              (G_GINT64_CONSTANT (60000000))
 | |
| 
 | |
| /**
 | |
|  * G_TIME_SPAN_SECOND:
 | |
|  *
 | |
|  * Evaluates to a time span of one second.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| #define G_TIME_SPAN_SECOND              (G_GINT64_CONSTANT (1000000))
 | |
| 
 | |
| /**
 | |
|  * G_TIME_SPAN_MILLISECOND:
 | |
|  *
 | |
|  * Evaluates to a time span of one millisecond.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| #define G_TIME_SPAN_MILLISECOND         (G_GINT64_CONSTANT (1000))
 | |
| 
 | |
| /**
 | |
|  * GTimeSpan:
 | |
|  *
 | |
|  * A value representing an interval of time, in microseconds.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| typedef gint64 GTimeSpan;
 | |
| 
 | |
| /**
 | |
|  * GDateTime:
 | |
|  *
 | |
|  * `GDateTime` is an opaque structure whose members
 | |
|  * cannot be accessed directly.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| typedef struct _GDateTime GDateTime;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                    g_date_time_unref                               (GDateTime      *datetime);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDateTime *             g_date_time_ref                                 (GDateTime      *datetime);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDateTime *             g_date_time_new_now                             (GTimeZone      *tz);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDateTime *             g_date_time_new_now_local                       (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDateTime *             g_date_time_new_now_utc                         (void);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDateTime *             g_date_time_new_from_unix_local                 (gint64          t);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDateTime *             g_date_time_new_from_unix_utc                   (gint64          t);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDateTime *             g_date_time_new_from_timeval_local              (const GTimeVal *tv);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDateTime *             g_date_time_new_from_timeval_utc                (const GTimeVal *tv);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDateTime *             g_date_time_new                                 (GTimeZone      *tz,
 | |
|                                                                          gint            year,
 | |
|                                                                          gint            month,
 | |
|                                                                          gint            day,
 | |
|                                                                          gint            hour,
 | |
|                                                                          gint            minute,
 | |
|                                                                          gdouble         seconds);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDateTime *             g_date_time_new_local                           (gint            year,
 | |
|                                                                          gint            month,
 | |
|                                                                          gint            day,
 | |
|                                                                          gint            hour,
 | |
|                                                                          gint            minute,
 | |
|                                                                          gdouble         seconds);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDateTime *             g_date_time_new_utc                             (gint            year,
 | |
|                                                                          gint            month,
 | |
|                                                                          gint            day,
 | |
|                                                                          gint            hour,
 | |
|                                                                          gint            minute,
 | |
|                                                                          gdouble         seconds);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| G_GNUC_WARN_UNUSED_RESULT
 | |
| GDateTime *             g_date_time_add                                 (GDateTime      *datetime,
 | |
|                                                                          GTimeSpan       timespan);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| G_GNUC_WARN_UNUSED_RESULT
 | |
| GDateTime *             g_date_time_add_years                           (GDateTime      *datetime,
 | |
|                                                                          gint            years);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| G_GNUC_WARN_UNUSED_RESULT
 | |
| GDateTime *             g_date_time_add_months                          (GDateTime      *datetime,
 | |
|                                                                          gint            months);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| G_GNUC_WARN_UNUSED_RESULT
 | |
| GDateTime *             g_date_time_add_weeks                           (GDateTime      *datetime,
 | |
|                                                                          gint            weeks);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| G_GNUC_WARN_UNUSED_RESULT
 | |
| GDateTime *             g_date_time_add_days                            (GDateTime      *datetime,
 | |
|                                                                          gint            days);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| G_GNUC_WARN_UNUSED_RESULT
 | |
| GDateTime *             g_date_time_add_hours                           (GDateTime      *datetime,
 | |
|                                                                          gint            hours);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| G_GNUC_WARN_UNUSED_RESULT
 | |
| GDateTime *             g_date_time_add_minutes                         (GDateTime      *datetime,
 | |
|                                                                          gint            minutes);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| G_GNUC_WARN_UNUSED_RESULT
 | |
| GDateTime *             g_date_time_add_seconds                         (GDateTime      *datetime,
 | |
|                                                                          gdouble         seconds);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| G_GNUC_WARN_UNUSED_RESULT
 | |
| GDateTime *             g_date_time_add_full                            (GDateTime      *datetime,
 | |
|                                                                          gint            years,
 | |
|                                                                          gint            months,
 | |
|                                                                          gint            days,
 | |
|                                                                          gint            hours,
 | |
|                                                                          gint            minutes,
 | |
|                                                                          gdouble         seconds);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                    g_date_time_compare                             (gconstpointer   dt1,
 | |
|                                                                          gconstpointer   dt2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTimeSpan               g_date_time_difference                          (GDateTime      *end,
 | |
|                                                                          GDateTime      *begin);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint                   g_date_time_hash                                (gconstpointer   datetime);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                g_date_time_equal                               (gconstpointer   dt1,
 | |
|                                                                          gconstpointer   dt2);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                    g_date_time_get_ymd                             (GDateTime      *datetime,
 | |
|                                                                          gint           *year,
 | |
|                                                                          gint           *month,
 | |
|                                                                          gint           *day);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                    g_date_time_get_year                            (GDateTime      *datetime);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                    g_date_time_get_month                           (GDateTime      *datetime);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                    g_date_time_get_day_of_month                    (GDateTime      *datetime);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                    g_date_time_get_week_numbering_year             (GDateTime      *datetime);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                    g_date_time_get_week_of_year                    (GDateTime      *datetime);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                    g_date_time_get_day_of_week                     (GDateTime      *datetime);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                    g_date_time_get_day_of_year                     (GDateTime      *datetime);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                    g_date_time_get_hour                            (GDateTime      *datetime);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                    g_date_time_get_minute                          (GDateTime      *datetime);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                    g_date_time_get_second                          (GDateTime      *datetime);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                    g_date_time_get_microsecond                     (GDateTime      *datetime);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gdouble                 g_date_time_get_seconds                         (GDateTime      *datetime);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint64                  g_date_time_to_unix                             (GDateTime      *datetime);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                g_date_time_to_timeval                          (GDateTime      *datetime,
 | |
|                                                                          GTimeVal       *tv);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTimeSpan               g_date_time_get_utc_offset                      (GDateTime      *datetime);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *           g_date_time_get_timezone_abbreviation           (GDateTime      *datetime);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                g_date_time_is_daylight_savings                 (GDateTime      *datetime);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDateTime *             g_date_time_to_timezone                         (GDateTime      *datetime,
 | |
|                                                                          GTimeZone      *tz);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDateTime *             g_date_time_to_local                            (GDateTime      *datetime);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDateTime *             g_date_time_to_utc                              (GDateTime      *datetime);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *                 g_date_time_format                              (GDateTime      *datetime,
 | |
|                                                                          const gchar    *format) G_GNUC_MALLOC;
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_DATE_TIME_H__ */
 | |
| /* GLIB - Library of useful routines for C programming
 | |
|  * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
 | |
|  *
 | |
|  * gdir.c: Simplified wrapper around the DIRENT functions.
 | |
|  *
 | |
|  * Copyright 2001 Hans Breuer
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_DIR_H__
 | |
| #define __G_DIR_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| #ifdef G_OS_UNIX
 | |
| #include <dirent.h>
 | |
| #endif
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GDir GDir;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDir    *                g_dir_open           (const gchar  *path,
 | |
| 					       guint         flags,
 | |
| 					       GError      **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *            g_dir_read_name      (GDir         *dir);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                     g_dir_rewind         (GDir         *dir);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                     g_dir_close          (GDir         *dir);
 | |
| 
 | |
| #ifndef __GTK_DOC_IGNORE__
 | |
| #ifdef G_OS_WIN32
 | |
| #define g_dir_open      g_dir_open_utf8
 | |
| #define g_dir_read_name g_dir_read_name_utf8
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GDir        *g_dir_open_utf8      (const gchar  *path,
 | |
|                                    guint         flags,
 | |
|                                    GError      **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *g_dir_read_name_utf8 (GDir         *dir);
 | |
| #endif /* G_OS_WIN32 */
 | |
| #endif /* __GTK_DOC_IGNORE__ */
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_DIR_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_ENVIRON_H__
 | |
| #define __G_ENVIRON_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar * g_getenv           (const gchar  *variable);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean      g_setenv           (const gchar  *variable,
 | |
|                                   const gchar  *value,
 | |
|                                   gboolean      overwrite);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void          g_unsetenv         (const gchar  *variable);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar **      g_listenv          (void);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar **      g_get_environ      (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar * g_environ_getenv   (gchar       **envp,
 | |
|                                   const gchar  *variable);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar **      g_environ_setenv   (gchar       **envp,
 | |
|                                   const gchar  *variable,
 | |
|                                   const gchar  *value,
 | |
|                                   gboolean      overwrite) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar **      g_environ_unsetenv (gchar       **envp,
 | |
|                                   const gchar  *variable) G_GNUC_WARN_UNUSED_RESULT;
 | |
| 
 | |
| #ifndef __GTK_DOC_IGNORE__
 | |
| #ifdef G_OS_WIN32
 | |
| #define g_getenv   g_getenv_utf8
 | |
| #define g_setenv   g_setenv_utf8
 | |
| #define g_unsetenv g_unsetenv_utf8
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *g_getenv_utf8   (const gchar  *variable);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean     g_setenv_utf8   (const gchar  *variable,
 | |
|                               const gchar  *value,
 | |
|                               gboolean      overwrite);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_unsetenv_utf8 (const gchar  *variable);
 | |
| #endif
 | |
| #endif /* __GTK_DOC_IGNORE__ */
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_ENVIRON_H__ */
 | |
| /* gfileutils.h - File utility functions
 | |
|  *
 | |
|  *  Copyright 2000 Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public License
 | |
|  * along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_FILEUTILS_H__
 | |
| #define __G_FILEUTILS_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| #define G_FILE_ERROR g_file_error_quark ()
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   G_FILE_ERROR_EXIST,
 | |
|   G_FILE_ERROR_ISDIR,
 | |
|   G_FILE_ERROR_ACCES,
 | |
|   G_FILE_ERROR_NAMETOOLONG,
 | |
|   G_FILE_ERROR_NOENT,
 | |
|   G_FILE_ERROR_NOTDIR,
 | |
|   G_FILE_ERROR_NXIO,
 | |
|   G_FILE_ERROR_NODEV,
 | |
|   G_FILE_ERROR_ROFS,
 | |
|   G_FILE_ERROR_TXTBSY,
 | |
|   G_FILE_ERROR_FAULT,
 | |
|   G_FILE_ERROR_LOOP,
 | |
|   G_FILE_ERROR_NOSPC,
 | |
|   G_FILE_ERROR_NOMEM,
 | |
|   G_FILE_ERROR_MFILE,
 | |
|   G_FILE_ERROR_NFILE,
 | |
|   G_FILE_ERROR_BADF,
 | |
|   G_FILE_ERROR_INVAL,
 | |
|   G_FILE_ERROR_PIPE,
 | |
|   G_FILE_ERROR_AGAIN,
 | |
|   G_FILE_ERROR_INTR,
 | |
|   G_FILE_ERROR_IO,
 | |
|   G_FILE_ERROR_PERM,
 | |
|   G_FILE_ERROR_NOSYS,
 | |
|   G_FILE_ERROR_FAILED
 | |
| } GFileError;
 | |
| 
 | |
| /* For backward-compat reasons, these are synced to an old
 | |
|  * anonymous enum in libgnome. But don't use that enum
 | |
|  * in new code.
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_FILE_TEST_IS_REGULAR    = 1 << 0,
 | |
|   G_FILE_TEST_IS_SYMLINK    = 1 << 1,
 | |
|   G_FILE_TEST_IS_DIR        = 1 << 2,
 | |
|   G_FILE_TEST_IS_EXECUTABLE = 1 << 3,
 | |
|   G_FILE_TEST_EXISTS        = 1 << 4
 | |
| } GFileTest;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQuark     g_file_error_quark      (void);
 | |
| /* So other code can generate a GFileError */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GFileError g_file_error_from_errno (gint err_no);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_file_test         (const gchar  *filename,
 | |
|                               GFileTest     test);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_file_get_contents (const gchar  *filename,
 | |
|                               gchar       **contents,
 | |
|                               gsize        *length,
 | |
|                               GError      **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_file_set_contents (const gchar *filename,
 | |
|                               const gchar *contents,
 | |
|                               gssize         length,
 | |
|                               GError       **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar   *g_file_read_link    (const gchar  *filename,
 | |
|                               GError      **error);
 | |
| 
 | |
| /* Wrapper / workalike for mkdtemp() */
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| gchar   *g_mkdtemp            (gchar        *tmpl);
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| gchar   *g_mkdtemp_full       (gchar        *tmpl,
 | |
|                                gint          mode);
 | |
| 
 | |
| /* Wrapper / workalike for mkstemp() */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint     g_mkstemp            (gchar        *tmpl);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint     g_mkstemp_full       (gchar        *tmpl,
 | |
|                                gint          flags,
 | |
|                                gint          mode);
 | |
| 
 | |
| /* Wrappers for g_mkstemp and g_mkdtemp() */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint     g_file_open_tmp      (const gchar  *tmpl,
 | |
|                                gchar       **name_used,
 | |
|                                GError      **error);
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| gchar   *g_dir_make_tmp       (const gchar  *tmpl,
 | |
|                                GError      **error);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar   *g_build_path         (const gchar *separator,
 | |
|                                const gchar *first_element,
 | |
|                                ...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar   *g_build_pathv        (const gchar  *separator,
 | |
|                                gchar       **args) G_GNUC_MALLOC;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar   *g_build_filename     (const gchar *first_element,
 | |
|                                ...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar   *g_build_filenamev    (gchar      **args) G_GNUC_MALLOC;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint     g_mkdir_with_parents (const gchar *pathname,
 | |
|                                gint         mode);
 | |
| 
 | |
| #ifdef G_OS_WIN32
 | |
| 
 | |
| /* On Win32, the canonical directory separator is the backslash, and
 | |
|  * the search path separator is the semicolon. Note that also the
 | |
|  * (forward) slash works as directory separator.
 | |
|  */
 | |
| #define G_DIR_SEPARATOR '\\'
 | |
| #define G_DIR_SEPARATOR_S "\\"
 | |
| #define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR || (c) == '/')
 | |
| #define G_SEARCHPATH_SEPARATOR ';'
 | |
| #define G_SEARCHPATH_SEPARATOR_S ";"
 | |
| 
 | |
| #else  /* !G_OS_WIN32 */
 | |
| 
 | |
| #define G_DIR_SEPARATOR '/'
 | |
| #define G_DIR_SEPARATOR_S "/"
 | |
| #define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR)
 | |
| #define G_SEARCHPATH_SEPARATOR ':'
 | |
| #define G_SEARCHPATH_SEPARATOR_S ":"
 | |
| 
 | |
| #endif /* !G_OS_WIN32 */
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean     g_path_is_absolute (const gchar *file_name);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *g_path_skip_root   (const gchar *file_name);
 | |
| 
 | |
| GLIB_DEPRECATED_FOR(g_path_get_basename)
 | |
| const gchar *g_basename         (const gchar *file_name);
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
| #define g_dirname g_path_get_dirname
 | |
| #endif
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *g_get_current_dir   (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *g_path_get_basename (const gchar *file_name) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *g_path_get_dirname  (const gchar *file_name) G_GNUC_MALLOC;
 | |
| 
 | |
| #ifndef __GTK_DOC_IGNORE__
 | |
| #ifdef G_OS_WIN32
 | |
| #define g_file_test         g_file_test_utf8
 | |
| #define g_file_get_contents g_file_get_contents_utf8
 | |
| #define g_mkstemp           g_mkstemp_utf8
 | |
| #define g_file_open_tmp     g_file_open_tmp_utf8
 | |
| #define g_get_current_dir   g_get_current_dir_utf8
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_file_test_utf8         (const gchar  *filename,
 | |
|                                    GFileTest     test);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_file_get_contents_utf8 (const gchar  *filename,
 | |
|                                    gchar       **contents,
 | |
|                                    gsize        *length,
 | |
|                                    GError      **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint     g_mkstemp_utf8           (gchar        *tmpl);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint     g_file_open_tmp_utf8     (const gchar  *tmpl,
 | |
|                                    gchar       **name_used,
 | |
|                                    GError      **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar   *g_get_current_dir_utf8   (void);
 | |
| #endif /* G_OS_WIN32 */
 | |
| #endif /* __GTK_DOC_IGNORE__ */
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_FILEUTILS_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_GETTEXT_H__
 | |
| #define __G_GETTEXT_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *g_strip_context (const gchar *msgid,
 | |
|                               const gchar *msgval) G_GNUC_FORMAT(1);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *g_dgettext      (const gchar *domain,
 | |
|                               const gchar *msgid) G_GNUC_FORMAT(2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *g_dcgettext     (const gchar *domain,
 | |
|                               const gchar *msgid,
 | |
|                               gint         category) G_GNUC_FORMAT(2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *g_dngettext     (const gchar *domain,
 | |
|                               const gchar *msgid,
 | |
|                               const gchar *msgid_plural,
 | |
|                               gulong       n) G_GNUC_FORMAT(3);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *g_dpgettext     (const gchar *domain,
 | |
|                               const gchar *msgctxtid,
 | |
|                               gsize        msgidoffset) G_GNUC_FORMAT(2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *g_dpgettext2    (const gchar *domain,
 | |
|                               const gchar *context,
 | |
|                               const gchar *msgid) G_GNUC_FORMAT(3);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_GETTEXT_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_HASH_H__
 | |
| #define __G_HASH_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_LIST_H__
 | |
| #define __G_LIST_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_MEM_H__
 | |
| #define __G_MEM_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /**
 | |
|  * GMemVTable:
 | |
|  * @malloc: function to use for allocating memory.
 | |
|  * @realloc: function to use for reallocating memory.
 | |
|  * @free: function to use to free memory.
 | |
|  * @calloc: function to use for allocating zero-filled memory.
 | |
|  * @try_malloc: function to use for allocating memory without a default error handler.
 | |
|  * @try_realloc: function to use for reallocating memory without a default error handler.
 | |
|  * 
 | |
|  * A set of functions used to perform memory allocation. The same #GMemVTable must
 | |
|  * be used for all allocations in the same program; a call to g_mem_set_vtable(),
 | |
|  * if it exists, should be prior to any use of GLib.
 | |
|  */
 | |
| typedef struct _GMemVTable GMemVTable;
 | |
| 
 | |
| 
 | |
| #if GLIB_SIZEOF_VOID_P > GLIB_SIZEOF_LONG
 | |
| /**
 | |
|  * G_MEM_ALIGN:
 | |
|  *
 | |
|  * Indicates the number of bytes to which memory will be aligned on the
 | |
|  * current platform.
 | |
|  */
 | |
| #  define G_MEM_ALIGN	GLIB_SIZEOF_VOID_P
 | |
| #else	/* GLIB_SIZEOF_VOID_P <= GLIB_SIZEOF_LONG */
 | |
| #  define G_MEM_ALIGN	GLIB_SIZEOF_LONG
 | |
| #endif	/* GLIB_SIZEOF_VOID_P <= GLIB_SIZEOF_LONG */
 | |
| 
 | |
| 
 | |
| /* Memory allocation functions
 | |
|  */
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_free	          (gpointer	 mem);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_34
 | |
| void     g_clear_pointer  (gpointer      *pp,
 | |
|                            GDestroyNotify destroy);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_malloc         (gsize	 n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_malloc0        (gsize	 n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_realloc        (gpointer	 mem,
 | |
| 			   gsize	 n_bytes) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_try_malloc     (gsize	 n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_try_malloc0    (gsize	 n_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_try_realloc    (gpointer	 mem,
 | |
| 			   gsize	 n_bytes) G_GNUC_WARN_UNUSED_RESULT;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_malloc_n       (gsize	 n_blocks,
 | |
| 			   gsize	 n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1,2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_malloc0_n      (gsize	 n_blocks,
 | |
| 			   gsize	 n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1,2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_realloc_n      (gpointer	 mem,
 | |
| 			   gsize	 n_blocks,
 | |
| 			   gsize	 n_block_bytes) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_try_malloc_n   (gsize	 n_blocks,
 | |
| 			   gsize	 n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1,2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_try_malloc0_n  (gsize	 n_blocks,
 | |
| 			   gsize	 n_block_bytes) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE2(1,2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_try_realloc_n  (gpointer	 mem,
 | |
| 			   gsize	 n_blocks,
 | |
| 			   gsize	 n_block_bytes) G_GNUC_WARN_UNUSED_RESULT;
 | |
| 
 | |
| #define g_clear_pointer(pp, destroy) \
 | |
|   G_STMT_START {                                                               \
 | |
|     G_STATIC_ASSERT (sizeof *(pp) == sizeof (gpointer));                       \
 | |
|     /* Only one access, please */                                              \
 | |
|     gpointer *_pp = (gpointer *) (pp);                                         \
 | |
|     gpointer _p;                                                               \
 | |
|     /* This assignment is needed to avoid a gcc warning */                     \
 | |
|     GDestroyNotify _destroy = (GDestroyNotify) (destroy);                      \
 | |
|                                                                                \
 | |
|     _p = *_pp;                                                                 \
 | |
|     if (_p) 								       \
 | |
|       { 								       \
 | |
|         *_pp = NULL;							       \
 | |
|         _destroy (_p);                                                         \
 | |
|       }                                                                        \
 | |
|   } G_STMT_END
 | |
| 
 | |
| /**
 | |
|  * g_steal_pointer:
 | |
|  * @pp: (not nullable): a pointer to a pointer
 | |
|  *
 | |
|  * Sets @pp to %NULL, returning the value that was there before.
 | |
|  *
 | |
|  * Conceptually, this transfers the ownership of the pointer from the
 | |
|  * referenced variable to the "caller" of the macro (ie: "steals" the
 | |
|  * reference).
 | |
|  *
 | |
|  * The return value will be properly typed, according to the type of
 | |
|  * @pp.
 | |
|  *
 | |
|  * This can be very useful when combined with g_autoptr() to prevent the
 | |
|  * return value of a function from being automatically freed.  Consider
 | |
|  * the following example (which only works on GCC and clang):
 | |
|  *
 | |
|  * |[
 | |
|  * GObject *
 | |
|  * create_object (void)
 | |
|  * {
 | |
|  *   g_autoptr(GObject) obj = lg_object_new (G_TYPE_OBJECT, NULL);
 | |
|  *
 | |
|  *   if (early_error_case)
 | |
|  *     return NULL;
 | |
|  *
 | |
|  *   return g_steal_pointer (&obj);
 | |
|  * }
 | |
|  * ]|
 | |
|  *
 | |
|  * It can also be used in similar ways for 'out' parameters and is
 | |
|  * particularly useful for dealing with optional out parameters:
 | |
|  *
 | |
|  * |[
 | |
|  * gboolean
 | |
|  * get_object (GObject **obj_out)
 | |
|  * {
 | |
|  *   g_autoptr(GObject) obj = lg_object_new (G_TYPE_OBJECT, NULL);
 | |
|  *
 | |
|  *   if (early_error_case)
 | |
|  *     return FALSE;
 | |
|  *
 | |
|  *   if (obj_out)
 | |
|  *     *obj_out = g_steal_pointer (&obj);
 | |
|  *
 | |
|  *   return TRUE;
 | |
|  * }
 | |
|  * ]|
 | |
|  *
 | |
|  * In the above example, the object will be automatically freed in the
 | |
|  * early error case and also in the case that %NULL was given for
 | |
|  * @obj_out.
 | |
|  *
 | |
|  * Since: 2.44
 | |
|  */
 | |
| static inline gpointer
 | |
| g_steal_pointer (gpointer pp)
 | |
| {
 | |
|   gpointer *ptr = (gpointer *) pp;
 | |
|   gpointer ref;
 | |
| 
 | |
|   ref = *ptr;
 | |
|   *ptr = NULL;
 | |
| 
 | |
|   return ref;
 | |
| }
 | |
| 
 | |
| /* type safety */
 | |
| #define g_steal_pointer(pp) \
 | |
|   (0 ? (*(pp)) : (g_steal_pointer) (pp))
 | |
| 
 | |
| /* Optimise: avoid the call to the (slower) _n function if we can
 | |
|  * determine at compile-time that no overflow happens.
 | |
|  */
 | |
| #if defined (__GNUC__) && (__GNUC__ >= 2) && defined (__OPTIMIZE__)
 | |
| #  define _G_NEW(struct_type, n_structs, func) \
 | |
| 	(struct_type *) (lG_GNUC_EXTENSION ({			\
 | |
| 	  gsize __n = (gsize) (n_structs);			\
 | |
| 	  gsize __s = sizeof (struct_type);			\
 | |
| 	  gpointer __p;						\
 | |
| 	  if (__s == 1)						\
 | |
| 	    __p = g_##func (__n);				\
 | |
| 	  else if (__builtin_constant_p (__n) &&		\
 | |
| 	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
 | |
| 	    __p = g_##func (__n * __s);				\
 | |
| 	  else							\
 | |
| 	    __p = g_##func##_n (__n, __s);			\
 | |
| 	  __p;							\
 | |
| 	}))
 | |
| #  define _G_RENEW(struct_type, mem, n_structs, func) \
 | |
| 	(struct_type *) (lG_GNUC_EXTENSION ({			\
 | |
| 	  gsize __n = (gsize) (n_structs);			\
 | |
| 	  gsize __s = sizeof (struct_type);			\
 | |
| 	  gpointer __p = (gpointer) (mem);			\
 | |
| 	  if (__s == 1)						\
 | |
| 	    __p = g_##func (__p, __n);				\
 | |
| 	  else if (__builtin_constant_p (__n) &&		\
 | |
| 	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
 | |
| 	    __p = g_##func (__p, __n * __s);			\
 | |
| 	  else							\
 | |
| 	    __p = g_##func##_n (__p, __n, __s);			\
 | |
| 	  __p;							\
 | |
| 	}))
 | |
| 
 | |
| #else
 | |
| 
 | |
| /* Unoptimised version: always call the _n() function. */
 | |
| 
 | |
| #define _G_NEW(struct_type, n_structs, func) \
 | |
|         ((struct_type *) g_##func##_n ((n_structs), sizeof (struct_type)))
 | |
| #define _G_RENEW(struct_type, mem, n_structs, func) \
 | |
|         ((struct_type *) g_##func##_n (mem, (n_structs), sizeof (struct_type)))
 | |
| 
 | |
| #endif
 | |
| 
 | |
| /**
 | |
|  * g_new:
 | |
|  * @struct_type: the type of the elements to allocate
 | |
|  * @n_structs: the number of elements to allocate
 | |
|  * 
 | |
|  * Allocates @n_structs elements of type @struct_type.
 | |
|  * The returned pointer is cast to a pointer to the given type.
 | |
|  * If @n_structs is 0 it returns %NULL.
 | |
|  * Care is taken to avoid overflow when calculating the size of the allocated block.
 | |
|  * 
 | |
|  * Since the returned pointer is already casted to the right type,
 | |
|  * it is normally unnecessary to cast it explicitly, and doing
 | |
|  * so might hide memory allocation errors.
 | |
|  * 
 | |
|  * Returns: a pointer to the allocated memory, cast to a pointer to @struct_type
 | |
|  */
 | |
| #define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
 | |
| /**
 | |
|  * g_new0:
 | |
|  * @struct_type: the type of the elements to allocate.
 | |
|  * @n_structs: the number of elements to allocate.
 | |
|  * 
 | |
|  * Allocates @n_structs elements of type @struct_type, initialized to 0's.
 | |
|  * The returned pointer is cast to a pointer to the given type.
 | |
|  * If @n_structs is 0 it returns %NULL.
 | |
|  * Care is taken to avoid overflow when calculating the size of the allocated block.
 | |
|  * 
 | |
|  * Since the returned pointer is already casted to the right type,
 | |
|  * it is normally unnecessary to cast it explicitly, and doing
 | |
|  * so might hide memory allocation errors.
 | |
|  * 
 | |
|  * Returns: a pointer to the allocated memory, cast to a pointer to @struct_type.
 | |
|  */
 | |
| #define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
 | |
| /**
 | |
|  * g_renew:
 | |
|  * @struct_type: the type of the elements to allocate
 | |
|  * @mem: the currently allocated memory
 | |
|  * @n_structs: the number of elements to allocate
 | |
|  * 
 | |
|  * Reallocates the memory pointed to by @mem, so that it now has space for
 | |
|  * @n_structs elements of type @struct_type. It returns the new address of
 | |
|  * the memory, which may have been moved.
 | |
|  * Care is taken to avoid overflow when calculating the size of the allocated block.
 | |
|  * 
 | |
|  * Returns: a pointer to the new allocated memory, cast to a pointer to @struct_type
 | |
|  */
 | |
| #define g_renew(struct_type, mem, n_structs)		_G_RENEW (struct_type, mem, n_structs, realloc)
 | |
| /**
 | |
|  * g_try_new:
 | |
|  * @struct_type: the type of the elements to allocate
 | |
|  * @n_structs: the number of elements to allocate
 | |
|  * 
 | |
|  * Attempts to allocate @n_structs elements of type @struct_type, and returns
 | |
|  * %NULL on failure. Contrast with g_new(), which aborts the program on failure.
 | |
|  * The returned pointer is cast to a pointer to the given type.
 | |
|  * The function returns %NULL when @n_structs is 0 of if an overflow occurs.
 | |
|  * 
 | |
|  * Since: 2.8
 | |
|  * Returns: a pointer to the allocated memory, cast to a pointer to @struct_type
 | |
|  */
 | |
| #define g_try_new(struct_type, n_structs)		_G_NEW (struct_type, n_structs, try_malloc)
 | |
| /**
 | |
|  * g_try_new0:
 | |
|  * @struct_type: the type of the elements to allocate
 | |
|  * @n_structs: the number of elements to allocate
 | |
|  * 
 | |
|  * Attempts to allocate @n_structs elements of type @struct_type, initialized
 | |
|  * to 0's, and returns %NULL on failure. Contrast with g_new0(), which aborts
 | |
|  * the program on failure.
 | |
|  * The returned pointer is cast to a pointer to the given type.
 | |
|  * The function returns %NULL when @n_structs is 0 or if an overflow occurs.
 | |
|  * 
 | |
|  * Since: 2.8
 | |
|  * Returns: a pointer to the allocated memory, cast to a pointer to @struct_type
 | |
|  */
 | |
| #define g_try_new0(struct_type, n_structs)		_G_NEW (struct_type, n_structs, try_malloc0)
 | |
| /**
 | |
|  * g_try_renew:
 | |
|  * @struct_type: the type of the elements to allocate
 | |
|  * @mem: the currently allocated memory
 | |
|  * @n_structs: the number of elements to allocate
 | |
|  * 
 | |
|  * Attempts to reallocate the memory pointed to by @mem, so that it now has
 | |
|  * space for @n_structs elements of type @struct_type, and returns %NULL on
 | |
|  * failure. Contrast with g_renew(), which aborts the program on failure.
 | |
|  * It returns the new address of the memory, which may have been moved.
 | |
|  * The function returns %NULL if an overflow occurs.
 | |
|  * 
 | |
|  * Since: 2.8
 | |
|  * Returns: a pointer to the new allocated memory, cast to a pointer to @struct_type
 | |
|  */
 | |
| #define g_try_renew(struct_type, mem, n_structs)	_G_RENEW (struct_type, mem, n_structs, try_realloc)
 | |
| 
 | |
| 
 | |
| /* Memory allocation virtualization for debugging purposes
 | |
|  * g_mem_set_vtable() has to be the very first GLib function called
 | |
|  * if being used
 | |
|  */
 | |
| struct _GMemVTable {
 | |
|   gpointer (*malloc)      (gsize    n_bytes);
 | |
|   gpointer (*realloc)     (gpointer mem,
 | |
| 			   gsize    n_bytes);
 | |
|   void     (*free)        (gpointer mem);
 | |
|   /* optional; set to NULL if not used ! */
 | |
|   gpointer (*calloc)      (gsize    n_blocks,
 | |
| 			   gsize    n_block_bytes);
 | |
|   gpointer (*try_malloc)  (gsize    n_bytes);
 | |
|   gpointer (*try_realloc) (gpointer mem,
 | |
| 			   gsize    n_bytes);
 | |
| };
 | |
| GLIB_VAR GMemVTable	*glib_mem_table;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_mem_set_vtable (GMemVTable	*vtable);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_mem_is_system_malloc (void);
 | |
| 
 | |
| GLIB_VAR gboolean g_mem_gc_friendly;
 | |
| 
 | |
| /* Memory profiler and checker, has to be enabled via g_mem_set_vtable()
 | |
|  */
 | |
| GLIB_VAR GMemVTable	*glib_mem_profiler_table;
 | |
| GLIB_DEPRECATED_IN_2_46
 | |
| void	g_mem_profile	(void);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_MEM_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_NODE_H__
 | |
| #define __G_NODE_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GNode		GNode;
 | |
| 
 | |
| /* Tree traverse flags */
 | |
| typedef enum
 | |
| {
 | |
|   G_TRAVERSE_LEAVES     = 1 << 0,
 | |
|   G_TRAVERSE_NON_LEAVES = 1 << 1,
 | |
|   G_TRAVERSE_ALL        = G_TRAVERSE_LEAVES | G_TRAVERSE_NON_LEAVES,
 | |
|   G_TRAVERSE_MASK       = 0x03,
 | |
|   G_TRAVERSE_LEAFS      = G_TRAVERSE_LEAVES,
 | |
|   G_TRAVERSE_NON_LEAFS  = G_TRAVERSE_NON_LEAVES
 | |
| } GTraverseFlags;
 | |
| 
 | |
| /* Tree traverse orders */
 | |
| typedef enum
 | |
| {
 | |
|   G_IN_ORDER,
 | |
|   G_PRE_ORDER,
 | |
|   G_POST_ORDER,
 | |
|   G_LEVEL_ORDER
 | |
| } GTraverseType;
 | |
| 
 | |
| typedef gboolean	(*GNodeTraverseFunc)	(GNode	       *node,
 | |
| 						 gpointer	data);
 | |
| typedef void		(*GNodeForeachFunc)	(GNode	       *node,
 | |
| 						 gpointer	data);
 | |
| 
 | |
| /**
 | |
|  * GCopyFunc:
 | |
|  * @src: (not nullable): A pointer to the data which should be copied
 | |
|  * @data: Additional data
 | |
|  *
 | |
|  * A function of this signature is used to copy the node data 
 | |
|  * when doing a deep-copy of a tree.
 | |
|  *
 | |
|  * Returns: (not nullable): A pointer to the copy
 | |
|  *
 | |
|  * Since: 2.4
 | |
|  */
 | |
| typedef gpointer	(*GCopyFunc)            (gconstpointer  src,
 | |
|                                                  gpointer       data);
 | |
| 
 | |
| /* N-way tree implementation
 | |
|  */
 | |
| struct _GNode
 | |
| {
 | |
|   gpointer data;
 | |
|   GNode	  *next;
 | |
|   GNode	  *prev;
 | |
|   GNode	  *parent;
 | |
|   GNode	  *children;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * G_NODE_IS_ROOT:
 | |
|  * @node: a #GNode
 | |
|  *
 | |
|  * Returns %TRUE if a #GNode is the root of a tree.
 | |
|  *
 | |
|  * Returns: %TRUE if the #GNode is the root of a tree 
 | |
|  *     (i.e. it has no parent or siblings)
 | |
|  */
 | |
| #define	 G_NODE_IS_ROOT(node)	(((GNode*) (node))->parent == NULL && \
 | |
| 				 ((GNode*) (node))->prev == NULL && \
 | |
| 				 ((GNode*) (node))->next == NULL)
 | |
| 
 | |
| /**
 | |
|  * G_NODE_IS_LEAF:
 | |
|  * @node: a #GNode
 | |
|  *
 | |
|  * Returns %TRUE if a #GNode is a leaf node.
 | |
|  *
 | |
|  * Returns: %TRUE if the #GNode is a leaf node 
 | |
|  *     (i.e. it has no children)
 | |
|  */
 | |
| #define	 G_NODE_IS_LEAF(node)	(((GNode*) (node))->children == NULL)
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GNode*	 g_node_new		(gpointer	   data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_node_destroy		(GNode		  *root);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_node_unlink		(GNode		  *node);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GNode*   g_node_copy_deep       (GNode            *node,
 | |
| 				 GCopyFunc         copy_func,
 | |
| 				 gpointer          data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GNode*   g_node_copy            (GNode            *node);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GNode*	 g_node_insert		(GNode		  *parent,
 | |
| 				 gint		   position,
 | |
| 				 GNode		  *node);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GNode*	 g_node_insert_before	(GNode		  *parent,
 | |
| 				 GNode		  *sibling,
 | |
| 				 GNode		  *node);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GNode*   g_node_insert_after    (GNode            *parent,
 | |
| 				 GNode            *sibling,
 | |
| 				 GNode            *node); 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GNode*	 g_node_prepend		(GNode		  *parent,
 | |
| 				 GNode		  *node);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint	 g_node_n_nodes		(GNode		  *root,
 | |
| 				 GTraverseFlags	   flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GNode*	 g_node_get_root	(GNode		  *node);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_node_is_ancestor	(GNode		  *node,
 | |
| 				 GNode		  *descendant);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint	 g_node_depth		(GNode		  *node);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GNode*	 g_node_find		(GNode		  *root,
 | |
| 				 GTraverseType	   order,
 | |
| 				 GTraverseFlags	   flags,
 | |
| 				 gpointer	   data);
 | |
| 
 | |
| /* convenience macros */
 | |
| /**
 | |
|  * g_node_append:
 | |
|  * @parent: the #GNode to place the new #GNode under
 | |
|  * @node: the #GNode to insert
 | |
|  *
 | |
|  * Inserts a #GNode as the last child of the given parent.
 | |
|  *
 | |
|  * Returns: the inserted #GNode
 | |
|  */
 | |
| #define g_node_append(parent, node)				\
 | |
|      g_node_insert_before ((parent), NULL, (node))
 | |
| 
 | |
| /**
 | |
|  * g_node_insert_data:
 | |
|  * @parent: the #GNode to place the new #GNode under
 | |
|  * @position: the position to place the new #GNode at. If position is -1, 
 | |
|  *     the new #GNode is inserted as the last child of @parent
 | |
|  * @data: the data for the new #GNode
 | |
|  *
 | |
|  * Inserts a new #GNode at the given position.
 | |
|  *
 | |
|  * Returns: the new #GNode
 | |
|  */
 | |
| #define	g_node_insert_data(parent, position, data)		\
 | |
|      g_node_insert ((parent), (position), g_node_new (data))
 | |
| 
 | |
| /**
 | |
|  * g_node_insert_data_after:
 | |
|  * @parent: the #GNode to place the new #GNode under
 | |
|  * @sibling: the sibling #GNode to place the new #GNode after
 | |
|  * @data: the data for the new #GNode
 | |
|  *
 | |
|  * Inserts a new #GNode after the given sibling.
 | |
|  *
 | |
|  * Returns: the new #GNode
 | |
|  */
 | |
| 
 | |
| #define	g_node_insert_data_after(parent, sibling, data)	\
 | |
|      g_node_insert_after ((parent), (sibling), g_node_new (data))
 | |
| /**
 | |
|  * g_node_insert_data_before:
 | |
|  * @parent: the #GNode to place the new #GNode under
 | |
|  * @sibling: the sibling #GNode to place the new #GNode before
 | |
|  * @data: the data for the new #GNode
 | |
|  *
 | |
|  * Inserts a new #GNode before the given sibling.
 | |
|  *
 | |
|  * Returns: the new #GNode
 | |
|  */
 | |
| #define	g_node_insert_data_before(parent, sibling, data)	\
 | |
|      g_node_insert_before ((parent), (sibling), g_node_new (data))
 | |
| 
 | |
| /**
 | |
|  * g_node_prepend_data:
 | |
|  * @parent: the #GNode to place the new #GNode under
 | |
|  * @data: the data for the new #GNode
 | |
|  *
 | |
|  * Inserts a new #GNode as the first child of the given parent.
 | |
|  *
 | |
|  * Returns: the new #GNode
 | |
|  */
 | |
| #define	g_node_prepend_data(parent, data)			\
 | |
|      g_node_prepend ((parent), g_node_new (data))
 | |
| 
 | |
| /**
 | |
|  * g_node_append_data:
 | |
|  * @parent: the #GNode to place the new #GNode under
 | |
|  * @data: the data for the new #GNode
 | |
|  *
 | |
|  * Inserts a new #GNode as the last child of the given parent.
 | |
|  *
 | |
|  * Returns: the new #GNode
 | |
|  */
 | |
| #define	g_node_append_data(parent, data)			\
 | |
|      g_node_insert_before ((parent), NULL, g_node_new (data))
 | |
| 
 | |
| /* traversal function, assumes that 'node' is root
 | |
|  * (only traverses 'node' and its subtree).
 | |
|  * this function is just a high level interface to
 | |
|  * low level traversal functions, optimized for speed.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_node_traverse	(GNode		  *root,
 | |
| 				 GTraverseType	   order,
 | |
| 				 GTraverseFlags	   flags,
 | |
| 				 gint		   max_depth,
 | |
| 				 GNodeTraverseFunc func,
 | |
| 				 gpointer	   data);
 | |
| 
 | |
| /* return the maximum tree height starting with 'node', this is an expensive
 | |
|  * operation, since we need to visit all nodes. this could be shortened by
 | |
|  * adding 'guint height' to struct _GNode, but then again, this is not very
 | |
|  * often needed, and would make g_node_insert() more time consuming.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint	 g_node_max_height	 (GNode *root);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_node_children_foreach (GNode		  *node,
 | |
| 				  GTraverseFlags   flags,
 | |
| 				  GNodeForeachFunc func,
 | |
| 				  gpointer	   data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_node_reverse_children (GNode		  *node);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint	 g_node_n_children	 (GNode		  *node);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GNode*	 g_node_nth_child	 (GNode		  *node,
 | |
| 				  guint		   n);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GNode*	 g_node_last_child	 (GNode		  *node);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GNode*	 g_node_find_child	 (GNode		  *node,
 | |
| 				  GTraverseFlags   flags,
 | |
| 				  gpointer	   data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint	 g_node_child_position	 (GNode		  *node,
 | |
| 				  GNode		  *child);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint	 g_node_child_index	 (GNode		  *node,
 | |
| 				  gpointer	   data);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GNode*	 g_node_first_sibling	 (GNode		  *node);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GNode*	 g_node_last_sibling	 (GNode		  *node);
 | |
| 
 | |
| /**
 | |
|  * g_node_prev_sibling:
 | |
|  * @node: a #GNode
 | |
|  *
 | |
|  * Gets the previous sibling of a #GNode.
 | |
|  *
 | |
|  * Returns: the previous sibling of @node, or %NULL if @node is the first
 | |
|  *     node or %NULL
 | |
|  */
 | |
| #define	 g_node_prev_sibling(node)	((node) ? \
 | |
| 					 ((GNode*) (node))->prev : NULL)
 | |
| 
 | |
| /**
 | |
|  * g_node_next_sibling:
 | |
|  * @node: a #GNode
 | |
|  *
 | |
|  * Gets the next sibling of a #GNode.
 | |
|  *
 | |
|  * Returns: the next sibling of @node, or %NULL if @node is the last node
 | |
|  *     or %NULL
 | |
|  */
 | |
| #define	 g_node_next_sibling(node)	((node) ? \
 | |
| 					 ((GNode*) (node))->next : NULL)
 | |
| 
 | |
| /**
 | |
|  * g_node_first_child:
 | |
|  * @node: a #GNode
 | |
|  *
 | |
|  * Gets the first child of a #GNode.
 | |
|  *
 | |
|  * Returns: the first child of @node, or %NULL if @node is %NULL 
 | |
|  *     or has no children
 | |
|  */
 | |
| #define	 g_node_first_child(node)	((node) ? \
 | |
| 					 ((GNode*) (node))->children : NULL)
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_NODE_H__ */
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GList GList;
 | |
| 
 | |
| struct _GList
 | |
| {
 | |
|   gpointer data;
 | |
|   GList *next;
 | |
|   GList *prev;
 | |
| };
 | |
| 
 | |
| /* Doubly linked lists
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_alloc                   (void) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_list_free                    (GList            *list);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_list_free_1                  (GList            *list);
 | |
| #define  g_list_free1                   g_list_free_1
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_list_free_full               (GList            *list,
 | |
| 					 GDestroyNotify    free_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_append                  (GList            *list,
 | |
| 					 gpointer          data) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_prepend                 (GList            *list,
 | |
| 					 gpointer          data) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_insert                  (GList            *list,
 | |
| 					 gpointer          data,
 | |
| 					 gint              position) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_insert_sorted           (GList            *list,
 | |
| 					 gpointer          data,
 | |
| 					 GCompareFunc      func) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_insert_sorted_with_data (GList            *list,
 | |
| 					 gpointer          data,
 | |
| 					 GCompareDataFunc  func,
 | |
| 					 gpointer          user_data) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_insert_before           (GList            *list,
 | |
| 					 GList            *sibling,
 | |
| 					 gpointer          data) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_concat                  (GList            *list1,
 | |
| 					 GList            *list2) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_remove                  (GList            *list,
 | |
| 					 gconstpointer     data) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_remove_all              (GList            *list,
 | |
| 					 gconstpointer     data) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_remove_link             (GList            *list,
 | |
| 					 GList            *llink) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_delete_link             (GList            *list,
 | |
| 					 GList            *link_) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_reverse                 (GList            *list) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_copy                    (GList            *list) G_GNUC_WARN_UNUSED_RESULT;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_34
 | |
| GList*   g_list_copy_deep               (GList            *list,
 | |
| 					 GCopyFunc         func,
 | |
| 					 gpointer          user_data) G_GNUC_WARN_UNUSED_RESULT;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_nth                     (GList            *list,
 | |
| 					 guint             n);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_nth_prev                (GList            *list,
 | |
| 					 guint             n);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_find                    (GList            *list,
 | |
| 					 gconstpointer     data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_find_custom             (GList            *list,
 | |
| 					 gconstpointer     data,
 | |
| 					 GCompareFunc      func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint     g_list_position                (GList            *list,
 | |
| 					 GList            *llink);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint     g_list_index                   (GList            *list,
 | |
| 					 gconstpointer     data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_last                    (GList            *list);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_first                   (GList            *list);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_list_length                  (GList            *list);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_list_foreach                 (GList            *list,
 | |
| 					 GFunc             func,
 | |
| 					 gpointer          user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_sort                    (GList            *list,
 | |
| 					 GCompareFunc      compare_func) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_list_sort_with_data          (GList            *list,
 | |
| 					 GCompareDataFunc  compare_func,
 | |
| 					 gpointer          user_data)  G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_list_nth_data                (GList            *list,
 | |
| 					 guint             n);
 | |
| 
 | |
| 
 | |
| #define g_list_previous(list)	        ((list) ? (((GList *)(list))->prev) : NULL)
 | |
| #define g_list_next(list)	        ((list) ? (((GList *)(list))->next) : NULL)
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_LIST_H__ */
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GHashTable  GHashTable;
 | |
| 
 | |
| typedef gboolean  (*GHRFunc)  (gpointer  key,
 | |
|                                gpointer  value,
 | |
|                                gpointer  user_data);
 | |
| 
 | |
| typedef struct _GHashTableIter GHashTableIter;
 | |
| 
 | |
| struct _GHashTableIter
 | |
| {
 | |
|   /*< private >*/
 | |
|   gpointer      dummy1;
 | |
|   gpointer      dummy2;
 | |
|   gpointer      dummy3;
 | |
|   int           dummy4;
 | |
|   gboolean      dummy5;
 | |
|   gpointer      dummy6;
 | |
| };
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GHashTable* g_hash_table_new               (GHashFunc       hash_func,
 | |
|                                             GEqualFunc      key_equal_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GHashTable* g_hash_table_new_full          (GHashFunc       hash_func,
 | |
|                                             GEqualFunc      key_equal_func,
 | |
|                                             GDestroyNotify  key_destroy_func,
 | |
|                                             GDestroyNotify  value_destroy_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_hash_table_destroy           (GHashTable     *hash_table);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean    g_hash_table_insert            (GHashTable     *hash_table,
 | |
|                                             gpointer        key,
 | |
|                                             gpointer        value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean    g_hash_table_replace           (GHashTable     *hash_table,
 | |
|                                             gpointer        key,
 | |
|                                             gpointer        value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean    g_hash_table_add               (GHashTable     *hash_table,
 | |
|                                             gpointer        key);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean    g_hash_table_remove            (GHashTable     *hash_table,
 | |
|                                             gconstpointer   key);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_hash_table_remove_all        (GHashTable     *hash_table);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean    g_hash_table_steal             (GHashTable     *hash_table,
 | |
|                                             gconstpointer   key);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_hash_table_steal_all         (GHashTable     *hash_table);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer    g_hash_table_lookup            (GHashTable     *hash_table,
 | |
|                                             gconstpointer   key);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean    g_hash_table_contains          (GHashTable     *hash_table,
 | |
|                                             gconstpointer   key);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean    g_hash_table_lookup_extended   (GHashTable     *hash_table,
 | |
|                                             gconstpointer   lookup_key,
 | |
|                                             gpointer       *orig_key,
 | |
|                                             gpointer       *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_hash_table_foreach           (GHashTable     *hash_table,
 | |
|                                             GHFunc          func,
 | |
|                                             gpointer        user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer    g_hash_table_find              (GHashTable     *hash_table,
 | |
|                                             GHRFunc         predicate,
 | |
|                                             gpointer        user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint       g_hash_table_foreach_remove    (GHashTable     *hash_table,
 | |
|                                             GHRFunc         func,
 | |
|                                             gpointer        user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint       g_hash_table_foreach_steal     (GHashTable     *hash_table,
 | |
|                                             GHRFunc         func,
 | |
|                                             gpointer        user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint       g_hash_table_size              (GHashTable     *hash_table);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList *     g_hash_table_get_keys          (GHashTable     *hash_table);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList *     g_hash_table_get_values        (GHashTable     *hash_table);
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| gpointer *  g_hash_table_get_keys_as_array (GHashTable     *hash_table,
 | |
|                                             guint          *length);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_hash_table_iter_init         (GHashTableIter *iter,
 | |
|                                             GHashTable     *hash_table);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean    g_hash_table_iter_next         (GHashTableIter *iter,
 | |
|                                             gpointer       *key,
 | |
|                                             gpointer       *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GHashTable* g_hash_table_iter_get_hash_table (GHashTableIter *iter);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_hash_table_iter_remove       (GHashTableIter *iter);
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| void        g_hash_table_iter_replace      (GHashTableIter *iter,
 | |
|                                             gpointer        value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_hash_table_iter_steal        (GHashTableIter *iter);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GHashTable* g_hash_table_ref               (GHashTable     *hash_table);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_hash_table_unref             (GHashTable     *hash_table);
 | |
| 
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
| #define g_hash_table_freeze(hash_table) ((void)0)
 | |
| #define g_hash_table_thaw(hash_table) ((void)0)
 | |
| #endif
 | |
| 
 | |
| /* Hash Functions
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_str_equal    (gconstpointer  v1,
 | |
|                          gconstpointer  v2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_str_hash     (gconstpointer  v);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_int_equal    (gconstpointer  v1,
 | |
|                          gconstpointer  v2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_int_hash     (gconstpointer  v);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_int64_equal  (gconstpointer  v1,
 | |
|                          gconstpointer  v2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_int64_hash   (gconstpointer  v);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_double_equal (gconstpointer  v1,
 | |
|                          gconstpointer  v2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_double_hash  (gconstpointer  v);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_direct_hash  (gconstpointer  v) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_direct_equal (gconstpointer  v1,
 | |
|                          gconstpointer  v2) G_GNUC_CONST;
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_HASH_H__ */
 | |
| /* ghmac.h - secure data hashing
 | |
|  *
 | |
|  * Copyright (C) 2011  Stef Walter  <stefw@collabora.co.uk>
 | |
|  *
 | |
|  * 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, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_HMAC_H__
 | |
| #define __G_HMAC_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /**
 | |
|  * GHmac:
 | |
|  *
 | |
|  * An opaque structure representing a HMAC operation.
 | |
|  * To create a new GHmac, use g_hmac_new(). To free
 | |
|  * a GHmac, use g_hmac_unref().
 | |
|  *
 | |
|  * Since: 2.30
 | |
|  */
 | |
| typedef struct _GHmac       GHmac;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| GHmac *               g_hmac_new                    (GChecksumType  digest_type,
 | |
|                                                      const guchar  *key,
 | |
|                                                      gsize          key_len);
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| GHmac *               g_hmac_copy                   (const GHmac   *hmac);
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| GHmac *               g_hmac_ref                    (GHmac         *hmac);
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| void                  g_hmac_unref                  (GHmac         *hmac);
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| void                  g_hmac_update                 (GHmac         *hmac,
 | |
|                                                      const guchar  *data,
 | |
|                                                      gssize         length);
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| const gchar *         g_hmac_get_string             (GHmac         *hmac);
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| void                  g_hmac_get_digest             (GHmac         *hmac,
 | |
|                                                      guint8        *buffer,
 | |
|                                                      gsize         *digest_len);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| gchar                *g_compute_hmac_for_data       (GChecksumType  digest_type,
 | |
|                                                      const guchar  *key,
 | |
|                                                      gsize          key_len,
 | |
|                                                      const guchar  *data,
 | |
|                                                      gsize          length);
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| gchar                *g_compute_hmac_for_string     (GChecksumType  digest_type,
 | |
|                                                      const guchar  *key,
 | |
|                                                      gsize          key_len,
 | |
|                                                      const gchar   *str,
 | |
|                                                      gssize         length);
 | |
| GLIB_AVAILABLE_IN_2_50
 | |
| gchar               *g_compute_hmac_for_bytes       (GChecksumType  digest_type,
 | |
|                                                      GBytes        *key,
 | |
|                                                      GBytes        *data);
 | |
| 
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_CHECKSUM_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_HOOK_H__
 | |
| #define __G_HOOK_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| 
 | |
| /* --- typedefs --- */
 | |
| typedef struct _GHook		GHook;
 | |
| typedef struct _GHookList	GHookList;
 | |
| 
 | |
| typedef gint		(*GHookCompareFunc)	(GHook		*new_hook,
 | |
| 						 GHook		*sibling);
 | |
| typedef gboolean	(*GHookFindFunc)	(GHook		*hook,
 | |
| 						 gpointer	 data);
 | |
| typedef void		(*GHookMarshaller)	(GHook		*hook,
 | |
| 						 gpointer	 marshal_data);
 | |
| typedef gboolean	(*GHookCheckMarshaller)	(GHook		*hook,
 | |
| 						 gpointer	 marshal_data);
 | |
| typedef void		(*GHookFunc)		(gpointer	 data);
 | |
| typedef gboolean	(*GHookCheckFunc)	(gpointer	 data);
 | |
| typedef void		(*GHookFinalizeFunc)	(GHookList      *hook_list,
 | |
| 						 GHook          *hook);
 | |
| typedef enum
 | |
| {
 | |
|   G_HOOK_FLAG_ACTIVE	    = 1 << 0,
 | |
|   G_HOOK_FLAG_IN_CALL	    = 1 << 1,
 | |
|   G_HOOK_FLAG_MASK	    = 0x0f
 | |
| } GHookFlagMask;
 | |
| #define G_HOOK_FLAG_USER_SHIFT	(4)
 | |
| 
 | |
| 
 | |
| /* --- structures --- */
 | |
| struct _GHookList
 | |
| {
 | |
|   gulong	    seq_id;
 | |
|   guint		    hook_size : 16;
 | |
|   guint		    is_setup : 1;
 | |
|   GHook		   *hooks;
 | |
|   gpointer	    dummy3;
 | |
|   GHookFinalizeFunc finalize_hook;
 | |
|   gpointer	    dummy[2];
 | |
| };
 | |
| struct _GHook
 | |
| {
 | |
|   gpointer	 data;
 | |
|   GHook		*next;
 | |
|   GHook		*prev;
 | |
|   guint		 ref_count;
 | |
|   gulong	 hook_id;
 | |
|   guint		 flags;
 | |
|   gpointer	 func;
 | |
|   GDestroyNotify destroy;
 | |
| };
 | |
| 
 | |
| 
 | |
| /* --- macros --- */
 | |
| #define	G_HOOK(hook)			((GHook*) (hook))
 | |
| #define	G_HOOK_FLAGS(hook)		(G_HOOK (hook)->flags)
 | |
| #define	G_HOOK_ACTIVE(hook)		((G_HOOK_FLAGS (hook) & \
 | |
| 					  G_HOOK_FLAG_ACTIVE) != 0)
 | |
| #define	G_HOOK_IN_CALL(hook)		((G_HOOK_FLAGS (hook) & \
 | |
| 					  G_HOOK_FLAG_IN_CALL) != 0)
 | |
| #define G_HOOK_IS_VALID(hook)		(G_HOOK (hook)->hook_id != 0 && \
 | |
| 					 (G_HOOK_FLAGS (hook) & \
 | |
|                                           G_HOOK_FLAG_ACTIVE))
 | |
| #define G_HOOK_IS_UNLINKED(hook)	(G_HOOK (hook)->next == NULL && \
 | |
| 					 G_HOOK (hook)->prev == NULL && \
 | |
| 					 G_HOOK (hook)->hook_id == 0 && \
 | |
| 					 G_HOOK (hook)->ref_count == 0)
 | |
| 
 | |
| 
 | |
| /* --- prototypes --- */
 | |
| /* callback maintenance functions */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_hook_list_init		(GHookList		*hook_list,
 | |
| 					 guint			 hook_size);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_hook_list_clear		(GHookList		*hook_list);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GHook*	 g_hook_alloc			(GHookList		*hook_list);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_hook_free			(GHookList		*hook_list,
 | |
| 					 GHook			*hook);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GHook *	 g_hook_ref			(GHookList		*hook_list,
 | |
| 					 GHook			*hook);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_hook_unref			(GHookList		*hook_list,
 | |
| 					 GHook			*hook);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_hook_destroy			(GHookList		*hook_list,
 | |
| 					 gulong			 hook_id);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_hook_destroy_link		(GHookList		*hook_list,
 | |
| 					 GHook			*hook);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_hook_prepend			(GHookList		*hook_list,
 | |
| 					 GHook			*hook);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_hook_insert_before		(GHookList		*hook_list,
 | |
| 					 GHook			*sibling,
 | |
| 					 GHook			*hook);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_hook_insert_sorted		(GHookList		*hook_list,
 | |
| 					 GHook			*hook,
 | |
| 					 GHookCompareFunc	 func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GHook*	 g_hook_get			(GHookList		*hook_list,
 | |
| 					 gulong			 hook_id);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GHook*	 g_hook_find			(GHookList		*hook_list,
 | |
| 					 gboolean		 need_valids,
 | |
| 					 GHookFindFunc		 func,
 | |
| 					 gpointer		 data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GHook*	 g_hook_find_data		(GHookList		*hook_list,
 | |
| 					 gboolean		 need_valids,
 | |
| 					 gpointer		 data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GHook*	 g_hook_find_func		(GHookList		*hook_list,
 | |
| 					 gboolean		 need_valids,
 | |
| 					 gpointer		 func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GHook*	 g_hook_find_func_data		(GHookList		*hook_list,
 | |
| 					 gboolean		 need_valids,
 | |
| 					 gpointer		 func,
 | |
| 					 gpointer		 data);
 | |
| /* return the first valid hook, and increment its reference count */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GHook*	 g_hook_first_valid		(GHookList		*hook_list,
 | |
| 					 gboolean		 may_be_in_call);
 | |
| /* return the next valid hook with incremented reference count, and
 | |
|  * decrement the reference count of the original hook
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GHook*	 g_hook_next_valid		(GHookList		*hook_list,
 | |
| 					 GHook			*hook,
 | |
| 					 gboolean		 may_be_in_call);
 | |
| /* GHookCompareFunc implementation to insert hooks sorted by their id */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint	 g_hook_compare_ids		(GHook			*new_hook,
 | |
| 					 GHook			*sibling);
 | |
| /* convenience macros */
 | |
| #define	 g_hook_append( hook_list, hook )  \
 | |
|      g_hook_insert_before ((hook_list), NULL, (hook))
 | |
| /* invoke all valid hooks with the (*GHookFunc) signature.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_hook_list_invoke		(GHookList		*hook_list,
 | |
| 					 gboolean		 may_recurse);
 | |
| /* invoke all valid hooks with the (*GHookCheckFunc) signature,
 | |
|  * and destroy the hook if FALSE is returned.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_hook_list_invoke_check	(GHookList		*hook_list,
 | |
| 					 gboolean		 may_recurse);
 | |
| /* invoke a marshaller on all valid hooks.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_hook_list_marshal		(GHookList		*hook_list,
 | |
| 					 gboolean		 may_recurse,
 | |
| 					 GHookMarshaller	 marshaller,
 | |
| 					 gpointer		 marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_hook_list_marshal_check	(GHookList		*hook_list,
 | |
| 					 gboolean		 may_recurse,
 | |
| 					 GHookCheckMarshaller	 marshaller,
 | |
| 					 gpointer		 marshal_data);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_HOOK_H__ */
 | |
| /* GLIB - Library of useful routines for C programming
 | |
|  * Copyright (C) 2008 Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General
 | |
|  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_HOST_UTILS_H__
 | |
| #define __G_HOST_UTILS_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean  g_hostname_is_non_ascii     (const gchar *hostname);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean  g_hostname_is_ascii_encoded (const gchar *hostname);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean  g_hostname_is_ip_address    (const gchar *hostname);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar    *g_hostname_to_ascii         (const gchar *hostname);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar    *g_hostname_to_unicode       (const gchar *hostname);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_HOST_UTILS_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_IOCHANNEL_H__
 | |
| #define __G_IOCHANNEL_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| /* gmain.h - the GLib Main loop
 | |
|  * Copyright (C) 1998-2000 Red Hat, Inc.
 | |
|  *
 | |
|  * 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, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_MAIN_H__
 | |
| #define __G_MAIN_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| /* gpoll.h - poll(2) support
 | |
|  * Copyright (C) 2008 Red Hat, Inc.
 | |
|  *
 | |
|  * 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, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_POLL_H__
 | |
| #define __G_POLL_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (__G_MAIN_H__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* Any definitions using GPollFD or GPollFunc are primarily
 | |
|  * for Unix and not guaranteed to be the compatible on all
 | |
|  * operating systems on which GLib runs. Right now, the
 | |
|  * GLib does use these functions on Win32 as well, but interprets
 | |
|  * them in a fairly different way than on Unix. If you use
 | |
|  * these definitions, you are should be prepared to recode
 | |
|  * for different operating systems.
 | |
|  *
 | |
|  * Note that on systems with a working poll(2), that function is used
 | |
|  * in place of g_poll(). Thus g_poll() must have the same signature as
 | |
|  * poll(), meaning GPollFD must have the same layout as struct pollfd.
 | |
|  *
 | |
|  * On Win32, the fd in a GPollFD should be Win32 HANDLE (*not* a file
 | |
|  * descriptor as provided by the C runtime) that can be used by
 | |
|  * MsgWaitForMultipleObjects. This does *not* include file handles
 | |
|  * from CreateFile, SOCKETs, nor pipe handles. (But you can use
 | |
|  * WSAEventSelect to signal events when a SOCKET is readable).
 | |
|  *
 | |
|  * On Win32, fd can also be the special value G_WIN32_MSG_HANDLE to
 | |
|  * indicate polling for messages.
 | |
|  *
 | |
|  * But note that G_WIN32_MSG_HANDLE GPollFDs should not be used by GDK
 | |
|  * (GTK) programs, as GDK itself wants to read messages and convert them
 | |
|  * to GDK events.
 | |
|  *
 | |
|  * So, unless you really know what you are doing, it's best not to try
 | |
|  * to use the main loop polling stuff for your own needs on
 | |
|  * Windows.
 | |
|  */
 | |
| typedef struct _GPollFD GPollFD;
 | |
| 
 | |
| /**
 | |
|  * GPollFunc:
 | |
|  * @ufds: an array of #GPollFD elements
 | |
|  * @nfsd: the number of elements in @ufds
 | |
|  * @timeout_: the maximum time to wait for an event of the file descriptors.
 | |
|  *     A negative value indicates an infinite timeout.
 | |
|  *
 | |
|  * Specifies the type of function passed to g_main_context_set_poll_func().
 | |
|  * The semantics of the function should match those of the poll() system call.
 | |
|  *
 | |
|  * Returns: the number of #GPollFD elements which have events or errors
 | |
|  *     reported, or -1 if an error occurred.
 | |
|  */
 | |
| typedef gint    (*GPollFunc)    (GPollFD *ufds,
 | |
|                                  guint    nfsd,
 | |
|                                  gint     timeout_);
 | |
| 
 | |
| /**
 | |
|  * GPollFD:
 | |
|  * @fd: the file descriptor to poll (or a HANDLE on Win32)
 | |
|  * @events: a bitwise combination from #GIOCondition, specifying which
 | |
|  *     events should be polled for. Typically for reading from a file
 | |
|  *     descriptor you would use %G_IO_IN | %G_IO_HUP | %G_IO_ERR, and
 | |
|  *     for writing you would use %G_IO_OUT | %G_IO_ERR.
 | |
|  * @revents: a bitwise combination of flags from #GIOCondition, returned
 | |
|  *     from the poll() function to indicate which events occurred.
 | |
|  *
 | |
|  * Represents a file descriptor, which events to poll for, and which events
 | |
|  * occurred.
 | |
|  */
 | |
| struct _GPollFD
 | |
| {
 | |
| #if defined (G_OS_WIN32) && GLIB_SIZEOF_VOID_P == 8
 | |
| #ifndef __GTK_DOC_IGNORE__
 | |
|   gint64	fd;
 | |
| #endif
 | |
| #else
 | |
|   gint		fd;
 | |
| #endif
 | |
|   gushort 	events;
 | |
|   gushort 	revents;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * G_POLLFD_FORMAT:
 | |
|  *
 | |
|  * A format specifier that can be used in printf()-style format strings
 | |
|  * when printing the @fd member of a #GPollFD.
 | |
|  */
 | |
| /* defined in glibconfig.h */
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint
 | |
| g_poll (GPollFD *fds,
 | |
| 	guint    nfds,
 | |
| 	gint     timeout);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_POLL_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_SLIST_H__
 | |
| #define __G_SLIST_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GSList GSList;
 | |
| 
 | |
| struct _GSList
 | |
| {
 | |
|   gpointer data;
 | |
|   GSList *next;
 | |
| };
 | |
| 
 | |
| /* Singly linked lists
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_alloc                   (void) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_slist_free                    (GSList           *list);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_slist_free_1                  (GSList           *list);
 | |
| #define	 g_slist_free1		         g_slist_free_1
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_slist_free_full               (GSList           *list,
 | |
| 					  GDestroyNotify    free_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_append                  (GSList           *list,
 | |
| 					  gpointer          data) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_prepend                 (GSList           *list,
 | |
| 					  gpointer          data) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_insert                  (GSList           *list,
 | |
| 					  gpointer          data,
 | |
| 					  gint              position) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_insert_sorted           (GSList           *list,
 | |
| 					  gpointer          data,
 | |
| 					  GCompareFunc      func) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_insert_sorted_with_data (GSList           *list,
 | |
| 					  gpointer          data,
 | |
| 					  GCompareDataFunc  func,
 | |
| 					  gpointer          user_data) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_insert_before           (GSList           *slist,
 | |
| 					  GSList           *sibling,
 | |
| 					  gpointer          data) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_concat                  (GSList           *list1,
 | |
| 					  GSList           *list2) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_remove                  (GSList           *list,
 | |
| 					  gconstpointer     data) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_remove_all              (GSList           *list,
 | |
| 					  gconstpointer     data) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_remove_link             (GSList           *list,
 | |
| 					  GSList           *link_) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_delete_link             (GSList           *list,
 | |
| 					  GSList           *link_) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_reverse                 (GSList           *list) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_copy                    (GSList           *list) G_GNUC_WARN_UNUSED_RESULT;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_34
 | |
| GSList*  g_slist_copy_deep               (GSList            *list,
 | |
| 					  GCopyFunc         func,
 | |
| 					  gpointer          user_data) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_nth                     (GSList           *list,
 | |
| 					  guint             n);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_find                    (GSList           *list,
 | |
| 					  gconstpointer     data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_find_custom             (GSList           *list,
 | |
| 					  gconstpointer     data,
 | |
| 					  GCompareFunc      func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint     g_slist_position                (GSList           *list,
 | |
| 					  GSList           *llink);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint     g_slist_index                   (GSList           *list,
 | |
| 					  gconstpointer     data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_last                    (GSList           *list);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_slist_length                  (GSList           *list);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_slist_foreach                 (GSList           *list,
 | |
| 					  GFunc             func,
 | |
| 					  gpointer          user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_sort                    (GSList           *list,
 | |
| 					  GCompareFunc      compare_func) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSList*  g_slist_sort_with_data          (GSList           *list,
 | |
| 					  GCompareDataFunc  compare_func,
 | |
| 					  gpointer          user_data) G_GNUC_WARN_UNUSED_RESULT;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_slist_nth_data                (GSList           *list,
 | |
| 					  guint             n);
 | |
| 
 | |
| #define  g_slist_next(slist)	         ((slist) ? (((GSList *)(slist))->next) : NULL)
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_SLIST_H__ */
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef enum /*< flags >*/
 | |
| {
 | |
|   G_IO_IN	GLIB_SYSDEF_POLLIN,
 | |
|   G_IO_OUT	GLIB_SYSDEF_POLLOUT,
 | |
|   G_IO_PRI	GLIB_SYSDEF_POLLPRI,
 | |
|   G_IO_ERR	GLIB_SYSDEF_POLLERR,
 | |
|   G_IO_HUP	GLIB_SYSDEF_POLLHUP,
 | |
|   G_IO_NVAL	GLIB_SYSDEF_POLLNVAL
 | |
| } GIOCondition;
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * GMainContext:
 | |
|  *
 | |
|  * The `GMainContext` struct is an opaque data
 | |
|  * type representing a set of sources to be handled in a main loop.
 | |
|  */
 | |
| typedef struct _GMainContext            GMainContext;
 | |
| 
 | |
| /**
 | |
|  * GMainLoop:
 | |
|  *
 | |
|  * The `GMainLoop` struct is an opaque data type
 | |
|  * representing the main event loop of a GLib or GTK+ application.
 | |
|  */
 | |
| typedef struct _GMainLoop               GMainLoop;
 | |
| 
 | |
| /**
 | |
|  * GSource:
 | |
|  *
 | |
|  * The `GSource` struct is an opaque data type
 | |
|  * representing an event source.
 | |
|  */
 | |
| typedef struct _GSource                 GSource;
 | |
| typedef struct _GSourcePrivate          GSourcePrivate;
 | |
| 
 | |
| /**
 | |
|  * GSourceCallbackFuncs:
 | |
|  * @ref: Called when a reference is added to the callback object
 | |
|  * @unref: Called when a reference to the callback object is dropped
 | |
|  * @get: Called to extract the callback function and data from the
 | |
|  *     callback object.
 | |
| 
 | |
|  * The `GSourceCallbackFuncs` struct contains
 | |
|  * functions for managing callback objects.
 | |
|  */
 | |
| typedef struct _GSourceCallbackFuncs    GSourceCallbackFuncs;
 | |
| 
 | |
| /**
 | |
|  * GSourceFuncs:
 | |
|  * @prepare: Called before all the file descriptors are polled. If the
 | |
|  *     source can determine that it is ready here (without waiting for the
 | |
|  *     results of the poll() call) it should return %TRUE. It can also return
 | |
|  *     a @timeout_ value which should be the maximum timeout (in milliseconds)
 | |
|  *     which should be passed to the poll() call. The actual timeout used will
 | |
|  *     be -1 if all sources returned -1, or it will be the minimum of all
 | |
|  *     the @timeout_ values returned which were >= 0.  Since 2.36 this may
 | |
|  *     be %NULL, in which case the effect is as if the function always returns
 | |
|  *     %FALSE with a timeout of -1.  If @prepare returns a
 | |
|  *     timeout and the source also has a 'ready time' set then the
 | |
|  *     nearer of the two will be used.
 | |
|  * @check: Called after all the file descriptors are polled. The source
 | |
|  *     should return %TRUE if it is ready to be dispatched. Note that some
 | |
|  *     time may have passed since the previous prepare function was called,
 | |
|  *     so the source should be checked again here.  Since 2.36 this may
 | |
|  *     be %NULL, in which case the effect is as if the function always returns
 | |
|  *     %FALSE.
 | |
|  * @dispatch: Called to dispatch the event source, after it has returned
 | |
|  *     %TRUE in either its @prepare or its @check function. The @dispatch
 | |
|  *     function is passed in a callback function and data. The callback
 | |
|  *     function may be %NULL if the source was never connected to a callback
 | |
|  *     using g_source_set_callback(). The @dispatch function should call the
 | |
|  *     callback function with @user_data and whatever additional parameters
 | |
|  *     are needed for this type of event source. The return value of the
 | |
|  *     @dispatch function should be #G_SOURCE_REMOVE if the source should be
 | |
|  *     removed or #G_SOURCE_CONTINUE to keep it.
 | |
|  * @finalize: Called when the source is finalized.
 | |
|  *
 | |
|  * The `GSourceFuncs` struct contains a table of
 | |
|  * functions used to handle event sources in a generic manner.
 | |
|  *
 | |
|  * For idle sources, the prepare and check functions always return %TRUE
 | |
|  * to indicate that the source is always ready to be processed. The prepare
 | |
|  * function also returns a timeout value of 0 to ensure that the poll() call
 | |
|  * doesn't block (since that would be time wasted which could have been spent
 | |
|  * running the idle function).
 | |
|  *
 | |
|  * For timeout sources, the prepare and check functions both return %TRUE
 | |
|  * if the timeout interval has expired. The prepare function also returns
 | |
|  * a timeout value to ensure that the poll() call doesn't block too long
 | |
|  * and miss the next timeout.
 | |
|  *
 | |
|  * For file descriptor sources, the prepare function typically returns %FALSE,
 | |
|  * since it must wait until poll() has been called before it knows whether
 | |
|  * any events need to be processed. It sets the returned timeout to -1 to
 | |
|  * indicate that it doesn't mind how long the poll() call blocks. In the
 | |
|  * check function, it tests the results of the poll() call to see if the
 | |
|  * required condition has been met, and returns %TRUE if so.
 | |
|  */
 | |
| typedef struct _GSourceFuncs            GSourceFuncs;
 | |
| 
 | |
| /**
 | |
|  * GPid:
 | |
|  *
 | |
|  * A type which is used to hold a process identification.
 | |
|  *
 | |
|  * On UNIX, processes are identified by a process id (an integer),
 | |
|  * while Windows uses process handles (which are pointers).
 | |
|  *
 | |
|  * GPid is used in GLib only for descendant processes spawned with
 | |
|  * the g_spawn functions.
 | |
|  */
 | |
| /* defined in glibconfig.h */
 | |
| 
 | |
| /**
 | |
|  * G_PID_FORMAT:
 | |
|  *
 | |
|  * A format specifier that can be used in printf()-style format strings
 | |
|  * when printing a #GPid.
 | |
|  *
 | |
|  * Since: 2.50
 | |
|  */
 | |
| /* defined in glibconfig.h */
 | |
| 
 | |
| /**
 | |
|  * GSourceFunc:
 | |
|  * @user_data: data passed to the function, set when the source was
 | |
|  *     created with one of the above functions
 | |
|  *
 | |
|  * Specifies the type of function passed to g_timeout_add(),
 | |
|  * g_timeout_add_full(), g_idle_add(), and g_idle_add_full().
 | |
|  *
 | |
|  * Returns: %FALSE if the source should be removed. #G_SOURCE_CONTINUE and
 | |
|  * #G_SOURCE_REMOVE are more memorable names for the return value.
 | |
|  */
 | |
| typedef gboolean (*GSourceFunc)       (gpointer user_data);
 | |
| 
 | |
| /**
 | |
|  * GChildWatchFunc:
 | |
|  * @pid: the process id of the child process
 | |
|  * @status: Status information about the child process, encoded
 | |
|  *     in a platform-specific manner
 | |
|  * @user_data: user data passed to g_child_watch_add()
 | |
|  *
 | |
|  * Prototype of a #GChildWatchSource callback, called when a child
 | |
|  * process has exited.  To interpret @status, see the documentation
 | |
|  * for g_spawn_check_exit_status().
 | |
|  */
 | |
| typedef void     (*GChildWatchFunc)   (GPid     pid,
 | |
|                                        gint     status,
 | |
|                                        gpointer user_data);
 | |
| struct _GSource
 | |
| {
 | |
|   /*< private >*/
 | |
|   gpointer callback_data;
 | |
|   GSourceCallbackFuncs *callback_funcs;
 | |
| 
 | |
|   const GSourceFuncs *source_funcs;
 | |
|   guint ref_count;
 | |
| 
 | |
|   GMainContext *context;
 | |
| 
 | |
|   gint priority;
 | |
|   guint flags;
 | |
|   guint source_id;
 | |
| 
 | |
|   GSList *poll_fds;
 | |
|   
 | |
|   GSource *prev;
 | |
|   GSource *next;
 | |
| 
 | |
|   char    *name;
 | |
| 
 | |
|   GSourcePrivate *priv;
 | |
| };
 | |
| 
 | |
| struct _GSourceCallbackFuncs
 | |
| {
 | |
|   void (*ref)   (gpointer     cb_data);
 | |
|   void (*unref) (gpointer     cb_data);
 | |
|   void (*get)   (gpointer     cb_data,
 | |
|                  GSource     *source, 
 | |
|                  GSourceFunc *func,
 | |
|                  gpointer    *data);
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * GSourceDummyMarshal:
 | |
|  *
 | |
|  * This is just a placeholder for #GClosureMarshal,
 | |
|  * which cannot be used here for dependency reasons.
 | |
|  */
 | |
| typedef void (*GSourceDummyMarshal) (void);
 | |
| 
 | |
| struct _GSourceFuncs
 | |
| {
 | |
|   gboolean (*prepare)  (GSource    *source,
 | |
|                         gint       *timeout_);
 | |
|   gboolean (*check)    (GSource    *source);
 | |
|   gboolean (*dispatch) (GSource    *source,
 | |
|                         GSourceFunc callback,
 | |
|                         gpointer    user_data);
 | |
|   void     (*finalize) (GSource    *source); /* Can be NULL */
 | |
| 
 | |
|   /*< private >*/
 | |
|   /* For use by g_source_set_closure */
 | |
|   GSourceFunc     closure_callback;        
 | |
|   GSourceDummyMarshal closure_marshal; /* Really is of type GClosureMarshal */
 | |
| };
 | |
| 
 | |
| /* Standard priorities */
 | |
| 
 | |
| /**
 | |
|  * G_PRIORITY_HIGH:
 | |
|  *
 | |
|  * Use this for high priority event sources.
 | |
|  *
 | |
|  * It is not used within GLib or GTK+.
 | |
|  */
 | |
| #define G_PRIORITY_HIGH            -100
 | |
| 
 | |
| /**
 | |
|  * G_PRIORITY_DEFAULT:
 | |
|  *
 | |
|  * Use this for default priority event sources.
 | |
|  *
 | |
|  * In GLib this priority is used when adding timeout functions
 | |
|  * with g_timeout_add(). In GDK this priority is used for events
 | |
|  * from the X server.
 | |
|  */
 | |
| #define G_PRIORITY_DEFAULT          0
 | |
| 
 | |
| /**
 | |
|  * G_PRIORITY_HIGH_IDLE:
 | |
|  *
 | |
|  * Use this for high priority idle functions.
 | |
|  *
 | |
|  * GTK+ uses #G_PRIORITY_HIGH_IDLE + 10 for resizing operations,
 | |
|  * and #G_PRIORITY_HIGH_IDLE + 20 for redrawing operations. (This is
 | |
|  * done to ensure that any pending resizes are processed before any
 | |
|  * pending redraws, so that widgets are not redrawn twice unnecessarily.)
 | |
|  */
 | |
| #define G_PRIORITY_HIGH_IDLE        100
 | |
| 
 | |
| /**
 | |
|  * G_PRIORITY_DEFAULT_IDLE:
 | |
|  *
 | |
|  * Use this for default priority idle functions.
 | |
|  *
 | |
|  * In GLib this priority is used when adding idle functions with
 | |
|  * g_idle_add().
 | |
|  */
 | |
| #define G_PRIORITY_DEFAULT_IDLE     200
 | |
| 
 | |
| /**
 | |
|  * G_PRIORITY_LOW:
 | |
|  *
 | |
|  * Use this for very low priority background tasks.
 | |
|  *
 | |
|  * It is not used within GLib or GTK+.
 | |
|  */
 | |
| #define G_PRIORITY_LOW              300
 | |
| 
 | |
| /**
 | |
|  * G_SOURCE_REMOVE:
 | |
|  *
 | |
|  * Use this macro as the return value of a #GSourceFunc to remove
 | |
|  * the #GSource from the main loop.
 | |
|  *
 | |
|  * Since: 2.32
 | |
|  */
 | |
| #define G_SOURCE_REMOVE         FALSE
 | |
| 
 | |
| /**
 | |
|  * G_SOURCE_CONTINUE:
 | |
|  *
 | |
|  * Use this macro as the return value of a #GSourceFunc to leave
 | |
|  * the #GSource in the main loop.
 | |
|  *
 | |
|  * Since: 2.32
 | |
|  */
 | |
| #define G_SOURCE_CONTINUE       TRUE
 | |
| 
 | |
| /* GMainContext: */
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GMainContext *g_main_context_new       (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GMainContext *g_main_context_ref       (GMainContext *context);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void          g_main_context_unref     (GMainContext *context);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GMainContext *g_main_context_default   (void);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean      g_main_context_iteration (GMainContext *context,
 | |
|                                         gboolean      may_block);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean      g_main_context_pending   (GMainContext *context);
 | |
| 
 | |
| /* For implementation of legacy interfaces
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSource      *g_main_context_find_source_by_id              (GMainContext *context,
 | |
|                                                              guint         source_id);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSource      *g_main_context_find_source_by_user_data       (GMainContext *context,
 | |
|                                                              gpointer      user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSource      *g_main_context_find_source_by_funcs_user_data (GMainContext *context,
 | |
|                                                              GSourceFuncs *funcs,
 | |
|                                                              gpointer      user_data);
 | |
| 
 | |
| /* Low level functions for implementing custom main loops.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_main_context_wakeup  (GMainContext *context);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_main_context_acquire (GMainContext *context);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_main_context_release (GMainContext *context);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_main_context_is_owner (GMainContext *context);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_main_context_wait    (GMainContext *context,
 | |
|                                  GCond        *cond,
 | |
|                                  GMutex       *mutex);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_main_context_prepare  (GMainContext *context,
 | |
|                                   gint         *priority);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint     g_main_context_query    (GMainContext *context,
 | |
|                                   gint          max_priority,
 | |
|                                   gint         *timeout_,
 | |
|                                   GPollFD      *fds,
 | |
|                                   gint          n_fds);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean     g_main_context_check    (GMainContext *context,
 | |
|                                       gint          max_priority,
 | |
|                                       GPollFD      *fds,
 | |
|                                       gint          n_fds);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_main_context_dispatch (GMainContext *context);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_main_context_set_poll_func (GMainContext *context,
 | |
|                                        GPollFunc     func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GPollFunc g_main_context_get_poll_func (GMainContext *context);
 | |
| 
 | |
| /* Low level functions for use by source implementations
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_main_context_add_poll    (GMainContext *context,
 | |
|                                      GPollFD      *fd,
 | |
|                                      gint          priority);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_main_context_remove_poll (GMainContext *context,
 | |
|                                      GPollFD      *fd);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint     g_main_depth               (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSource *g_main_current_source      (void);
 | |
| 
 | |
| /* GMainContexts for other threads
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void          g_main_context_push_thread_default (GMainContext *context);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void          g_main_context_pop_thread_default  (GMainContext *context);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GMainContext *g_main_context_get_thread_default  (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GMainContext *g_main_context_ref_thread_default  (void);
 | |
| 
 | |
| /* GMainLoop: */
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GMainLoop *g_main_loop_new        (GMainContext *context,
 | |
|                                    gboolean      is_running);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void       g_main_loop_run        (GMainLoop    *loop);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void       g_main_loop_quit       (GMainLoop    *loop);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GMainLoop *g_main_loop_ref        (GMainLoop    *loop);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void       g_main_loop_unref      (GMainLoop    *loop);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean   g_main_loop_is_running (GMainLoop    *loop);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GMainContext *g_main_loop_get_context (GMainLoop    *loop);
 | |
| 
 | |
| /* GSource: */
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSource *g_source_new             (GSourceFuncs   *source_funcs,
 | |
|                                    guint           struct_size);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSource *g_source_ref             (GSource        *source);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_source_unref           (GSource        *source);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_source_attach          (GSource        *source,
 | |
|                                    GMainContext   *context);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_source_destroy         (GSource        *source);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_source_set_priority    (GSource        *source,
 | |
|                                    gint            priority);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint     g_source_get_priority    (GSource        *source);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_source_set_can_recurse (GSource        *source,
 | |
|                                    gboolean        can_recurse);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_source_get_can_recurse (GSource        *source);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_source_get_id          (GSource        *source);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GMainContext *g_source_get_context (GSource       *source);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_source_set_callback    (GSource        *source,
 | |
|                                    GSourceFunc     func,
 | |
|                                    gpointer        data,
 | |
|                                    GDestroyNotify  notify);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_source_set_funcs       (GSource        *source,
 | |
|                                    GSourceFuncs   *funcs);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_source_is_destroyed    (GSource        *source);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                 g_source_set_name       (GSource        *source,
 | |
|                                               const char     *name);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const char *         g_source_get_name       (GSource        *source);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                 g_source_set_name_by_id (guint           tag,
 | |
|                                               const char     *name);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_36
 | |
| void                 g_source_set_ready_time (GSource        *source,
 | |
|                                               gint64          ready_time);
 | |
| GLIB_AVAILABLE_IN_2_36
 | |
| gint64               g_source_get_ready_time (GSource        *source);
 | |
| 
 | |
| #ifdef G_OS_UNIX
 | |
| GLIB_AVAILABLE_IN_2_36
 | |
| gpointer             g_source_add_unix_fd    (GSource        *source,
 | |
|                                               gint            fd,
 | |
|                                               GIOCondition    events);
 | |
| GLIB_AVAILABLE_IN_2_36
 | |
| void                 g_source_modify_unix_fd (GSource        *source,
 | |
|                                               gpointer        tag,
 | |
|                                               GIOCondition    new_events);
 | |
| GLIB_AVAILABLE_IN_2_36
 | |
| void                 g_source_remove_unix_fd (GSource        *source,
 | |
|                                               gpointer        tag);
 | |
| GLIB_AVAILABLE_IN_2_36
 | |
| GIOCondition         g_source_query_unix_fd  (GSource        *source,
 | |
|                                               gpointer        tag);
 | |
| #endif
 | |
| 
 | |
| /* Used to implement g_source_connect_closure and internally*/
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_source_set_callback_indirect (GSource              *source,
 | |
|                                      gpointer              callback_data,
 | |
|                                      GSourceCallbackFuncs *callback_funcs);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_source_add_poll            (GSource        *source,
 | |
| 				       GPollFD        *fd);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_source_remove_poll         (GSource        *source,
 | |
| 				       GPollFD        *fd);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_source_add_child_source    (GSource        *source,
 | |
| 				       GSource        *child_source);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_source_remove_child_source (GSource        *source,
 | |
| 				       GSource        *child_source);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_28_FOR(g_source_get_time)
 | |
| void     g_source_get_current_time (GSource        *source,
 | |
|                                     GTimeVal       *timeval);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint64   g_source_get_time         (GSource        *source);
 | |
| 
 | |
|  /* void g_source_connect_closure (GSource        *source,
 | |
|                                   GClosure       *closure);
 | |
|  */
 | |
| 
 | |
| /* Specific source types
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSource *g_idle_source_new        (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSource *g_child_watch_source_new (GPid pid);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSource *g_timeout_source_new     (guint interval);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSource *g_timeout_source_new_seconds (guint interval);
 | |
| 
 | |
| /* Miscellaneous functions
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void   g_get_current_time                 (GTimeVal       *result);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint64 g_get_monotonic_time               (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint64 g_get_real_time                    (void);
 | |
| 
 | |
| 
 | |
| /* Source manipulation by ID */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_source_remove                     (guint          tag);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_source_remove_by_user_data        (gpointer       user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_source_remove_by_funcs_user_data  (GSourceFuncs  *funcs,
 | |
|                                               gpointer       user_data);
 | |
| 
 | |
| /* Idles, child watchers and timeouts */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_timeout_add_full         (gint            priority,
 | |
|                                      guint           interval,
 | |
|                                      GSourceFunc     function,
 | |
|                                      gpointer        data,
 | |
|                                      GDestroyNotify  notify);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_timeout_add              (guint           interval,
 | |
|                                      GSourceFunc     function,
 | |
|                                      gpointer        data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_timeout_add_seconds_full (gint            priority,
 | |
|                                      guint           interval,
 | |
|                                      GSourceFunc     function,
 | |
|                                      gpointer        data,
 | |
|                                      GDestroyNotify  notify);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_timeout_add_seconds      (guint           interval,
 | |
|                                      GSourceFunc     function,
 | |
|                                      gpointer        data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_child_watch_add_full     (gint            priority,
 | |
|                                      GPid            pid,
 | |
|                                      GChildWatchFunc function,
 | |
|                                      gpointer        data,
 | |
|                                      GDestroyNotify  notify);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_child_watch_add          (GPid            pid,
 | |
|                                      GChildWatchFunc function,
 | |
|                                      gpointer        data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_idle_add                 (GSourceFunc     function,
 | |
|                                      gpointer        data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_idle_add_full            (gint            priority,
 | |
|                                      GSourceFunc     function,
 | |
|                                      gpointer        data,
 | |
|                                      GDestroyNotify  notify);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_idle_remove_by_data      (gpointer        data);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_main_context_invoke_full (GMainContext   *context,
 | |
|                                      gint            priority,
 | |
|                                      GSourceFunc     function,
 | |
|                                      gpointer        data,
 | |
|                                      GDestroyNotify  notify);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_main_context_invoke      (GMainContext   *context,
 | |
|                                      GSourceFunc     function,
 | |
|                                      gpointer        data);
 | |
| 
 | |
| /* Hook for GClosure / GSource integration. Don't touch */
 | |
| GLIB_VAR GSourceFuncs g_timeout_funcs;
 | |
| GLIB_VAR GSourceFuncs g_child_watch_funcs;
 | |
| GLIB_VAR GSourceFuncs g_idle_funcs;
 | |
| #ifdef G_OS_UNIX
 | |
| GLIB_VAR GSourceFuncs g_unix_signal_funcs;
 | |
| GLIB_VAR GSourceFuncs g_unix_fd_source_funcs;
 | |
| #endif
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_MAIN_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_STRING_H__
 | |
| #define __G_STRING_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| /* gunicode.h - Unicode manipulation functions
 | |
|  *
 | |
|  *  Copyright (C) 1999, 2000 Tom Tromey
 | |
|  *  Copyright 2000, 2005 Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public License
 | |
|  * along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_UNICODE_H__
 | |
| #define __G_UNICODE_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /**
 | |
|  * gunichar:
 | |
|  *
 | |
|  * A type which can hold any UTF-32 or UCS-4 character code,
 | |
|  * also known as a Unicode code point.
 | |
|  *
 | |
|  * If you want to produce the UTF-8 representation of a #gunichar,
 | |
|  * use g_ucs4_to_utf8(). See also g_utf8_to_ucs4() for the reverse
 | |
|  * process.
 | |
|  *
 | |
|  * To print/scan values of this type as integer, use
 | |
|  * %G_GINT32_MODIFIER and/or %G_GUINT32_FORMAT.
 | |
|  *
 | |
|  * The notation to express a Unicode code point in running text is
 | |
|  * as a hexadecimal number with four to six digits and uppercase
 | |
|  * letters, prefixed by the string "U+". Leading zeros are omitted,
 | |
|  * unless the code point would have fewer than four hexadecimal digits.
 | |
|  * For example, "U+0041 LATIN CAPITAL LETTER A". To print a code point
 | |
|  * in the U+-notation, use the format string "U+\%04"G_GINT32_FORMAT"X".
 | |
|  * To scan, use the format string "U+\%06"G_GINT32_FORMAT"X".
 | |
|  *
 | |
|  * |[
 | |
|  * gunichar c;
 | |
|  * sscanf ("U+0041", "U+%06"G_GINT32_FORMAT"X", &c)
 | |
|  * g_print ("Read U+%04"G_GINT32_FORMAT"X", c);
 | |
|  * ]|
 | |
|  */
 | |
| typedef guint32 gunichar;
 | |
| 
 | |
| /**
 | |
|  * gunichar2:
 | |
|  *
 | |
|  * A type which can hold any UTF-16 code
 | |
|  * point<footnote id="utf16_surrogate_pairs">UTF-16 also has so called
 | |
|  * <firstterm>surrogate pairs</firstterm> to encode characters beyond
 | |
|  * the BMP as pairs of 16bit numbers. Surrogate pairs cannot be stored
 | |
|  * in a single gunichar2 field, but all GLib functions accepting gunichar2
 | |
|  * arrays will correctly interpret surrogate pairs.</footnote>.
 | |
|  *
 | |
|  * To print/scan values of this type to/from text you need to convert
 | |
|  * to/from UTF-8, using g_utf16_to_utf8()/g_utf8_to_utf16().
 | |
|  *
 | |
|  * To print/scan values of this type as integer, use
 | |
|  * %G_GINT16_MODIFIER and/or %G_GUINT16_FORMAT.
 | |
|  */
 | |
| typedef guint16 gunichar2;
 | |
| 
 | |
| /**
 | |
|  * GUnicodeType:
 | |
|  * @G_UNICODE_CONTROL: General category "Other, Control" (Cc)
 | |
|  * @G_UNICODE_FORMAT: General category "Other, Format" (Cf)
 | |
|  * @G_UNICODE_UNASSIGNED: General category "Other, Not Assigned" (Cn)
 | |
|  * @G_UNICODE_PRIVATE_USE: General category "Other, Private Use" (Co)
 | |
|  * @G_UNICODE_SURROGATE: General category "Other, Surrogate" (Cs)
 | |
|  * @G_UNICODE_LOWERCASE_LETTER: General category "Letter, Lowercase" (Ll)
 | |
|  * @G_UNICODE_MODIFIER_LETTER: General category "Letter, Modifier" (Lm)
 | |
|  * @G_UNICODE_OTHER_LETTER: General category "Letter, Other" (Lo)
 | |
|  * @G_UNICODE_TITLECASE_LETTER: General category "Letter, Titlecase" (Lt)
 | |
|  * @G_UNICODE_UPPERCASE_LETTER: General category "Letter, Uppercase" (Lu)
 | |
|  * @G_UNICODE_SPACING_MARK: General category "Mark, Spacing" (Mc)
 | |
|  * @G_UNICODE_ENCLOSING_MARK: General category "Mark, Enclosing" (Me)
 | |
|  * @G_UNICODE_NON_SPACING_MARK: General category "Mark, Nonspacing" (Mn)
 | |
|  * @G_UNICODE_DECIMAL_NUMBER: General category "Number, Decimal Digit" (Nd)
 | |
|  * @G_UNICODE_LETTER_NUMBER: General category "Number, Letter" (Nl)
 | |
|  * @G_UNICODE_OTHER_NUMBER: General category "Number, Other" (No)
 | |
|  * @G_UNICODE_CONNECT_PUNCTUATION: General category "Punctuation, Connector" (Pc)
 | |
|  * @G_UNICODE_DASH_PUNCTUATION: General category "Punctuation, Dash" (Pd)
 | |
|  * @G_UNICODE_CLOSE_PUNCTUATION: General category "Punctuation, Close" (Pe)
 | |
|  * @G_UNICODE_FINAL_PUNCTUATION: General category "Punctuation, Final quote" (Pf)
 | |
|  * @G_UNICODE_INITIAL_PUNCTUATION: General category "Punctuation, Initial quote" (Pi)
 | |
|  * @G_UNICODE_OTHER_PUNCTUATION: General category "Punctuation, Other" (Po)
 | |
|  * @G_UNICODE_OPEN_PUNCTUATION: General category "Punctuation, Open" (Ps)
 | |
|  * @G_UNICODE_CURRENCY_SYMBOL: General category "Symbol, Currency" (Sc)
 | |
|  * @G_UNICODE_MODIFIER_SYMBOL: General category "Symbol, Modifier" (Sk)
 | |
|  * @G_UNICODE_MATH_SYMBOL: General category "Symbol, Math" (Sm)
 | |
|  * @G_UNICODE_OTHER_SYMBOL: General category "Symbol, Other" (So)
 | |
|  * @G_UNICODE_LINE_SEPARATOR: General category "Separator, Line" (Zl)
 | |
|  * @G_UNICODE_PARAGRAPH_SEPARATOR: General category "Separator, Paragraph" (Zp)
 | |
|  * @G_UNICODE_SPACE_SEPARATOR: General category "Separator, Space" (Zs)
 | |
|  *
 | |
|  * These are the possible character classifications from the
 | |
|  * Unicode specification.
 | |
|  * See <ulink url="http://www.unicode.org/reports/tr44/#General_Category_Values">Unicode Character Database</unlink>.
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_UNICODE_CONTROL,
 | |
|   G_UNICODE_FORMAT,
 | |
|   G_UNICODE_UNASSIGNED,
 | |
|   G_UNICODE_PRIVATE_USE,
 | |
|   G_UNICODE_SURROGATE,
 | |
|   G_UNICODE_LOWERCASE_LETTER,
 | |
|   G_UNICODE_MODIFIER_LETTER,
 | |
|   G_UNICODE_OTHER_LETTER,
 | |
|   G_UNICODE_TITLECASE_LETTER,
 | |
|   G_UNICODE_UPPERCASE_LETTER,
 | |
|   G_UNICODE_SPACING_MARK,
 | |
|   G_UNICODE_ENCLOSING_MARK,
 | |
|   G_UNICODE_NON_SPACING_MARK,
 | |
|   G_UNICODE_DECIMAL_NUMBER,
 | |
|   G_UNICODE_LETTER_NUMBER,
 | |
|   G_UNICODE_OTHER_NUMBER,
 | |
|   G_UNICODE_CONNECT_PUNCTUATION,
 | |
|   G_UNICODE_DASH_PUNCTUATION,
 | |
|   G_UNICODE_CLOSE_PUNCTUATION,
 | |
|   G_UNICODE_FINAL_PUNCTUATION,
 | |
|   G_UNICODE_INITIAL_PUNCTUATION,
 | |
|   G_UNICODE_OTHER_PUNCTUATION,
 | |
|   G_UNICODE_OPEN_PUNCTUATION,
 | |
|   G_UNICODE_CURRENCY_SYMBOL,
 | |
|   G_UNICODE_MODIFIER_SYMBOL,
 | |
|   G_UNICODE_MATH_SYMBOL,
 | |
|   G_UNICODE_OTHER_SYMBOL,
 | |
|   G_UNICODE_LINE_SEPARATOR,
 | |
|   G_UNICODE_PARAGRAPH_SEPARATOR,
 | |
|   G_UNICODE_SPACE_SEPARATOR
 | |
| } GUnicodeType;
 | |
| 
 | |
| /**
 | |
|  * G_UNICODE_COMBINING_MARK:
 | |
|  *
 | |
|  * Older name for %G_UNICODE_SPACING_MARK.
 | |
|  *
 | |
|  * Deprecated: 2.30: Use %G_UNICODE_SPACING_MARK.
 | |
|  */
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
| #define G_UNICODE_COMBINING_MARK G_UNICODE_SPACING_MARK
 | |
| #endif
 | |
| 
 | |
| /**
 | |
|  * GUnicodeBreakType:
 | |
|  * @G_UNICODE_BREAK_MANDATORY: Mandatory Break (BK)
 | |
|  * @G_UNICODE_BREAK_CARRIAGE_RETURN: Carriage Return (CR)
 | |
|  * @G_UNICODE_BREAK_LINE_FEED: Line Feed (LF)
 | |
|  * @G_UNICODE_BREAK_COMBINING_MARK: Attached Characters and Combining Marks (CM)
 | |
|  * @G_UNICODE_BREAK_SURROGATE: Surrogates (SG)
 | |
|  * @G_UNICODE_BREAK_ZERO_WIDTH_SPACE: Zero Width Space (ZW)
 | |
|  * @G_UNICODE_BREAK_INSEPARABLE: Inseparable (IN)
 | |
|  * @G_UNICODE_BREAK_NON_BREAKING_GLUE: Non-breaking ("Glue") (GL)
 | |
|  * @G_UNICODE_BREAK_CONTINGENT: Contingent Break Opportunity (CB)
 | |
|  * @G_UNICODE_BREAK_SPACE: Space (SP)
 | |
|  * @G_UNICODE_BREAK_AFTER: Break Opportunity After (BA)
 | |
|  * @G_UNICODE_BREAK_BEFORE: Break Opportunity Before (BB)
 | |
|  * @G_UNICODE_BREAK_BEFORE_AND_AFTER: Break Opportunity Before and After (B2)
 | |
|  * @G_UNICODE_BREAK_HYPHEN: Hyphen (HY)
 | |
|  * @G_UNICODE_BREAK_NON_STARTER: Nonstarter (NS)
 | |
|  * @G_UNICODE_BREAK_OPEN_PUNCTUATION: Opening Punctuation (OP)
 | |
|  * @G_UNICODE_BREAK_CLOSE_PUNCTUATION: Closing Punctuation (CL)
 | |
|  * @G_UNICODE_BREAK_QUOTATION: Ambiguous Quotation (QU)
 | |
|  * @G_UNICODE_BREAK_EXCLAMATION: Exclamation/Interrogation (EX)
 | |
|  * @G_UNICODE_BREAK_IDEOGRAPHIC: Ideographic (ID)
 | |
|  * @G_UNICODE_BREAK_NUMERIC: Numeric (NU)
 | |
|  * @G_UNICODE_BREAK_INFIX_SEPARATOR: Infix Separator (Numeric) (IS)
 | |
|  * @G_UNICODE_BREAK_SYMBOL: Symbols Allowing Break After (SY)
 | |
|  * @G_UNICODE_BREAK_ALPHABETIC: Ordinary Alphabetic and Symbol Characters (AL)
 | |
|  * @G_UNICODE_BREAK_PREFIX: Prefix (Numeric) (PR)
 | |
|  * @G_UNICODE_BREAK_POSTFIX: Postfix (Numeric) (PO)
 | |
|  * @G_UNICODE_BREAK_COMPLEX_CONTEXT: Complex Content Dependent (South East Asian) (SA)
 | |
|  * @G_UNICODE_BREAK_AMBIGUOUS: Ambiguous (Alphabetic or Ideographic) (AI)
 | |
|  * @G_UNICODE_BREAK_UNKNOWN: Unknown (XX)
 | |
|  * @G_UNICODE_BREAK_NEXT_LINE: Next Line (NL)
 | |
|  * @G_UNICODE_BREAK_WORD_JOINER: Word Joiner (WJ)
 | |
|  * @G_UNICODE_BREAK_HANGUL_L_JAMO: Hangul L Jamo (JL)
 | |
|  * @G_UNICODE_BREAK_HANGUL_V_JAMO: Hangul V Jamo (JV)
 | |
|  * @G_UNICODE_BREAK_HANGUL_T_JAMO: Hangul T Jamo (JT)
 | |
|  * @G_UNICODE_BREAK_HANGUL_LV_SYLLABLE: Hangul LV Syllable (H2)
 | |
|  * @G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE: Hangul LVT Syllable (H3)
 | |
|  * @G_UNICODE_BREAK_CLOSE_PARANTHESIS: Closing Parenthesis (CP). Since 2.28
 | |
|  * @G_UNICODE_BREAK_CONDITIONAL_JAPANESE_STARTER: Conditional Japanese Starter (CJ). Since: 2.32
 | |
|  * @G_UNICODE_BREAK_HEBREW_LETTER: Hebrew Letter (HL). Since: 2.32
 | |
|  * @G_UNICODE_BREAK_REGIONAL_INDICATOR: Regional Indicator (RI). Since: 2.36
 | |
|  * @G_UNICODE_BREAK_EMOJI_BASE: Emoji Base (EB). Since: 2.50
 | |
|  * @G_UNICODE_BREAK_EMOJI_MODIFIER: Emoji Modifier (EM). Since: 2.50
 | |
|  * @G_UNICODE_BREAK_ZERO_WIDTH_JOINER: Zero Width Joiner (ZWJ). Since: 2.50
 | |
|  *
 | |
|  * These are the possible line break classifications.
 | |
|  *
 | |
|  * Since new unicode versions may add new types here, applications should be ready 
 | |
|  * to handle unknown values. They may be regarded as %G_UNICODE_BREAK_UNKNOWN.
 | |
|  *
 | |
|  * See <ulink url="http://www.unicode.org/unicode/reports/tr14/">http://www.unicode.org/unicode/reports/tr14/</ulink>.
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_UNICODE_BREAK_MANDATORY,
 | |
|   G_UNICODE_BREAK_CARRIAGE_RETURN,
 | |
|   G_UNICODE_BREAK_LINE_FEED,
 | |
|   G_UNICODE_BREAK_COMBINING_MARK,
 | |
|   G_UNICODE_BREAK_SURROGATE,
 | |
|   G_UNICODE_BREAK_ZERO_WIDTH_SPACE,
 | |
|   G_UNICODE_BREAK_INSEPARABLE,
 | |
|   G_UNICODE_BREAK_NON_BREAKING_GLUE,
 | |
|   G_UNICODE_BREAK_CONTINGENT,
 | |
|   G_UNICODE_BREAK_SPACE,
 | |
|   G_UNICODE_BREAK_AFTER,
 | |
|   G_UNICODE_BREAK_BEFORE,
 | |
|   G_UNICODE_BREAK_BEFORE_AND_AFTER,
 | |
|   G_UNICODE_BREAK_HYPHEN,
 | |
|   G_UNICODE_BREAK_NON_STARTER,
 | |
|   G_UNICODE_BREAK_OPEN_PUNCTUATION,
 | |
|   G_UNICODE_BREAK_CLOSE_PUNCTUATION,
 | |
|   G_UNICODE_BREAK_QUOTATION,
 | |
|   G_UNICODE_BREAK_EXCLAMATION,
 | |
|   G_UNICODE_BREAK_IDEOGRAPHIC,
 | |
|   G_UNICODE_BREAK_NUMERIC,
 | |
|   G_UNICODE_BREAK_INFIX_SEPARATOR,
 | |
|   G_UNICODE_BREAK_SYMBOL,
 | |
|   G_UNICODE_BREAK_ALPHABETIC,
 | |
|   G_UNICODE_BREAK_PREFIX,
 | |
|   G_UNICODE_BREAK_POSTFIX,
 | |
|   G_UNICODE_BREAK_COMPLEX_CONTEXT,
 | |
|   G_UNICODE_BREAK_AMBIGUOUS,
 | |
|   G_UNICODE_BREAK_UNKNOWN,
 | |
|   G_UNICODE_BREAK_NEXT_LINE,
 | |
|   G_UNICODE_BREAK_WORD_JOINER,
 | |
|   G_UNICODE_BREAK_HANGUL_L_JAMO,
 | |
|   G_UNICODE_BREAK_HANGUL_V_JAMO,
 | |
|   G_UNICODE_BREAK_HANGUL_T_JAMO,
 | |
|   G_UNICODE_BREAK_HANGUL_LV_SYLLABLE,
 | |
|   G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE,
 | |
|   G_UNICODE_BREAK_CLOSE_PARANTHESIS,
 | |
|   G_UNICODE_BREAK_CONDITIONAL_JAPANESE_STARTER,
 | |
|   G_UNICODE_BREAK_HEBREW_LETTER,
 | |
|   G_UNICODE_BREAK_REGIONAL_INDICATOR,
 | |
|   G_UNICODE_BREAK_EMOJI_BASE,
 | |
|   G_UNICODE_BREAK_EMOJI_MODIFIER,
 | |
|   G_UNICODE_BREAK_ZERO_WIDTH_JOINER
 | |
| } GUnicodeBreakType;
 | |
| 
 | |
| /**
 | |
|  * GUnicodeScript:
 | |
|  * @G_UNICODE_SCRIPT_INVALID_CODE:
 | |
|  *                               a value never returned from g_unichar_get_script()
 | |
|  * @G_UNICODE_SCRIPT_COMMON:     a character used by multiple different scripts
 | |
|  * @G_UNICODE_SCRIPT_INHERITED:  a mark glyph that takes its script from the
 | |
|  *                               base glyph to which it is attached
 | |
|  * @G_UNICODE_SCRIPT_ARABIC:     Arabic
 | |
|  * @G_UNICODE_SCRIPT_ARMENIAN:   Armenian
 | |
|  * @G_UNICODE_SCRIPT_BENGALI:    Bengali
 | |
|  * @G_UNICODE_SCRIPT_BOPOMOFO:   Bopomofo
 | |
|  * @G_UNICODE_SCRIPT_CHEROKEE:   Cherokee
 | |
|  * @G_UNICODE_SCRIPT_COPTIC:     Coptic
 | |
|  * @G_UNICODE_SCRIPT_CYRILLIC:   Cyrillic
 | |
|  * @G_UNICODE_SCRIPT_DESERET:    Deseret
 | |
|  * @G_UNICODE_SCRIPT_DEVANAGARI: Devanagari
 | |
|  * @G_UNICODE_SCRIPT_ETHIOPIC:   Ethiopic
 | |
|  * @G_UNICODE_SCRIPT_GEORGIAN:   Georgian
 | |
|  * @G_UNICODE_SCRIPT_GOTHIC:     Gothic
 | |
|  * @G_UNICODE_SCRIPT_GREEK:      Greek
 | |
|  * @G_UNICODE_SCRIPT_GUJARATI:   Gujarati
 | |
|  * @G_UNICODE_SCRIPT_GURMUKHI:   Gurmukhi
 | |
|  * @G_UNICODE_SCRIPT_HAN:        Han
 | |
|  * @G_UNICODE_SCRIPT_HANGUL:     Hangul
 | |
|  * @G_UNICODE_SCRIPT_HEBREW:     Hebrew
 | |
|  * @G_UNICODE_SCRIPT_HIRAGANA:   Hiragana
 | |
|  * @G_UNICODE_SCRIPT_KANNADA:    Kannada
 | |
|  * @G_UNICODE_SCRIPT_KATAKANA:   Katakana
 | |
|  * @G_UNICODE_SCRIPT_KHMER:      Khmer
 | |
|  * @G_UNICODE_SCRIPT_LAO:        Lao
 | |
|  * @G_UNICODE_SCRIPT_LATIN:      Latin
 | |
|  * @G_UNICODE_SCRIPT_MALAYALAM:  Malayalam
 | |
|  * @G_UNICODE_SCRIPT_MONGOLIAN:  Mongolian
 | |
|  * @G_UNICODE_SCRIPT_MYANMAR:    Myanmar
 | |
|  * @G_UNICODE_SCRIPT_OGHAM:      Ogham
 | |
|  * @G_UNICODE_SCRIPT_OLD_ITALIC: Old Italic
 | |
|  * @G_UNICODE_SCRIPT_ORIYA:      Oriya
 | |
|  * @G_UNICODE_SCRIPT_RUNIC:      Runic
 | |
|  * @G_UNICODE_SCRIPT_SINHALA:    Sinhala
 | |
|  * @G_UNICODE_SCRIPT_SYRIAC:     Syriac
 | |
|  * @G_UNICODE_SCRIPT_TAMIL:      Tamil
 | |
|  * @G_UNICODE_SCRIPT_TELUGU:     Telugu
 | |
|  * @G_UNICODE_SCRIPT_THAANA:     Thaana
 | |
|  * @G_UNICODE_SCRIPT_THAI:       Thai
 | |
|  * @G_UNICODE_SCRIPT_TIBETAN:    Tibetan
 | |
|  * @G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL:
 | |
|  *                               Canadian Aboriginal
 | |
|  * @G_UNICODE_SCRIPT_YI:         Yi
 | |
|  * @G_UNICODE_SCRIPT_TAGALOG:    Tagalog
 | |
|  * @G_UNICODE_SCRIPT_HANUNOO:    Hanunoo
 | |
|  * @G_UNICODE_SCRIPT_BUHID:      Buhid
 | |
|  * @G_UNICODE_SCRIPT_TAGBANWA:   Tagbanwa
 | |
|  * @G_UNICODE_SCRIPT_BRAILLE:    Braille
 | |
|  * @G_UNICODE_SCRIPT_CYPRIOT:    Cypriot
 | |
|  * @G_UNICODE_SCRIPT_LIMBU:      Limbu
 | |
|  * @G_UNICODE_SCRIPT_OSMANYA:    Osmanya
 | |
|  * @G_UNICODE_SCRIPT_SHAVIAN:    Shavian
 | |
|  * @G_UNICODE_SCRIPT_LINEAR_B:   Linear B
 | |
|  * @G_UNICODE_SCRIPT_TAI_LE:     Tai Le
 | |
|  * @G_UNICODE_SCRIPT_UGARITIC:   Ugaritic
 | |
|  * @G_UNICODE_SCRIPT_NEW_TAI_LUE:
 | |
|  *                               New Tai Lue
 | |
|  * @G_UNICODE_SCRIPT_BUGINESE:   Buginese
 | |
|  * @G_UNICODE_SCRIPT_GLAGOLITIC: Glagolitic
 | |
|  * @G_UNICODE_SCRIPT_TIFINAGH:   Tifinagh
 | |
|  * @G_UNICODE_SCRIPT_SYLOTI_NAGRI:
 | |
|  *                               Syloti Nagri
 | |
|  * @G_UNICODE_SCRIPT_OLD_PERSIAN:
 | |
|  *                               Old Persian
 | |
|  * @G_UNICODE_SCRIPT_KHAROSHTHI: Kharoshthi
 | |
|  * @G_UNICODE_SCRIPT_UNKNOWN:    an unassigned code point
 | |
|  * @G_UNICODE_SCRIPT_BALINESE:   Balinese
 | |
|  * @G_UNICODE_SCRIPT_CUNEIFORM:  Cuneiform
 | |
|  * @G_UNICODE_SCRIPT_PHOENICIAN: Phoenician
 | |
|  * @G_UNICODE_SCRIPT_PHAGS_PA:   Phags-pa
 | |
|  * @G_UNICODE_SCRIPT_NKO:        N'Ko
 | |
|  * @G_UNICODE_SCRIPT_KAYAH_LI:   Kayah Li. Since 2.16.3
 | |
|  * @G_UNICODE_SCRIPT_LEPCHA:     Lepcha. Since 2.16.3
 | |
|  * @G_UNICODE_SCRIPT_REJANG:     Rejang. Since 2.16.3
 | |
|  * @G_UNICODE_SCRIPT_SUNDANESE:  Sundanese. Since 2.16.3
 | |
|  * @G_UNICODE_SCRIPT_SAURASHTRA: Saurashtra. Since 2.16.3
 | |
|  * @G_UNICODE_SCRIPT_CHAM:       Cham. Since 2.16.3
 | |
|  * @G_UNICODE_SCRIPT_OL_CHIKI:   Ol Chiki. Since 2.16.3
 | |
|  * @G_UNICODE_SCRIPT_VAI:        Vai. Since 2.16.3
 | |
|  * @G_UNICODE_SCRIPT_CARIAN:     Carian. Since 2.16.3
 | |
|  * @G_UNICODE_SCRIPT_LYCIAN:     Lycian. Since 2.16.3
 | |
|  * @G_UNICODE_SCRIPT_LYDIAN:     Lydian. Since 2.16.3
 | |
|  * @G_UNICODE_SCRIPT_AVESTAN:    Avestan. Since 2.26
 | |
|  * @G_UNICODE_SCRIPT_BAMUM:      Bamum. Since 2.26
 | |
|  * @G_UNICODE_SCRIPT_EGYPTIAN_HIEROGLYPHS:
 | |
|  *                               Egyptian Hieroglpyhs. Since 2.26
 | |
|  * @G_UNICODE_SCRIPT_IMPERIAL_ARAMAIC:
 | |
|  *                               Imperial Aramaic. Since 2.26
 | |
|  * @G_UNICODE_SCRIPT_INSCRIPTIONAL_PAHLAVI:
 | |
|  *                               Inscriptional Pahlavi. Since 2.26
 | |
|  * @G_UNICODE_SCRIPT_INSCRIPTIONAL_PARTHIAN:
 | |
|  *                               Inscriptional Parthian. Since 2.26
 | |
|  * @G_UNICODE_SCRIPT_JAVANESE:   Javanese. Since 2.26
 | |
|  * @G_UNICODE_SCRIPT_KAITHI:     Kaithi. Since 2.26
 | |
|  * @G_UNICODE_SCRIPT_LISU:       Lisu. Since 2.26
 | |
|  * @G_UNICODE_SCRIPT_MEETEI_MAYEK:
 | |
|  *                               Meetei Mayek. Since 2.26
 | |
|  * @G_UNICODE_SCRIPT_OLD_SOUTH_ARABIAN:
 | |
|  *                               Old South Arabian. Since 2.26
 | |
|  * @G_UNICODE_SCRIPT_OLD_TURKIC: Old Turkic. Since 2.28
 | |
|  * @G_UNICODE_SCRIPT_SAMARITAN:  Samaritan. Since 2.26
 | |
|  * @G_UNICODE_SCRIPT_TAI_THAM:   Tai Tham. Since 2.26
 | |
|  * @G_UNICODE_SCRIPT_TAI_VIET:   Tai Viet. Since 2.26
 | |
|  * @G_UNICODE_SCRIPT_BATAK:      Batak. Since 2.28
 | |
|  * @G_UNICODE_SCRIPT_BRAHMI:     Brahmi. Since 2.28
 | |
|  * @G_UNICODE_SCRIPT_MANDAIC:    Mandaic. Since 2.28
 | |
|  * @G_UNICODE_SCRIPT_CHAKMA:               Chakma. Since: 2.32
 | |
|  * @G_UNICODE_SCRIPT_MEROITIC_CURSIVE:     Meroitic Cursive. Since: 2.32
 | |
|  * @G_UNICODE_SCRIPT_MEROITIC_HIEROGLYPHS: Meroitic Hieroglyphs. Since: 2.32
 | |
|  * @G_UNICODE_SCRIPT_MIAO:                 Miao. Since: 2.32
 | |
|  * @G_UNICODE_SCRIPT_SHARADA:              Sharada. Since: 2.32
 | |
|  * @G_UNICODE_SCRIPT_SORA_SOMPENG:         Sora Sompeng. Since: 2.32
 | |
|  * @G_UNICODE_SCRIPT_TAKRI:                Takri. Since: 2.32
 | |
|  * @G_UNICODE_SCRIPT_BASSA_VAH:            Bassa. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_CAUCASIAN_ALBANIAN:   Caucasian Albanian. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_DUPLOYAN:             Duployan. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_ELBASAN:              Elbasan. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_GRANTHA:              Grantha. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_KHOJKI:               Kjohki. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_KHUDAWADI:            Khudawadi, Sindhi. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_LINEAR_A:             Linear A. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_MAHAJANI:             Mahajani. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_MANICHAEAN:           Manichaean. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_MENDE_KIKAKUI:        Mende Kikakui. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_MODI:                 Modi. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_MRO:                  Mro. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_NABATAEAN:            Nabataean. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_OLD_NORTH_ARABIAN:    Old North Arabian. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_OLD_PERMIC:           Old Permic. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_PAHAWH_HMONG:         Pahawh Hmong. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_PALMYRENE:            Palmyrene. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_PAU_CIN_HAU:          Pau Cin Hau. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_PSALTER_PAHLAVI:      Psalter Pahlavi. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_SIDDHAM:              Siddham. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_TIRHUTA:              Tirhuta. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_WARANG_CITI:          Warang Citi. Since: 2.42
 | |
|  * @G_UNICODE_SCRIPT_AHOM:                 Ahom. Since: 2.48
 | |
|  * @G_UNICODE_SCRIPT_ANATOLIAN_HIEROGLYPHS: Anatolian Hieroglyphs. Since: 2.48
 | |
|  * @G_UNICODE_SCRIPT_HATRAN:               Hatran. Since: 2.48
 | |
|  * @G_UNICODE_SCRIPT_MULTANI:              Multani. Since: 2.48
 | |
|  * @G_UNICODE_SCRIPT_OLD_HUNGARIAN:        Old Hungarian. Since: 2.48
 | |
|  * @G_UNICODE_SCRIPT_SIGNWRITING:          Signwriting. Since: 2.48
 | |
|  * @G_UNICODE_SCRIPT_ADLAM:                Adlam. Since: 2.50
 | |
|  * @G_UNICODE_SCRIPT_BHAIKSUKI:            Bhaiksuki. Since: 2.50
 | |
|  * @G_UNICODE_SCRIPT_MARCHEN:              Marchen. Since: 2.50
 | |
|  * @G_UNICODE_SCRIPT_NEWA:                 Newa. Since: 2.50
 | |
|  * @G_UNICODE_SCRIPT_OSAGE:                Osage. Since: 2.50
 | |
|  * @G_UNICODE_SCRIPT_TANGUT:               Tangut. Since: 2.50
 | |
|  *
 | |
|  * The #GUnicodeScript enumeration identifies different writing
 | |
|  * systems. The values correspond to the names as defined in the
 | |
|  * Unicode standard. The enumeration has been added in GLib 2.14,
 | |
|  * and is interchangeable with #PangoScript.
 | |
|  *
 | |
|  * Note that new types may be added in the future. Applications
 | |
|  * should be ready to handle unknown values.
 | |
|  * See <ulink
 | |
|  * url="http://www.unicode.org/reports/tr24/">Unicode Standard Annex
 | |
|  * #24: Script names</ulink>.
 | |
|  */
 | |
| typedef enum
 | |
| {                         /* ISO 15924 code */
 | |
|   G_UNICODE_SCRIPT_INVALID_CODE = -1,
 | |
|   G_UNICODE_SCRIPT_COMMON       = 0,   /* Zyyy */
 | |
|   G_UNICODE_SCRIPT_INHERITED,          /* Zinh (Qaai) */
 | |
|   G_UNICODE_SCRIPT_ARABIC,             /* Arab */
 | |
|   G_UNICODE_SCRIPT_ARMENIAN,           /* Armn */
 | |
|   G_UNICODE_SCRIPT_BENGALI,            /* Beng */
 | |
|   G_UNICODE_SCRIPT_BOPOMOFO,           /* Bopo */
 | |
|   G_UNICODE_SCRIPT_CHEROKEE,           /* Cher */
 | |
|   G_UNICODE_SCRIPT_COPTIC,             /* Copt (Qaac) */
 | |
|   G_UNICODE_SCRIPT_CYRILLIC,           /* Cyrl (Cyrs) */
 | |
|   G_UNICODE_SCRIPT_DESERET,            /* Dsrt */
 | |
|   G_UNICODE_SCRIPT_DEVANAGARI,         /* Deva */
 | |
|   G_UNICODE_SCRIPT_ETHIOPIC,           /* Ethi */
 | |
|   G_UNICODE_SCRIPT_GEORGIAN,           /* Geor (Geon, Geoa) */
 | |
|   G_UNICODE_SCRIPT_GOTHIC,             /* Goth */
 | |
|   G_UNICODE_SCRIPT_GREEK,              /* Grek */
 | |
|   G_UNICODE_SCRIPT_GUJARATI,           /* Gujr */
 | |
|   G_UNICODE_SCRIPT_GURMUKHI,           /* Guru */
 | |
|   G_UNICODE_SCRIPT_HAN,                /* Hani */
 | |
|   G_UNICODE_SCRIPT_HANGUL,             /* Hang */
 | |
|   G_UNICODE_SCRIPT_HEBREW,             /* Hebr */
 | |
|   G_UNICODE_SCRIPT_HIRAGANA,           /* Hira */
 | |
|   G_UNICODE_SCRIPT_KANNADA,            /* Knda */
 | |
|   G_UNICODE_SCRIPT_KATAKANA,           /* Kana */
 | |
|   G_UNICODE_SCRIPT_KHMER,              /* Khmr */
 | |
|   G_UNICODE_SCRIPT_LAO,                /* Laoo */
 | |
|   G_UNICODE_SCRIPT_LATIN,              /* Latn (Latf, Latg) */
 | |
|   G_UNICODE_SCRIPT_MALAYALAM,          /* Mlym */
 | |
|   G_UNICODE_SCRIPT_MONGOLIAN,          /* Mong */
 | |
|   G_UNICODE_SCRIPT_MYANMAR,            /* Mymr */
 | |
|   G_UNICODE_SCRIPT_OGHAM,              /* Ogam */
 | |
|   G_UNICODE_SCRIPT_OLD_ITALIC,         /* Ital */
 | |
|   G_UNICODE_SCRIPT_ORIYA,              /* Orya */
 | |
|   G_UNICODE_SCRIPT_RUNIC,              /* Runr */
 | |
|   G_UNICODE_SCRIPT_SINHALA,            /* Sinh */
 | |
|   G_UNICODE_SCRIPT_SYRIAC,             /* Syrc (Syrj, Syrn, Syre) */
 | |
|   G_UNICODE_SCRIPT_TAMIL,              /* Taml */
 | |
|   G_UNICODE_SCRIPT_TELUGU,             /* Telu */
 | |
|   G_UNICODE_SCRIPT_THAANA,             /* Thaa */
 | |
|   G_UNICODE_SCRIPT_THAI,               /* Thai */
 | |
|   G_UNICODE_SCRIPT_TIBETAN,            /* Tibt */
 | |
|   G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL, /* Cans */
 | |
|   G_UNICODE_SCRIPT_YI,                 /* Yiii */
 | |
|   G_UNICODE_SCRIPT_TAGALOG,            /* Tglg */
 | |
|   G_UNICODE_SCRIPT_HANUNOO,            /* Hano */
 | |
|   G_UNICODE_SCRIPT_BUHID,              /* Buhd */
 | |
|   G_UNICODE_SCRIPT_TAGBANWA,           /* Tagb */
 | |
| 
 | |
|   /* Unicode-4.0 additions */
 | |
|   G_UNICODE_SCRIPT_BRAILLE,            /* Brai */
 | |
|   G_UNICODE_SCRIPT_CYPRIOT,            /* Cprt */
 | |
|   G_UNICODE_SCRIPT_LIMBU,              /* Limb */
 | |
|   G_UNICODE_SCRIPT_OSMANYA,            /* Osma */
 | |
|   G_UNICODE_SCRIPT_SHAVIAN,            /* Shaw */
 | |
|   G_UNICODE_SCRIPT_LINEAR_B,           /* Linb */
 | |
|   G_UNICODE_SCRIPT_TAI_LE,             /* Tale */
 | |
|   G_UNICODE_SCRIPT_UGARITIC,           /* Ugar */
 | |
| 
 | |
|   /* Unicode-4.1 additions */
 | |
|   G_UNICODE_SCRIPT_NEW_TAI_LUE,        /* Talu */
 | |
|   G_UNICODE_SCRIPT_BUGINESE,           /* Bugi */
 | |
|   G_UNICODE_SCRIPT_GLAGOLITIC,         /* Glag */
 | |
|   G_UNICODE_SCRIPT_TIFINAGH,           /* Tfng */
 | |
|   G_UNICODE_SCRIPT_SYLOTI_NAGRI,       /* Sylo */
 | |
|   G_UNICODE_SCRIPT_OLD_PERSIAN,        /* Xpeo */
 | |
|   G_UNICODE_SCRIPT_KHAROSHTHI,         /* Khar */
 | |
| 
 | |
|   /* Unicode-5.0 additions */
 | |
|   G_UNICODE_SCRIPT_UNKNOWN,            /* Zzzz */
 | |
|   G_UNICODE_SCRIPT_BALINESE,           /* Bali */
 | |
|   G_UNICODE_SCRIPT_CUNEIFORM,          /* Xsux */
 | |
|   G_UNICODE_SCRIPT_PHOENICIAN,         /* Phnx */
 | |
|   G_UNICODE_SCRIPT_PHAGS_PA,           /* Phag */
 | |
|   G_UNICODE_SCRIPT_NKO,                /* Nkoo */
 | |
| 
 | |
|   /* Unicode-5.1 additions */
 | |
|   G_UNICODE_SCRIPT_KAYAH_LI,           /* Kali */
 | |
|   G_UNICODE_SCRIPT_LEPCHA,             /* Lepc */
 | |
|   G_UNICODE_SCRIPT_REJANG,             /* Rjng */
 | |
|   G_UNICODE_SCRIPT_SUNDANESE,          /* Sund */
 | |
|   G_UNICODE_SCRIPT_SAURASHTRA,         /* Saur */
 | |
|   G_UNICODE_SCRIPT_CHAM,               /* Cham */
 | |
|   G_UNICODE_SCRIPT_OL_CHIKI,           /* Olck */
 | |
|   G_UNICODE_SCRIPT_VAI,                /* Vaii */
 | |
|   G_UNICODE_SCRIPT_CARIAN,             /* Cari */
 | |
|   G_UNICODE_SCRIPT_LYCIAN,             /* Lyci */
 | |
|   G_UNICODE_SCRIPT_LYDIAN,             /* Lydi */
 | |
| 
 | |
|   /* Unicode-5.2 additions */
 | |
|   G_UNICODE_SCRIPT_AVESTAN,                /* Avst */
 | |
|   G_UNICODE_SCRIPT_BAMUM,                  /* Bamu */
 | |
|   G_UNICODE_SCRIPT_EGYPTIAN_HIEROGLYPHS,   /* Egyp */
 | |
|   G_UNICODE_SCRIPT_IMPERIAL_ARAMAIC,       /* Armi */
 | |
|   G_UNICODE_SCRIPT_INSCRIPTIONAL_PAHLAVI,  /* Phli */
 | |
|   G_UNICODE_SCRIPT_INSCRIPTIONAL_PARTHIAN, /* Prti */
 | |
|   G_UNICODE_SCRIPT_JAVANESE,               /* Java */
 | |
|   G_UNICODE_SCRIPT_KAITHI,                 /* Kthi */
 | |
|   G_UNICODE_SCRIPT_LISU,                   /* Lisu */
 | |
|   G_UNICODE_SCRIPT_MEETEI_MAYEK,           /* Mtei */
 | |
|   G_UNICODE_SCRIPT_OLD_SOUTH_ARABIAN,      /* Sarb */
 | |
|   G_UNICODE_SCRIPT_OLD_TURKIC,             /* Orkh */
 | |
|   G_UNICODE_SCRIPT_SAMARITAN,              /* Samr */
 | |
|   G_UNICODE_SCRIPT_TAI_THAM,               /* Lana */
 | |
|   G_UNICODE_SCRIPT_TAI_VIET,               /* Tavt */
 | |
| 
 | |
|   /* Unicode-6.0 additions */
 | |
|   G_UNICODE_SCRIPT_BATAK,                  /* Batk */
 | |
|   G_UNICODE_SCRIPT_BRAHMI,                 /* Brah */
 | |
|   G_UNICODE_SCRIPT_MANDAIC,                /* Mand */
 | |
| 
 | |
|   /* Unicode-6.1 additions */
 | |
|   G_UNICODE_SCRIPT_CHAKMA,                 /* Cakm */
 | |
|   G_UNICODE_SCRIPT_MEROITIC_CURSIVE,       /* Merc */
 | |
|   G_UNICODE_SCRIPT_MEROITIC_HIEROGLYPHS,   /* Mero */
 | |
|   G_UNICODE_SCRIPT_MIAO,                   /* Plrd */
 | |
|   G_UNICODE_SCRIPT_SHARADA,                /* Shrd */
 | |
|   G_UNICODE_SCRIPT_SORA_SOMPENG,           /* Sora */
 | |
|   G_UNICODE_SCRIPT_TAKRI,                  /* Takr */
 | |
| 
 | |
|   /* Unicode 7.0 additions */
 | |
|   G_UNICODE_SCRIPT_BASSA_VAH,              /* Bass */
 | |
|   G_UNICODE_SCRIPT_CAUCASIAN_ALBANIAN,     /* Aghb */
 | |
|   G_UNICODE_SCRIPT_DUPLOYAN,               /* Dupl */
 | |
|   G_UNICODE_SCRIPT_ELBASAN,                /* Elba */
 | |
|   G_UNICODE_SCRIPT_GRANTHA,                /* Gran */
 | |
|   G_UNICODE_SCRIPT_KHOJKI,                 /* Khoj */
 | |
|   G_UNICODE_SCRIPT_KHUDAWADI,              /* Sind */
 | |
|   G_UNICODE_SCRIPT_LINEAR_A,               /* Lina */
 | |
|   G_UNICODE_SCRIPT_MAHAJANI,               /* Mahj */
 | |
|   G_UNICODE_SCRIPT_MANICHAEAN,             /* Manu */
 | |
|   G_UNICODE_SCRIPT_MENDE_KIKAKUI,          /* Mend */
 | |
|   G_UNICODE_SCRIPT_MODI,                   /* Modi */
 | |
|   G_UNICODE_SCRIPT_MRO,                    /* Mroo */
 | |
|   G_UNICODE_SCRIPT_NABATAEAN,              /* Nbat */
 | |
|   G_UNICODE_SCRIPT_OLD_NORTH_ARABIAN,      /* Narb */
 | |
|   G_UNICODE_SCRIPT_OLD_PERMIC,             /* Perm */
 | |
|   G_UNICODE_SCRIPT_PAHAWH_HMONG,           /* Hmng */
 | |
|   G_UNICODE_SCRIPT_PALMYRENE,              /* Palm */
 | |
|   G_UNICODE_SCRIPT_PAU_CIN_HAU,            /* Pauc */
 | |
|   G_UNICODE_SCRIPT_PSALTER_PAHLAVI,        /* Phlp */
 | |
|   G_UNICODE_SCRIPT_SIDDHAM,                /* Sidd */
 | |
|   G_UNICODE_SCRIPT_TIRHUTA,                /* Tirh */
 | |
|   G_UNICODE_SCRIPT_WARANG_CITI,            /* Wara */
 | |
| 
 | |
|   /* Unicode 8.0 additions */
 | |
|   G_UNICODE_SCRIPT_AHOM,                   /* Ahom */
 | |
|   G_UNICODE_SCRIPT_ANATOLIAN_HIEROGLYPHS,  /* Hluw */
 | |
|   G_UNICODE_SCRIPT_HATRAN,                 /* Hatr */
 | |
|   G_UNICODE_SCRIPT_MULTANI,                /* Mult */
 | |
|   G_UNICODE_SCRIPT_OLD_HUNGARIAN,          /* Hung */
 | |
|   G_UNICODE_SCRIPT_SIGNWRITING,            /* Sgnw */
 | |
| 
 | |
|   /* Unicode 9.0 additions */
 | |
|   G_UNICODE_SCRIPT_ADLAM,                  /* Adlm */
 | |
|   G_UNICODE_SCRIPT_BHAIKSUKI,              /* Bhks */
 | |
|   G_UNICODE_SCRIPT_MARCHEN,                /* Marc */
 | |
|   G_UNICODE_SCRIPT_NEWA,                   /* Newa */
 | |
|   G_UNICODE_SCRIPT_OSAGE,                  /* Osge */
 | |
|   G_UNICODE_SCRIPT_TANGUT                  /* Tang */
 | |
| } GUnicodeScript;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint32        g_unicode_script_to_iso15924   (GUnicodeScript script);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GUnicodeScript g_unicode_script_from_iso15924 (guint32        iso15924);
 | |
| 
 | |
| /* These are all analogs of the <ctype.h> functions.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_isalnum   (gunichar c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_isalpha   (gunichar c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_iscntrl   (gunichar c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_isdigit   (gunichar c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_isgraph   (gunichar c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_islower   (gunichar c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_isprint   (gunichar c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_ispunct   (gunichar c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_isspace   (gunichar c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_isupper   (gunichar c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_isxdigit  (gunichar c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_istitle   (gunichar c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_isdefined (gunichar c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_iswide    (gunichar c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_iswide_cjk(gunichar c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_iszerowidth(gunichar c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_ismark    (gunichar c) G_GNUC_CONST;
 | |
| 
 | |
| /* More <ctype.h> functions.  These convert between the three cases.
 | |
|  * See the Unicode book to understand title case.  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gunichar g_unichar_toupper (gunichar c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gunichar g_unichar_tolower (gunichar c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gunichar g_unichar_totitle (gunichar c) G_GNUC_CONST;
 | |
| 
 | |
| /* If C is a digit (according to 'g_unichar_isdigit'), then return its
 | |
|    numeric value.  Otherwise return -1.  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint g_unichar_digit_value (gunichar c) G_GNUC_CONST;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint g_unichar_xdigit_value (gunichar c) G_GNUC_CONST;
 | |
| 
 | |
| /* Return the Unicode character type of a given character.  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GUnicodeType g_unichar_type (gunichar c) G_GNUC_CONST;
 | |
| 
 | |
| /* Return the line break property for a given character */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GUnicodeBreakType g_unichar_break_type (gunichar c) G_GNUC_CONST;
 | |
| 
 | |
| /* Returns the combining class for a given character */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint g_unichar_combining_class (gunichar uc) G_GNUC_CONST;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_get_mirror_char (gunichar ch,
 | |
|                                     gunichar *mirrored_ch);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GUnicodeScript g_unichar_get_script (gunichar ch) G_GNUC_CONST;
 | |
| 
 | |
| /* Validate a Unicode character */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_validate (gunichar ch) G_GNUC_CONST;
 | |
| 
 | |
| /* Pairwise canonical compose/decompose */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_compose (gunichar  a,
 | |
|                             gunichar  b,
 | |
|                             gunichar *ch);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_unichar_decompose (gunichar  ch,
 | |
|                               gunichar *a,
 | |
|                               gunichar *b);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize g_unichar_fully_decompose (gunichar  ch,
 | |
|                                  gboolean  compat,
 | |
|                                  gunichar *result,
 | |
|                                  gsize     result_len);
 | |
| 
 | |
| /**
 | |
|  * G_UNICHAR_MAX_DECOMPOSITION_LENGTH:
 | |
|  *
 | |
|  * The maximum length (in codepoints) of a compatibility or canonical
 | |
|  * decomposition of a single Unicode character.
 | |
|  *
 | |
|  * This is as defined by Unicode 6.1.
 | |
|  *
 | |
|  * Since: 2.32
 | |
|  */
 | |
| #define G_UNICHAR_MAX_DECOMPOSITION_LENGTH 18 /* codepoints */
 | |
| 
 | |
| /* Compute canonical ordering of a string in-place.  This rearranges
 | |
|    decomposed characters in the string according to their combining
 | |
|    classes.  See the Unicode manual for more information.  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_unicode_canonical_ordering (gunichar *string,
 | |
|                                    gsize     len);
 | |
| 
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_30
 | |
| gunichar *g_unicode_canonical_decomposition (gunichar  ch,
 | |
|                                              gsize    *result_len) G_GNUC_MALLOC;
 | |
| 
 | |
| /* Array of skip-bytes-per-initial character.
 | |
|  */
 | |
| GLIB_VAR const gchar * const g_utf8_skip;
 | |
| 
 | |
| /**
 | |
|  * g_utf8_next_char:
 | |
|  * @p: Pointer to the start of a valid UTF-8 character
 | |
|  *
 | |
|  * Skips to the next character in a UTF-8 string. The string must be
 | |
|  * valid; this macro is as fast as possible, and has no error-checking.
 | |
|  * You would use this macro to iterate over a string character by
 | |
|  * character. The macro returns the start of the next UTF-8 character.
 | |
|  * Before using this macro, use g_utf8_validate() to validate strings
 | |
|  * that may contain invalid UTF-8.
 | |
|  */
 | |
| #define g_utf8_next_char(p) (char *)((p) + g_utf8_skip[*(const guchar *)(p)])
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gunichar g_utf8_get_char           (const gchar  *p) G_GNUC_PURE;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gunichar g_utf8_get_char_validated (const  gchar *p,
 | |
|                                     gssize        max_len) G_GNUC_PURE;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*   g_utf8_offset_to_pointer (const gchar *str,
 | |
|                                    glong        offset) G_GNUC_PURE;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| glong    g_utf8_pointer_to_offset (const gchar *str,
 | |
|                                    const gchar *pos) G_GNUC_PURE;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*   g_utf8_prev_char         (const gchar *p) G_GNUC_PURE;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*   g_utf8_find_next_char    (const gchar *p,
 | |
|                                    const gchar *end) G_GNUC_PURE;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*   g_utf8_find_prev_char    (const gchar *str,
 | |
|                                    const gchar *p) G_GNUC_PURE;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| glong    g_utf8_strlen            (const gchar *p,
 | |
|                                    gssize       max) G_GNUC_PURE;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| gchar   *g_utf8_substring         (const gchar *str,
 | |
|                                    glong        start_pos,
 | |
|                                    glong        end_pos) G_GNUC_MALLOC;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar   *g_utf8_strncpy           (gchar       *dest,
 | |
|                                    const gchar *src,
 | |
|                                    gsize        n);
 | |
| 
 | |
| /* Find the UTF-8 character corresponding to ch, in string p. These
 | |
|    functions are equivalants to strchr and strrchr */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar* g_utf8_strchr  (const gchar *p,
 | |
|                        gssize       len,
 | |
|                        gunichar     c);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar* g_utf8_strrchr (const gchar *p,
 | |
|                        gssize       len,
 | |
|                        gunichar     c);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar* g_utf8_strreverse (const gchar *str,
 | |
|                           gssize len);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gunichar2 *g_utf8_to_utf16     (const gchar      *str,
 | |
|                                 glong             len,
 | |
|                                 glong            *items_read,
 | |
|                                 glong            *items_written,
 | |
|                                 GError          **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gunichar * g_utf8_to_ucs4      (const gchar      *str,
 | |
|                                 glong             len,
 | |
|                                 glong            *items_read,
 | |
|                                 glong            *items_written,
 | |
|                                 GError          **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gunichar * g_utf8_to_ucs4_fast (const gchar      *str,
 | |
|                                 glong             len,
 | |
|                                 glong            *items_written) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gunichar * g_utf16_to_ucs4     (const gunichar2  *str,
 | |
|                                 glong             len,
 | |
|                                 glong            *items_read,
 | |
|                                 glong            *items_written,
 | |
|                                 GError          **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*     g_utf16_to_utf8     (const gunichar2  *str,
 | |
|                                 glong             len,
 | |
|                                 glong            *items_read,
 | |
|                                 glong            *items_written,
 | |
|                                 GError          **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gunichar2 *g_ucs4_to_utf16     (const gunichar   *str,
 | |
|                                 glong             len,
 | |
|                                 glong            *items_read,
 | |
|                                 glong            *items_written,
 | |
|                                 GError          **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*     g_ucs4_to_utf8      (const gunichar   *str,
 | |
|                                 glong             len,
 | |
|                                 glong            *items_read,
 | |
|                                 glong            *items_written,
 | |
|                                 GError          **error) G_GNUC_MALLOC;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint      g_unichar_to_utf8 (gunichar    c,
 | |
|                              gchar      *outbuf);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_utf8_validate (const gchar  *str,
 | |
|                           gssize        max_len,
 | |
|                           const gchar **end);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *g_utf8_strup   (const gchar *str,
 | |
|                        gssize       len) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *g_utf8_strdown (const gchar *str,
 | |
|                        gssize       len) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *g_utf8_casefold (const gchar *str,
 | |
|                         gssize       len) G_GNUC_MALLOC;
 | |
| 
 | |
| /**
 | |
|  * GNormalizeMode:
 | |
|  * @G_NORMALIZE_DEFAULT: standardize differences that do not affect the
 | |
|  *     text content, such as the above-mentioned accent representation
 | |
|  * @G_NORMALIZE_NFD: another name for %G_NORMALIZE_DEFAULT
 | |
|  * @G_NORMALIZE_DEFAULT_COMPOSE: like %G_NORMALIZE_DEFAULT, but with
 | |
|  *     composed forms rather than a maximally decomposed form
 | |
|  * @G_NORMALIZE_NFC: another name for %G_NORMALIZE_DEFAULT_COMPOSE
 | |
|  * @G_NORMALIZE_ALL: beyond %G_NORMALIZE_DEFAULT also standardize the
 | |
|  *     "compatibility" characters in Unicode, such as SUPERSCRIPT THREE
 | |
|  *     to the standard forms (in this case DIGIT THREE). Formatting
 | |
|  *     information may be lost but for most text operations such
 | |
|  *     characters should be considered the same
 | |
|  * @G_NORMALIZE_NFKD: another name for %G_NORMALIZE_ALL
 | |
|  * @G_NORMALIZE_ALL_COMPOSE: like %G_NORMALIZE_ALL, but with composed
 | |
|  *     forms rather than a maximally decomposed form
 | |
|  * @G_NORMALIZE_NFKC: another name for %G_NORMALIZE_ALL_COMPOSE
 | |
|  *
 | |
|  * Defines how a Unicode string is transformed in a canonical
 | |
|  * form, standardizing such issues as whether a character with
 | |
|  * an accent is represented as a base character and combining
 | |
|  * accent or as a single precomposed character. Unicode strings
 | |
|  * should generally be normalized before comparing them.
 | |
|  */
 | |
| typedef enum {
 | |
|   G_NORMALIZE_DEFAULT,
 | |
|   G_NORMALIZE_NFD = G_NORMALIZE_DEFAULT,
 | |
|   G_NORMALIZE_DEFAULT_COMPOSE,
 | |
|   G_NORMALIZE_NFC = G_NORMALIZE_DEFAULT_COMPOSE,
 | |
|   G_NORMALIZE_ALL,
 | |
|   G_NORMALIZE_NFKD = G_NORMALIZE_ALL,
 | |
|   G_NORMALIZE_ALL_COMPOSE,
 | |
|   G_NORMALIZE_NFKC = G_NORMALIZE_ALL_COMPOSE
 | |
| } GNormalizeMode;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *g_utf8_normalize (const gchar   *str,
 | |
|                          gssize         len,
 | |
|                          GNormalizeMode mode) G_GNUC_MALLOC;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint   g_utf8_collate     (const gchar *str1,
 | |
|                            const gchar *str2) G_GNUC_PURE;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *g_utf8_collate_key (const gchar *str,
 | |
|                            gssize       len) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *g_utf8_collate_key_for_filename (const gchar *str,
 | |
|                                         gssize       len) G_GNUC_MALLOC;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_52
 | |
| gchar *g_utf8_make_valid (const gchar *str,
 | |
|                           gssize       len) G_GNUC_MALLOC;
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_UNICODE_H__ */
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GString         GString;
 | |
| 
 | |
| struct _GString
 | |
| {
 | |
|   gchar  *str;
 | |
|   gsize len;
 | |
|   gsize allocated_len;
 | |
| };
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_new               (const gchar     *init);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_new_len           (const gchar     *init,
 | |
|                                          gssize           len);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_sized_new         (gsize            dfl_size);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*       g_string_free              (GString         *string,
 | |
|                                          gboolean         free_segment);
 | |
| GLIB_AVAILABLE_IN_2_34
 | |
| GBytes*      g_string_free_to_bytes     (GString         *string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean     g_string_equal             (const GString   *v,
 | |
|                                          const GString   *v2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint        g_string_hash              (const GString   *str);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_assign            (GString         *string,
 | |
|                                          const gchar     *rval);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_truncate          (GString         *string,
 | |
|                                          gsize            len);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_set_size          (GString         *string,
 | |
|                                          gsize            len);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_insert_len        (GString         *string,
 | |
|                                          gssize           pos,
 | |
|                                          const gchar     *val,
 | |
|                                          gssize           len);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_append            (GString         *string,
 | |
|                                          const gchar     *val);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_append_len        (GString         *string,
 | |
|                                          const gchar     *val,
 | |
|                                          gssize           len);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_append_c          (GString         *string,
 | |
|                                          gchar            c);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_append_unichar    (GString         *string,
 | |
|                                          gunichar         wc);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_prepend           (GString         *string,
 | |
|                                          const gchar     *val);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_prepend_c         (GString         *string,
 | |
|                                          gchar            c);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_prepend_unichar   (GString         *string,
 | |
|                                          gunichar         wc);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_prepend_len       (GString         *string,
 | |
|                                          const gchar     *val,
 | |
|                                          gssize           len);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_insert            (GString         *string,
 | |
|                                          gssize           pos,
 | |
|                                          const gchar     *val);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_insert_c          (GString         *string,
 | |
|                                          gssize           pos,
 | |
|                                          gchar            c);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_insert_unichar    (GString         *string,
 | |
|                                          gssize           pos,
 | |
|                                          gunichar         wc);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_overwrite         (GString         *string,
 | |
|                                          gsize            pos,
 | |
|                                          const gchar     *val);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_overwrite_len     (GString         *string,
 | |
|                                          gsize            pos,
 | |
|                                          const gchar     *val,
 | |
|                                          gssize           len);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_erase             (GString         *string,
 | |
|                                          gssize           pos,
 | |
|                                          gssize           len);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_ascii_down        (GString         *string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_ascii_up          (GString         *string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_string_vprintf           (GString         *string,
 | |
|                                          const gchar     *format,
 | |
|                                          va_list          args)
 | |
|                                          G_GNUC_PRINTF(2, 0);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_string_printf            (GString         *string,
 | |
|                                          const gchar     *format,
 | |
|                                          ...) G_GNUC_PRINTF (2, 3);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_string_append_vprintf    (GString         *string,
 | |
|                                          const gchar     *format,
 | |
|                                          va_list          args)
 | |
|                                          G_GNUC_PRINTF(2, 0);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_string_append_printf     (GString         *string,
 | |
|                                          const gchar     *format,
 | |
|                                          ...) G_GNUC_PRINTF (2, 3);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString*     g_string_append_uri_escaped (GString         *string,
 | |
|                                           const gchar     *unescaped,
 | |
|                                           const gchar     *reserved_chars_allowed,
 | |
|                                           gboolean         allow_utf8);
 | |
| 
 | |
| /* -- optimize g_strig_append_c --- */
 | |
| #ifdef G_CAN_INLINE
 | |
| static inline GString*
 | |
| g_string_append_c_inline (GString *gstring,
 | |
|                           gchar    c)
 | |
| {
 | |
|   if (gstring->len + 1 < gstring->allocated_len)
 | |
|     {
 | |
|       gstring->str[gstring->len++] = c;
 | |
|       gstring->str[gstring->len] = 0;
 | |
|     }
 | |
|   else
 | |
|     g_string_insert_c (gstring, -1, c);
 | |
|   return gstring;
 | |
| }
 | |
| #define g_string_append_c(gstr,c)       g_string_append_c_inline (gstr, c)
 | |
| #endif /* G_CAN_INLINE */
 | |
| 
 | |
| 
 | |
| GLIB_DEPRECATED
 | |
| GString *g_string_down (GString *string);
 | |
| GLIB_DEPRECATED
 | |
| GString *g_string_up   (GString *string);
 | |
| 
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
| #define  g_string_sprintf  g_string_printf
 | |
| #define  g_string_sprintfa g_string_append_printf
 | |
| #endif
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_STRING_H__ */
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* GIOChannel
 | |
|  */
 | |
| 
 | |
| typedef struct _GIOChannel	GIOChannel;
 | |
| typedef struct _GIOFuncs        GIOFuncs;
 | |
| 
 | |
| typedef void (* GIOChannelCloseConvertersFunc) (GIOChannel * channel);
 | |
| typedef void (* GIOChannelResetConvertersFunc) (GIOChannel * channel);
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   G_IO_ERROR_NONE,
 | |
|   G_IO_ERROR_AGAIN,
 | |
|   G_IO_ERROR_INVAL,
 | |
|   G_IO_ERROR_UNKNOWN
 | |
| } GIOError;
 | |
| 
 | |
| #define G_IO_CHANNEL_ERROR g_io_channel_error_quark()
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   /* Derived from errno */
 | |
|   G_IO_CHANNEL_ERROR_FBIG,
 | |
|   G_IO_CHANNEL_ERROR_INVAL,
 | |
|   G_IO_CHANNEL_ERROR_IO,
 | |
|   G_IO_CHANNEL_ERROR_ISDIR,
 | |
|   G_IO_CHANNEL_ERROR_NOSPC,
 | |
|   G_IO_CHANNEL_ERROR_NXIO,
 | |
|   G_IO_CHANNEL_ERROR_OVERFLOW,
 | |
|   G_IO_CHANNEL_ERROR_PIPE,
 | |
|   /* Other */
 | |
|   G_IO_CHANNEL_ERROR_FAILED
 | |
| } GIOChannelError;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   G_IO_STATUS_ERROR,
 | |
|   G_IO_STATUS_NORMAL,
 | |
|   G_IO_STATUS_EOF,
 | |
|   G_IO_STATUS_AGAIN
 | |
| } GIOStatus;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   G_SEEK_CUR,
 | |
|   G_SEEK_SET,
 | |
|   G_SEEK_END
 | |
| } GSeekType;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   G_IO_FLAG_APPEND = 1 << 0,
 | |
|   G_IO_FLAG_NONBLOCK = 1 << 1,
 | |
|   G_IO_FLAG_IS_READABLE = 1 << 2,	/* Read only flag */
 | |
|   G_IO_FLAG_IS_WRITABLE = 1 << 3,	/* Read only flag */
 | |
|   G_IO_FLAG_IS_WRITEABLE = 1 << 3,      /* Misspelling in 2.29.10 and earlier */
 | |
|   G_IO_FLAG_IS_SEEKABLE = 1 << 4,	/* Read only flag */
 | |
|   G_IO_FLAG_MASK = (1 << 5) - 1,
 | |
|   G_IO_FLAG_GET_MASK = G_IO_FLAG_MASK,
 | |
|   G_IO_FLAG_SET_MASK = G_IO_FLAG_APPEND | G_IO_FLAG_NONBLOCK
 | |
| } GIOFlags;
 | |
| 
 | |
| struct _GIOChannel
 | |
| {
 | |
|   /*< private >*/
 | |
|   gint ref_count;
 | |
|   GIOFuncs *funcs;
 | |
| 
 | |
|   gchar *encoding;
 | |
|   GIConv read_cd;
 | |
|   GIConv write_cd;
 | |
|   gchar *line_term;		/* String which indicates the end of a line of text */
 | |
|   guint line_term_len;		/* So we can have null in the line term */
 | |
| 
 | |
|   gsize buf_size;
 | |
|   GString *read_buf;		/* Raw data from the channel */
 | |
|   GString *encoded_read_buf;    /* Channel data converted to UTF-8 */
 | |
|   GString *write_buf;		/* Data ready to be written to the file */
 | |
|   gchar partial_write_buf[6];	/* UTF-8 partial characters, null terminated */
 | |
| 
 | |
|   /* Group the flags together, immediately after partial_write_buf, to save memory */
 | |
| 
 | |
|   guint use_buffer     : 1;	/* The encoding uses the buffers */
 | |
|   guint do_encode      : 1;	/* The encoding uses the GIConv coverters */
 | |
|   guint close_on_unref : 1;	/* Close the channel on final unref */
 | |
|   guint is_readable    : 1;	/* Cached GIOFlag */
 | |
|   guint is_writeable   : 1;	/* ditto */
 | |
|   guint is_seekable    : 1;	/* ditto */
 | |
| 
 | |
|   GIOChannelCloseConvertersFunc close_converters;
 | |
|   GIOChannelResetConvertersFunc reset_converters;
 | |
| };
 | |
| 
 | |
| typedef gboolean (*GIOFunc) (GIOChannel   *source,
 | |
| 			     GIOCondition  condition,
 | |
| 			     gpointer      data);
 | |
| struct _GIOFuncs
 | |
| {
 | |
|   GIOStatus (*io_read)           (GIOChannel   *channel, 
 | |
| 			          gchar        *buf, 
 | |
| 				  gsize         count,
 | |
| 				  gsize        *bytes_read,
 | |
| 				  GError      **err);
 | |
|   GIOStatus (*io_write)          (GIOChannel   *channel, 
 | |
| 				  const gchar  *buf, 
 | |
| 				  gsize         count,
 | |
| 				  gsize        *bytes_written,
 | |
| 				  GError      **err);
 | |
|   GIOStatus (*io_seek)           (GIOChannel   *channel, 
 | |
| 				  gint64        offset, 
 | |
| 				  GSeekType     type,
 | |
| 				  GError      **err);
 | |
|   GIOStatus  (*io_close)         (GIOChannel   *channel,
 | |
| 				  GError      **err);
 | |
|   GSource*   (*io_create_watch)  (GIOChannel   *channel,
 | |
| 				  GIOCondition  condition);
 | |
|   void       (*io_free)          (GIOChannel   *channel);
 | |
|   GIOStatus  (*io_set_flags)     (GIOChannel   *channel,
 | |
|                                   GIOFlags      flags,
 | |
| 				  GError      **err);
 | |
|   GIOFlags   (*io_get_flags)     (GIOChannel   *channel);
 | |
| };
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_io_channel_init   (GIOChannel    *channel);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOChannel *g_io_channel_ref    (GIOChannel    *channel);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_io_channel_unref  (GIOChannel    *channel);
 | |
| 
 | |
| GLIB_DEPRECATED_FOR(g_io_channel_read_chars)
 | |
| GIOError    g_io_channel_read   (GIOChannel    *channel,
 | |
|                                  gchar         *buf,
 | |
|                                  gsize          count,
 | |
|                                  gsize         *bytes_read);
 | |
| 
 | |
| GLIB_DEPRECATED_FOR(g_io_channel_write_chars)
 | |
| GIOError  g_io_channel_write    (GIOChannel    *channel,
 | |
|                                  const gchar   *buf,
 | |
|                                  gsize          count,
 | |
|                                  gsize         *bytes_written);
 | |
| 
 | |
| GLIB_DEPRECATED_FOR(g_io_channel_seek_position)
 | |
| GIOError  g_io_channel_seek     (GIOChannel    *channel,
 | |
|                                  gint64         offset,
 | |
|                                  GSeekType      type);
 | |
| 
 | |
| GLIB_DEPRECATED_FOR(g_io_channel_shutdown)
 | |
| void      g_io_channel_close    (GIOChannel    *channel);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOStatus g_io_channel_shutdown (GIOChannel      *channel,
 | |
| 				 gboolean         flush,
 | |
| 				 GError         **err);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint     g_io_add_watch_full   (GIOChannel      *channel,
 | |
| 				 gint             priority,
 | |
| 				 GIOCondition     condition,
 | |
| 				 GIOFunc          func,
 | |
| 				 gpointer         user_data,
 | |
| 				 GDestroyNotify   notify);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSource * g_io_create_watch     (GIOChannel      *channel,
 | |
| 				 GIOCondition     condition);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint     g_io_add_watch        (GIOChannel      *channel,
 | |
| 				 GIOCondition     condition,
 | |
| 				 GIOFunc          func,
 | |
| 				 gpointer         user_data);
 | |
| 
 | |
| /* character encoding conversion involved functions.
 | |
|  */
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_io_channel_set_buffer_size      (GIOChannel   *channel,
 | |
| 							 gsize         size);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize                 g_io_channel_get_buffer_size      (GIOChannel   *channel);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOCondition          g_io_channel_get_buffer_condition (GIOChannel   *channel);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOStatus             g_io_channel_set_flags            (GIOChannel   *channel,
 | |
| 							 GIOFlags      flags,
 | |
| 							 GError      **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOFlags              g_io_channel_get_flags            (GIOChannel   *channel);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_io_channel_set_line_term        (GIOChannel   *channel,
 | |
| 							 const gchar  *line_term,
 | |
| 							 gint          length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_io_channel_get_line_term        (GIOChannel   *channel,
 | |
| 							 gint         *length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_io_channel_set_buffered		(GIOChannel   *channel,
 | |
| 							 gboolean      buffered);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	      g_io_channel_get_buffered		(GIOChannel   *channel);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOStatus             g_io_channel_set_encoding         (GIOChannel   *channel,
 | |
| 							 const gchar  *encoding,
 | |
| 							 GError      **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_io_channel_get_encoding         (GIOChannel   *channel);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_io_channel_set_close_on_unref	(GIOChannel   *channel,
 | |
| 							 gboolean      do_close);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean              g_io_channel_get_close_on_unref	(GIOChannel   *channel);
 | |
| 
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOStatus   g_io_channel_flush            (GIOChannel   *channel,
 | |
| 					   GError      **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOStatus   g_io_channel_read_line        (GIOChannel   *channel,
 | |
| 					   gchar       **str_return,
 | |
| 					   gsize        *length,
 | |
| 					   gsize        *terminator_pos,
 | |
| 					   GError      **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOStatus   g_io_channel_read_line_string (GIOChannel   *channel,
 | |
| 					   GString      *buffer,
 | |
| 					   gsize        *terminator_pos,
 | |
| 					   GError      **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOStatus   g_io_channel_read_to_end      (GIOChannel   *channel,
 | |
| 					   gchar       **str_return,
 | |
| 					   gsize        *length,
 | |
| 					   GError      **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOStatus   g_io_channel_read_chars       (GIOChannel   *channel,
 | |
| 					   gchar        *buf,
 | |
| 					   gsize         count,
 | |
| 					   gsize        *bytes_read,
 | |
| 					   GError      **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOStatus   g_io_channel_read_unichar     (GIOChannel   *channel,
 | |
| 					   gunichar     *thechar,
 | |
| 					   GError      **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOStatus   g_io_channel_write_chars      (GIOChannel   *channel,
 | |
| 					   const gchar  *buf,
 | |
| 					   gssize        count,
 | |
| 					   gsize        *bytes_written,
 | |
| 					   GError      **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOStatus   g_io_channel_write_unichar    (GIOChannel   *channel,
 | |
| 					   gunichar      thechar,
 | |
| 					   GError      **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOStatus   g_io_channel_seek_position    (GIOChannel   *channel,
 | |
| 					   gint64        offset,
 | |
| 					   GSeekType     type,
 | |
| 					   GError      **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOChannel* g_io_channel_new_file         (const gchar  *filename,
 | |
| 					   const gchar  *mode,
 | |
| 					   GError      **error);
 | |
| 
 | |
| /* Error handling */
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQuark          g_io_channel_error_quark      (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOChannelError g_io_channel_error_from_errno (gint en);
 | |
| 
 | |
| /* On Unix, IO channels created with this function for any file
 | |
|  * descriptor or socket.
 | |
|  *
 | |
|  * On Win32, this can be used either for files opened with the MSVCRT
 | |
|  * (the Microsoft run-time C library) _open() or _pipe, including file
 | |
|  * descriptors 0, 1 and 2 (corresponding to stdin, stdout and stderr),
 | |
|  * or for Winsock SOCKETs. If the parameter is a legal file
 | |
|  * descriptor, it is assumed to be such, otherwise it should be a
 | |
|  * SOCKET. This relies on SOCKETs and file descriptors not
 | |
|  * overlapping. If you want to be certain, call either
 | |
|  * g_io_channel_win32_new_fd() or g_io_channel_win32_new_socket()
 | |
|  * instead as appropriate.
 | |
|  *
 | |
|  * The term file descriptor as used in the context of Win32 refers to
 | |
|  * the emulated Unix-like file descriptors MSVCRT provides. The native
 | |
|  * corresponding concept is file HANDLE. There isn't as of yet a way to
 | |
|  * get GIOChannels for Win32 file HANDLEs.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOChannel* g_io_channel_unix_new    (int         fd);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint        g_io_channel_unix_get_fd (GIOChannel *channel);
 | |
| 
 | |
| 
 | |
| /* Hook for GClosure / GSource integration. Don't touch */
 | |
| GLIB_VAR GSourceFuncs g_io_watch_funcs;
 | |
| 
 | |
| #ifdef G_OS_WIN32
 | |
| 
 | |
| /* You can use this "pseudo file descriptor" in a GPollFD to add
 | |
|  * polling for Windows messages. GTK applications should not do that.
 | |
|  */
 | |
| 
 | |
| #define G_WIN32_MSG_HANDLE 19981206
 | |
| 
 | |
| /* Use this to get a GPollFD from a GIOChannel, so that you can call
 | |
|  * g_io_channel_win32_poll(). After calling this you should only use
 | |
|  * g_io_channel_read() to read from the GIOChannel, i.e. never read()
 | |
|  * from the underlying file descriptor. For SOCKETs, it is possible to call
 | |
|  * recv().
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_io_channel_win32_make_pollfd (GIOChannel   *channel,
 | |
| 					    GIOCondition  condition,
 | |
| 					    GPollFD      *fd);
 | |
| 
 | |
| /* This can be used to wait a until at least one of the channels is readable.
 | |
|  * On Unix you would do a select() on the file descriptors of the channels.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint        g_io_channel_win32_poll   (GPollFD    *fds,
 | |
| 				       gint        n_fds,
 | |
| 				       gint        timeout_);
 | |
| 
 | |
| /* Create an IO channel for Windows messages for window handle hwnd. */
 | |
| #if GLIB_SIZEOF_VOID_P == 8
 | |
| /* We use gsize here so that it is still an integer type and not a
 | |
|  * pointer, like the guint in the traditional prototype. We can't use
 | |
|  * intptr_t as that is not portable enough.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOChannel *g_io_channel_win32_new_messages (gsize hwnd);
 | |
| #else
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOChannel *g_io_channel_win32_new_messages (guint hwnd);
 | |
| #endif
 | |
| 
 | |
| /* Create an IO channel for C runtime (emulated Unix-like) file
 | |
|  * descriptors. After calling g_io_add_watch() on a IO channel
 | |
|  * returned by this function, you shouldn't call read() on the file
 | |
|  * descriptor. This is because adding polling for a file descriptor is
 | |
|  * implemented on Win32 by starting a thread that sits blocked in a
 | |
|  * read() from the file descriptor most of the time. All reads from
 | |
|  * the file descriptor should be done by this internal GLib
 | |
|  * thread. Your code should call only g_io_channel_read_chars().
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOChannel* g_io_channel_win32_new_fd (gint         fd);
 | |
| 
 | |
| /* Get the C runtime file descriptor of a channel. */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint        g_io_channel_win32_get_fd (GIOChannel *channel);
 | |
| 
 | |
| /* Create an IO channel for a winsock socket. The parameter should be
 | |
|  * a SOCKET. Contrary to IO channels for file descriptors (on *Win32),
 | |
|  * you can use normal recv() or recvfrom() on sockets even if GLib
 | |
|  * is polling them.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOChannel *g_io_channel_win32_new_socket (gint socket);
 | |
| 
 | |
| GLIB_DEPRECATED_FOR(g_io_channel_win32_new_socket)
 | |
| GIOChannel *g_io_channel_win32_new_stream_socket (gint socket);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_io_channel_win32_set_debug (GIOChannel *channel,
 | |
|                                           gboolean    flag);
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #ifndef __GTK_DOC_IGNORE__
 | |
| #ifdef G_OS_WIN32
 | |
| #define g_io_channel_new_file g_io_channel_new_file_utf8
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GIOChannel *g_io_channel_new_file_utf8 (const gchar  *filename,
 | |
|                                         const gchar  *mode,
 | |
|                                         GError      **error);
 | |
| #endif
 | |
| #endif /* __GTK_DOC_IGNORE__ */
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_IOCHANNEL_H__ */
 | |
| /* gkeyfile.h - desktop entry file parser
 | |
|  *
 | |
|  *  Copyright 2004 Red Hat, Inc.
 | |
|  *
 | |
|  *  Ray Strode <halfline@hawaii.rr.com>
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public License
 | |
|  * along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_KEY_FILE_H__
 | |
| #define __G_KEY_FILE_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   G_KEY_FILE_ERROR_UNKNOWN_ENCODING,
 | |
|   G_KEY_FILE_ERROR_PARSE,
 | |
|   G_KEY_FILE_ERROR_NOT_FOUND,
 | |
|   G_KEY_FILE_ERROR_KEY_NOT_FOUND,
 | |
|   G_KEY_FILE_ERROR_GROUP_NOT_FOUND,
 | |
|   G_KEY_FILE_ERROR_INVALID_VALUE
 | |
| } GKeyFileError;
 | |
| 
 | |
| #define G_KEY_FILE_ERROR g_key_file_error_quark()
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQuark g_key_file_error_quark (void);
 | |
| 
 | |
| typedef struct _GKeyFile GKeyFile;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   G_KEY_FILE_NONE              = 0,
 | |
|   G_KEY_FILE_KEEP_COMMENTS     = 1 << 0,
 | |
|   G_KEY_FILE_KEEP_TRANSLATIONS = 1 << 1
 | |
| } GKeyFileFlags;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GKeyFile *g_key_file_new                    (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GKeyFile *g_key_file_ref                    (GKeyFile             *key_file);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_key_file_unref                  (GKeyFile             *key_file);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_key_file_free                   (GKeyFile             *key_file);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_key_file_set_list_separator     (GKeyFile             *key_file,
 | |
| 					     gchar                 separator);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean  g_key_file_load_from_file         (GKeyFile             *key_file,
 | |
| 					     const gchar          *file,
 | |
| 					     GKeyFileFlags         flags,
 | |
| 					     GError              **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean  g_key_file_load_from_data         (GKeyFile             *key_file,
 | |
| 					     const gchar          *data,
 | |
| 					     gsize                 length,
 | |
| 					     GKeyFileFlags         flags,
 | |
| 					     GError              **error);
 | |
| GLIB_AVAILABLE_IN_2_50
 | |
| gboolean  g_key_file_load_from_bytes        (GKeyFile             *key_file,
 | |
|                                              GBytes               *bytes,
 | |
|                                              GKeyFileFlags         flags,
 | |
|                                              GError              **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_key_file_load_from_dirs          (GKeyFile             *key_file,
 | |
| 					     const gchar	  *file,
 | |
| 					     const gchar	 **search_dirs,
 | |
| 					     gchar		 **full_path,
 | |
| 					     GKeyFileFlags         flags,
 | |
| 					     GError              **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_key_file_load_from_data_dirs     (GKeyFile             *key_file,
 | |
| 					     const gchar          *file,
 | |
| 					     gchar               **full_path,
 | |
| 					     GKeyFileFlags         flags,
 | |
| 					     GError              **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar    *g_key_file_to_data                (GKeyFile             *key_file,
 | |
| 					     gsize                *length,
 | |
| 					     GError              **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| gboolean  g_key_file_save_to_file           (GKeyFile             *key_file,
 | |
|                                              const gchar          *filename,
 | |
|                                              GError              **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar    *g_key_file_get_start_group        (GKeyFile             *key_file) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar   **g_key_file_get_groups             (GKeyFile             *key_file,
 | |
| 					     gsize                *length) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar   **g_key_file_get_keys               (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     gsize                *length,
 | |
| 					     GError              **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean  g_key_file_has_group              (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean  g_key_file_has_key                (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     GError              **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar    *g_key_file_get_value              (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     GError              **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_key_file_set_value              (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     const gchar          *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar    *g_key_file_get_string             (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     GError              **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_key_file_set_string             (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     const gchar          *string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar    *g_key_file_get_locale_string      (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     const gchar          *locale,
 | |
| 					     GError              **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_key_file_set_locale_string      (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     const gchar          *locale,
 | |
| 					     const gchar          *string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean  g_key_file_get_boolean            (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     GError              **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_key_file_set_boolean            (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     gboolean              value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint      g_key_file_get_integer            (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     GError              **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_key_file_set_integer            (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     gint                  value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint64    g_key_file_get_int64              (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     GError              **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_key_file_set_int64              (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     gint64                value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint64   g_key_file_get_uint64             (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     GError              **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_key_file_set_uint64             (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     guint64               value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gdouble   g_key_file_get_double             (GKeyFile             *key_file,
 | |
|                                              const gchar          *group_name,
 | |
|                                              const gchar          *key,
 | |
|                                              GError              **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_key_file_set_double             (GKeyFile             *key_file,
 | |
|                                              const gchar          *group_name,
 | |
|                                              const gchar          *key,
 | |
|                                              gdouble               value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar   **g_key_file_get_string_list        (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     gsize                *length,
 | |
| 					     GError              **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_key_file_set_string_list        (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     const gchar * const   list[],
 | |
| 					     gsize                 length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar   **g_key_file_get_locale_string_list (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     const gchar          *locale,
 | |
| 					     gsize                *length,
 | |
| 					     GError              **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_key_file_set_locale_string_list (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     const gchar          *locale,
 | |
| 					     const gchar * const   list[],
 | |
| 					     gsize                 length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean *g_key_file_get_boolean_list       (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     gsize                *length,
 | |
| 					     GError              **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_key_file_set_boolean_list       (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     gboolean              list[],
 | |
| 					     gsize                 length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint     *g_key_file_get_integer_list       (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     gsize                *length,
 | |
| 					     GError              **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_key_file_set_double_list        (GKeyFile             *key_file,
 | |
|                                              const gchar          *group_name,
 | |
|                                              const gchar          *key,
 | |
|                                              gdouble               list[],
 | |
|                                              gsize                 length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gdouble  *g_key_file_get_double_list        (GKeyFile             *key_file,
 | |
|                                              const gchar          *group_name,
 | |
|                                              const gchar          *key,
 | |
|                                              gsize                *length,
 | |
|                                              GError              **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_key_file_set_integer_list       (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     gint                  list[],
 | |
| 					     gsize                 length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean  g_key_file_set_comment            (GKeyFile             *key_file,
 | |
|                                              const gchar          *group_name,
 | |
|                                              const gchar          *key,
 | |
|                                              const gchar          *comment,
 | |
|                                              GError              **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar    *g_key_file_get_comment            (GKeyFile             *key_file,
 | |
|                                              const gchar          *group_name,
 | |
|                                              const gchar          *key,
 | |
|                                              GError              **error) G_GNUC_MALLOC;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean  g_key_file_remove_comment         (GKeyFile             *key_file,
 | |
|                                              const gchar          *group_name,
 | |
|                                              const gchar          *key,
 | |
| 					     GError              **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean  g_key_file_remove_key             (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     const gchar          *key,
 | |
| 					     GError              **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean  g_key_file_remove_group           (GKeyFile             *key_file,
 | |
| 					     const gchar          *group_name,
 | |
| 					     GError              **error);
 | |
| 
 | |
| /* Defines for handling freedesktop.org Desktop files */
 | |
| #define G_KEY_FILE_DESKTOP_GROUP                "Desktop Entry"
 | |
| 
 | |
| #define G_KEY_FILE_DESKTOP_KEY_TYPE             "Type"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_VERSION          "Version"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_NAME             "Name"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_GENERIC_NAME     "GenericName"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY       "NoDisplay"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_COMMENT          "Comment"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_ICON             "Icon"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_HIDDEN           "Hidden"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN     "OnlyShowIn"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_NOT_SHOW_IN      "NotShowIn"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_TRY_EXEC         "TryExec"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_EXEC             "Exec"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_PATH             "Path"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_TERMINAL         "Terminal"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_MIME_TYPE        "MimeType"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_CATEGORIES       "Categories"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY   "StartupNotify"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_STARTUP_WM_CLASS "StartupWMClass"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_URL              "URL"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_DBUS_ACTIVATABLE "DBusActivatable"
 | |
| #define G_KEY_FILE_DESKTOP_KEY_ACTIONS          "Actions"
 | |
| 
 | |
| #define G_KEY_FILE_DESKTOP_TYPE_APPLICATION     "Application"
 | |
| #define G_KEY_FILE_DESKTOP_TYPE_LINK            "Link"
 | |
| #define G_KEY_FILE_DESKTOP_TYPE_DIRECTORY       "Directory"
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_KEY_FILE_H__ */
 | |
| /* GLIB - Library of useful routines for C programming
 | |
|  * gmappedfile.h: Simplified wrapper around the mmap function
 | |
|  *
 | |
|  * Copyright 2005 Matthias Clasen
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_MAPPED_FILE_H__
 | |
| #define __G_MAPPED_FILE_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GMappedFile GMappedFile;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GMappedFile *g_mapped_file_new          (const gchar  *filename,
 | |
| 				         gboolean      writable,
 | |
| 				         GError      **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GMappedFile *g_mapped_file_new_from_fd  (gint          fd,
 | |
| 					 gboolean      writable,
 | |
| 					 GError      **error) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize        g_mapped_file_get_length   (GMappedFile  *file);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar       *g_mapped_file_get_contents (GMappedFile  *file);
 | |
| GLIB_AVAILABLE_IN_2_34
 | |
| GBytes *     g_mapped_file_get_bytes    (GMappedFile  *file);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GMappedFile *g_mapped_file_ref          (GMappedFile  *file);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void         g_mapped_file_unref        (GMappedFile  *file);
 | |
| 
 | |
| GLIB_DEPRECATED_FOR(g_mapped_file_unref)
 | |
| void         g_mapped_file_free         (GMappedFile  *file);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_MAPPED_FILE_H__ */
 | |
| /* gmarkup.h - Simple XML-like string parser/writer
 | |
|  *
 | |
|  *  Copyright 2000 Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public License
 | |
|  * along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_MARKUP_H__
 | |
| #define __G_MARKUP_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| #include <stdarg.h>
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /**
 | |
|  * GMarkupError:
 | |
|  * @G_MARKUP_ERROR_BAD_UTF8: text being parsed was not valid UTF-8
 | |
|  * @G_MARKUP_ERROR_EMPTY: document contained nothing, or only whitespace
 | |
|  * @G_MARKUP_ERROR_PARSE: document was ill-formed
 | |
|  * @G_MARKUP_ERROR_UNKNOWN_ELEMENT: error should be set by #GMarkupParser
 | |
|  *     functions; element wasn't known
 | |
|  * @G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE: error should be set by #GMarkupParser
 | |
|  *     functions; attribute wasn't known
 | |
|  * @G_MARKUP_ERROR_INVALID_CONTENT: error should be set by #GMarkupParser
 | |
|  *     functions; content was invalid
 | |
|  * @G_MARKUP_ERROR_MISSING_ATTRIBUTE: error should be set by #GMarkupParser
 | |
|  *     functions; a required attribute was missing
 | |
|  *
 | |
|  * Error codes returned by markup parsing.
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_MARKUP_ERROR_BAD_UTF8,
 | |
|   G_MARKUP_ERROR_EMPTY,
 | |
|   G_MARKUP_ERROR_PARSE,
 | |
|   /* The following are primarily intended for specific GMarkupParser
 | |
|    * implementations to set.
 | |
|    */
 | |
|   G_MARKUP_ERROR_UNKNOWN_ELEMENT,
 | |
|   G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE,
 | |
|   G_MARKUP_ERROR_INVALID_CONTENT,
 | |
|   G_MARKUP_ERROR_MISSING_ATTRIBUTE
 | |
| } GMarkupError;
 | |
| 
 | |
| /**
 | |
|  * G_MARKUP_ERROR:
 | |
|  *
 | |
|  * Error domain for markup parsing.
 | |
|  * Errors in this domain will be from the #GMarkupError enumeration.
 | |
|  * See #GError for information on error domains.
 | |
|  */
 | |
| #define G_MARKUP_ERROR g_markup_error_quark ()
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQuark g_markup_error_quark (void);
 | |
| 
 | |
| /**
 | |
|  * GMarkupParseFlags:
 | |
|  * @G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG: flag you should not use
 | |
|  * @G_MARKUP_TREAT_CDATA_AS_TEXT: When this flag is set, CDATA marked
 | |
|  *     sections are not passed literally to the @passthrough function of
 | |
|  *     the parser. Instead, the content of the section (without the
 | |
|  *     `<![CDATA[` and `]]>`) is
 | |
|  *     passed to the @text function. This flag was added in GLib 2.12
 | |
|  * @G_MARKUP_PREFIX_ERROR_POSITION: Normally errors caught by GMarkup
 | |
|  *     itself have line/column information prefixed to them to let the
 | |
|  *     caller know the location of the error. When this flag is set the
 | |
|  *     location information is also prefixed to errors generated by the
 | |
|  *     #GMarkupParser implementation functions
 | |
|  * @G_MARKUP_IGNORE_QUALIFIED: Ignore (don't report) qualified
 | |
|  *     attributes and tags, along with their contents.  A qualified
 | |
|  *     attribute or tag is one that contains ':' in its name (ie: is in
 | |
|  *     another namespace).  Since: 2.40.
 | |
|  *
 | |
|  * Flags that affect the behaviour of the parser.
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG = 1 << 0,
 | |
|   G_MARKUP_TREAT_CDATA_AS_TEXT              = 1 << 1,
 | |
|   G_MARKUP_PREFIX_ERROR_POSITION            = 1 << 2,
 | |
|   G_MARKUP_IGNORE_QUALIFIED                 = 1 << 3
 | |
| } GMarkupParseFlags;
 | |
| 
 | |
| /**
 | |
|  * GMarkupParseContext:
 | |
|  *
 | |
|  * A parse context is used to parse a stream of bytes that
 | |
|  * you expect to contain marked-up text.
 | |
|  *
 | |
|  * See g_markup_parse_context_new(), #GMarkupParser, and so
 | |
|  * on for more details.
 | |
|  */
 | |
| typedef struct _GMarkupParseContext GMarkupParseContext;
 | |
| typedef struct _GMarkupParser GMarkupParser;
 | |
| 
 | |
| /**
 | |
|  * GMarkupParser:
 | |
|  * @start_element: Callback to invoke when the opening tag of an element
 | |
|  *     is seen. The callback's @attribute_names and @attribute_values parameters
 | |
|  *     are %NULL-terminated.
 | |
|  * @end_element: Callback to invoke when the closing tag of an element
 | |
|  *     is seen. Note that this is also called for empty tags like
 | |
|  *     `<empty/>`.
 | |
|  * @text: Callback to invoke when some text is seen (text is always
 | |
|  *     inside an element). Note that the text of an element may be spread
 | |
|  *     over multiple calls of this function. If the
 | |
|  *     %G_MARKUP_TREAT_CDATA_AS_TEXT flag is set, this function is also
 | |
|  *     called for the content of CDATA marked sections.
 | |
|  * @passthrough: Callback to invoke for comments, processing instructions
 | |
|  *     and doctype declarations; if you're re-writing the parsed document,
 | |
|  *     write the passthrough text back out in the same position. If the
 | |
|  *     %G_MARKUP_TREAT_CDATA_AS_TEXT flag is not set, this function is also
 | |
|  *     called for CDATA marked sections.
 | |
|  * @error: Callback to invoke when an error occurs.
 | |
|  *
 | |
|  * Any of the fields in #GMarkupParser can be %NULL, in which case they
 | |
|  * will be ignored. Except for the @error function, any of these callbacks
 | |
|  * can set an error; in particular the %G_MARKUP_ERROR_UNKNOWN_ELEMENT,
 | |
|  * %G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, and %G_MARKUP_ERROR_INVALID_CONTENT
 | |
|  * errors are intended to be set from these callbacks. If you set an error
 | |
|  * from a callback, g_markup_parse_context_parse() will report that error
 | |
|  * back to its caller.
 | |
|  */
 | |
| struct _GMarkupParser
 | |
| {
 | |
|   /* Called for open tags <foo bar="baz"> */
 | |
|   void (*start_element)  (GMarkupParseContext *context,
 | |
|                           const gchar         *element_name,
 | |
|                           const gchar        **attribute_names,
 | |
|                           const gchar        **attribute_values,
 | |
|                           gpointer             user_data,
 | |
|                           GError             **error);
 | |
| 
 | |
|   /* Called for close tags </foo> */
 | |
|   void (*end_element)    (GMarkupParseContext *context,
 | |
|                           const gchar         *element_name,
 | |
|                           gpointer             user_data,
 | |
|                           GError             **error);
 | |
| 
 | |
|   /* Called for character data */
 | |
|   /* text is not nul-terminated */
 | |
|   void (*text)           (GMarkupParseContext *context,
 | |
|                           const gchar         *text,
 | |
|                           gsize                text_len,
 | |
|                           gpointer             user_data,
 | |
|                           GError             **error);
 | |
| 
 | |
|   /* Called for strings that should be re-saved verbatim in this same
 | |
|    * position, but are not otherwise interpretable.  At the moment
 | |
|    * this includes comments and processing instructions.
 | |
|    */
 | |
|   /* text is not nul-terminated. */
 | |
|   void (*passthrough)    (GMarkupParseContext *context,
 | |
|                           const gchar         *passthrough_text,
 | |
|                           gsize                text_len,
 | |
|                           gpointer             user_data,
 | |
|                           GError             **error);
 | |
| 
 | |
|   /* Called on error, including one set by other
 | |
|    * methods in the vtable. The GError should not be freed.
 | |
|    */
 | |
|   void (*error)          (GMarkupParseContext *context,
 | |
|                           GError              *error,
 | |
|                           gpointer             user_data);
 | |
| };
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GMarkupParseContext *g_markup_parse_context_new   (const GMarkupParser *parser,
 | |
|                                                    GMarkupParseFlags    flags,
 | |
|                                                    gpointer             user_data,
 | |
|                                                    GDestroyNotify       user_data_dnotify);
 | |
| GLIB_AVAILABLE_IN_2_36
 | |
| GMarkupParseContext *g_markup_parse_context_ref   (GMarkupParseContext *context);
 | |
| GLIB_AVAILABLE_IN_2_36
 | |
| void                 g_markup_parse_context_unref (GMarkupParseContext *context);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                 g_markup_parse_context_free  (GMarkupParseContext *context);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean             g_markup_parse_context_parse (GMarkupParseContext *context,
 | |
|                                                    const gchar         *text,
 | |
|                                                    gssize               text_len,
 | |
|                                                    GError             **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                 g_markup_parse_context_push  (GMarkupParseContext *context,
 | |
|                                                    const GMarkupParser *parser,
 | |
|                                                    gpointer             user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer             g_markup_parse_context_pop   (GMarkupParseContext *context);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean             g_markup_parse_context_end_parse (GMarkupParseContext *context,
 | |
|                                                        GError             **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *        g_markup_parse_context_get_element (GMarkupParseContext *context);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const GSList *       g_markup_parse_context_get_element_stack (GMarkupParseContext *context);
 | |
| 
 | |
| /* For user-constructed error messages, has no precise semantics */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                 g_markup_parse_context_get_position (GMarkupParseContext *context,
 | |
|                                                           gint                *line_number,
 | |
|                                                           gint                *char_number);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer             g_markup_parse_context_get_user_data (GMarkupParseContext *context);
 | |
| 
 | |
| /* useful when saving */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar* g_markup_escape_text (const gchar *text,
 | |
|                              gssize       length);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *g_markup_printf_escaped (const char *format,
 | |
| 				...) G_GNUC_PRINTF (1, 2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *g_markup_vprintf_escaped (const char *format,
 | |
| 				 va_list     args) G_GNUC_PRINTF(1, 0);
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   G_MARKUP_COLLECT_INVALID,
 | |
|   G_MARKUP_COLLECT_STRING,
 | |
|   G_MARKUP_COLLECT_STRDUP,
 | |
|   G_MARKUP_COLLECT_BOOLEAN,
 | |
|   G_MARKUP_COLLECT_TRISTATE,
 | |
| 
 | |
|   G_MARKUP_COLLECT_OPTIONAL = (1 << 16)
 | |
| } GMarkupCollectType;
 | |
| 
 | |
| 
 | |
| /* useful from start_element */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean   g_markup_collect_attributes (const gchar         *element_name,
 | |
|                                         const gchar        **attribute_names,
 | |
|                                         const gchar        **attribute_values,
 | |
|                                         GError             **error,
 | |
|                                         GMarkupCollectType   first_type,
 | |
|                                         const gchar         *first_attr,
 | |
|                                         ...);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_MARKUP_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_MESSAGES_H__
 | |
| #define __G_MESSAGES_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| #include <stdarg.h>
 | |
| /*
 | |
|  * Copyright © 2007, 2008 Ryan Lortie
 | |
|  * Copyright © 2009, 2010 Codethink Limited
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * License as published by the Free Software Foundation; either
 | |
|  * version 2 of the licence, 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  * Author: Ryan Lortie <desrt@desrt.ca>
 | |
|  */
 | |
| 
 | |
| #ifndef __G_VARIANT_H__
 | |
| #define __G_VARIANT_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| /*
 | |
|  * Copyright © 2007, 2008 Ryan Lortie
 | |
|  * Copyright © 2009, 2010 Codethink Limited
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * License as published by the Free Software Foundation; either
 | |
|  * version 2 of the licence, 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  * Author: Ryan Lortie <desrt@desrt.ca>
 | |
|  */
 | |
| 
 | |
| #ifndef __G_VARIANT_TYPE_H__
 | |
| #define __G_VARIANT_TYPE_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /**
 | |
|  * GVariantType:
 | |
|  *
 | |
|  * A type in the GVariant type system.
 | |
|  *
 | |
|  * Two types may not be compared by value; use g_variant_type_equal() or
 | |
|  * g_variant_type_is_subtype_of().  May be copied using
 | |
|  * g_variant_type_copy() and freed using g_variant_type_free().
 | |
|  **/
 | |
| typedef struct _GVariantType GVariantType;
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_BOOLEAN:
 | |
|  *
 | |
|  * The type of a value that can be either %TRUE or %FALSE.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_BOOLEAN              ((const GVariantType *) "b")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_BYTE:
 | |
|  *
 | |
|  * The type of an integer value that can range from 0 to 255.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_BYTE                 ((const GVariantType *) "y")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_INT16:
 | |
|  *
 | |
|  * The type of an integer value that can range from -32768 to 32767.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_INT16                ((const GVariantType *) "n")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_UINT16:
 | |
|  *
 | |
|  * The type of an integer value that can range from 0 to 65535.
 | |
|  * There were about this many people living in Toronto in the 1870s.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_UINT16               ((const GVariantType *) "q")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_INT32:
 | |
|  *
 | |
|  * The type of an integer value that can range from -2147483648 to
 | |
|  * 2147483647.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_INT32                ((const GVariantType *) "i")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_UINT32:
 | |
|  *
 | |
|  * The type of an integer value that can range from 0 to 4294967295.
 | |
|  * That's one number for everyone who was around in the late 1970s.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_UINT32               ((const GVariantType *) "u")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_INT64:
 | |
|  *
 | |
|  * The type of an integer value that can range from
 | |
|  * -9223372036854775808 to 9223372036854775807.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_INT64                ((const GVariantType *) "x")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_UINT64:
 | |
|  *
 | |
|  * The type of an integer value that can range from 0 to
 | |
|  * 18446744073709551616.  That's a really big number, but a Rubik's
 | |
|  * cube can have a bit more than twice as many possible positions.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_UINT64               ((const GVariantType *) "t")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_DOUBLE:
 | |
|  *
 | |
|  * The type of a double precision IEEE754 floating point number.
 | |
|  * These guys go up to about 1.80e308 (plus and minus) but miss out on
 | |
|  * some numbers in between.  In any case, that's far greater than the
 | |
|  * estimated number of fundamental particles in the observable
 | |
|  * universe.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_DOUBLE               ((const GVariantType *) "d")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_STRING:
 | |
|  *
 | |
|  * The type of a string.  "" is a string.  %NULL is not a string.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_STRING               ((const GVariantType *) "s")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_OBJECT_PATH:
 | |
|  *
 | |
|  * The type of a D-Bus object reference.  These are strings of a
 | |
|  * specific format used to identify objects at a given destination on
 | |
|  * the bus.
 | |
|  *
 | |
|  * If you are not interacting with D-Bus, then there is no reason to make
 | |
|  * use of this type.  If you are, then the D-Bus specification contains a
 | |
|  * precise description of valid object paths.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_OBJECT_PATH          ((const GVariantType *) "o")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_SIGNATURE:
 | |
|  *
 | |
|  * The type of a D-Bus type signature.  These are strings of a specific
 | |
|  * format used as type signatures for D-Bus methods and messages.
 | |
|  *
 | |
|  * If you are not interacting with D-Bus, then there is no reason to make
 | |
|  * use of this type.  If you are, then the D-Bus specification contains a
 | |
|  * precise description of valid signature strings.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_SIGNATURE            ((const GVariantType *) "g")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_VARIANT:
 | |
|  *
 | |
|  * The type of a box that contains any other value (including another
 | |
|  * variant).
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_VARIANT              ((const GVariantType *) "v")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_HANDLE:
 | |
|  *
 | |
|  * The type of a 32bit signed integer value, that by convention, is used
 | |
|  * as an index into an array of file descriptors that are sent alongside
 | |
|  * a D-Bus message.
 | |
|  *
 | |
|  * If you are not interacting with D-Bus, then there is no reason to make
 | |
|  * use of this type.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_HANDLE               ((const GVariantType *) "h")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_UNIT:
 | |
|  *
 | |
|  * The empty tuple type.  Has only one instance.  Known also as "triv"
 | |
|  * or "void".
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_UNIT                 ((const GVariantType *) "()")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_ANY:
 | |
|  *
 | |
|  * An indefinite type that is a supertype of every type (including
 | |
|  * itself).
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_ANY                  ((const GVariantType *) "*")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_BASIC:
 | |
|  *
 | |
|  * An indefinite type that is a supertype of every basic (ie:
 | |
|  * non-container) type.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_BASIC                ((const GVariantType *) "?")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_MAYBE:
 | |
|  *
 | |
|  * An indefinite type that is a supertype of every maybe type.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_MAYBE                ((const GVariantType *) "m*")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_ARRAY:
 | |
|  *
 | |
|  * An indefinite type that is a supertype of every array type.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_ARRAY                ((const GVariantType *) "a*")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_TUPLE:
 | |
|  *
 | |
|  * An indefinite type that is a supertype of every tuple type,
 | |
|  * regardless of the number of items in the tuple.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_TUPLE                ((const GVariantType *) "r")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_DICT_ENTRY:
 | |
|  *
 | |
|  * An indefinite type that is a supertype of every dictionary entry
 | |
|  * type.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_DICT_ENTRY           ((const GVariantType *) "{?*}")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_DICTIONARY:
 | |
|  *
 | |
|  * An indefinite type that is a supertype of every dictionary type --
 | |
|  * that is, any array type that has an element type equal to any
 | |
|  * dictionary entry type.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_DICTIONARY           ((const GVariantType *) "a{?*}")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_STRING_ARRAY:
 | |
|  *
 | |
|  * The type of an array of strings.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_STRING_ARRAY         ((const GVariantType *) "as")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_OBJECT_PATH_ARRAY:
 | |
|  *
 | |
|  * The type of an array of object paths.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_OBJECT_PATH_ARRAY    ((const GVariantType *) "ao")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_BYTESTRING:
 | |
|  *
 | |
|  * The type of an array of bytes.  This type is commonly used to pass
 | |
|  * around strings that may not be valid utf8.  In that case, the
 | |
|  * convention is that the nul terminator character should be included as
 | |
|  * the last character in the array.
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_BYTESTRING           ((const GVariantType *) "ay")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_BYTESTRING_ARRAY:
 | |
|  *
 | |
|  * The type of an array of byte strings (an array of arrays of bytes).
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_BYTESTRING_ARRAY     ((const GVariantType *) "aay")
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE_VARDICT:
 | |
|  *
 | |
|  * The type of a dictionary mapping strings to variants (the ubiquitous
 | |
|  * "a{sv}" type).
 | |
|  *
 | |
|  * Since: 2.30
 | |
|  **/
 | |
| #define G_VARIANT_TYPE_VARDICT              ((const GVariantType *) "a{sv}")
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_TYPE:
 | |
|  * @type_string: a well-formed #GVariantType type string
 | |
|  *
 | |
|  * Converts a string to a const #GVariantType.  Depending on the
 | |
|  * current debugging level, this function may perform a runtime check
 | |
|  * to ensure that @string is a valid GVariant type string.
 | |
|  *
 | |
|  * It is always a programmer error to use this macro with an invalid
 | |
|  * type string. If in doubt, use g_variant_type_string_is_valid() to
 | |
|  * check if the string is valid.
 | |
|  *
 | |
|  * Since 2.24
 | |
|  **/
 | |
| #ifndef G_DISABLE_CHECKS
 | |
| # define G_VARIANT_TYPE(type_string)            (g_variant_type_checked_ ((type_string)))
 | |
| #else
 | |
| # define G_VARIANT_TYPE(type_string)            ((const GVariantType *) (type_string))
 | |
| #endif
 | |
| 
 | |
| /* type string checking */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_type_string_is_valid          (const gchar         *type_string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_type_string_scan              (const gchar         *string,
 | |
|                                                                          const gchar         *limit,
 | |
|                                                                          const gchar        **endptr);
 | |
| 
 | |
| /* create/destroy */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                            g_variant_type_free                     (GVariantType        *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariantType *                  g_variant_type_copy                     (const GVariantType  *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariantType *                  g_variant_type_new                      (const gchar         *type_string);
 | |
| 
 | |
| /* getters */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize                           g_variant_type_get_string_length        (const GVariantType  *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *                   g_variant_type_peek_string              (const GVariantType  *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *                         g_variant_type_dup_string               (const GVariantType  *type);
 | |
| 
 | |
| /* classification */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_type_is_definite              (const GVariantType  *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_type_is_container             (const GVariantType  *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_type_is_basic                 (const GVariantType  *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_type_is_maybe                 (const GVariantType  *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_type_is_array                 (const GVariantType  *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_type_is_tuple                 (const GVariantType  *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_type_is_dict_entry            (const GVariantType  *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_type_is_variant               (const GVariantType  *type);
 | |
| 
 | |
| /* for hash tables */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint                           g_variant_type_hash                     (gconstpointer        type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_type_equal                    (gconstpointer        type1,
 | |
|                                                                          gconstpointer        type2);
 | |
| 
 | |
| /* subtypes */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_type_is_subtype_of            (const GVariantType  *type,
 | |
|                                                                          const GVariantType  *supertype);
 | |
| 
 | |
| /* type iterator interface */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const GVariantType *            g_variant_type_element                  (const GVariantType  *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const GVariantType *            g_variant_type_first                    (const GVariantType  *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const GVariantType *            g_variant_type_next                     (const GVariantType  *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize                           g_variant_type_n_items                  (const GVariantType  *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const GVariantType *            g_variant_type_key                      (const GVariantType  *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const GVariantType *            g_variant_type_value                    (const GVariantType  *type);
 | |
| 
 | |
| /* constructors */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariantType *                  g_variant_type_new_array                (const GVariantType  *element);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariantType *                  g_variant_type_new_maybe                (const GVariantType  *element);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariantType *                  g_variant_type_new_tuple                (const GVariantType * const *items,
 | |
|                                                                          gint                 length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariantType *                  g_variant_type_new_dict_entry           (const GVariantType  *key,
 | |
|                                                                          const GVariantType  *value);
 | |
| 
 | |
| /*< private >*/
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const GVariantType *            g_variant_type_checked_                 (const gchar *);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_VARIANT_TYPE_H__ */
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GVariant        GVariant;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   G_VARIANT_CLASS_BOOLEAN       = 'b',
 | |
|   G_VARIANT_CLASS_BYTE          = 'y',
 | |
|   G_VARIANT_CLASS_INT16         = 'n',
 | |
|   G_VARIANT_CLASS_UINT16        = 'q',
 | |
|   G_VARIANT_CLASS_INT32         = 'i',
 | |
|   G_VARIANT_CLASS_UINT32        = 'u',
 | |
|   G_VARIANT_CLASS_INT64         = 'x',
 | |
|   G_VARIANT_CLASS_UINT64        = 't',
 | |
|   G_VARIANT_CLASS_HANDLE        = 'h',
 | |
|   G_VARIANT_CLASS_DOUBLE        = 'd',
 | |
|   G_VARIANT_CLASS_STRING        = 's',
 | |
|   G_VARIANT_CLASS_OBJECT_PATH   = 'o',
 | |
|   G_VARIANT_CLASS_SIGNATURE     = 'g',
 | |
|   G_VARIANT_CLASS_VARIANT       = 'v',
 | |
|   G_VARIANT_CLASS_MAYBE         = 'm',
 | |
|   G_VARIANT_CLASS_ARRAY         = 'a',
 | |
|   G_VARIANT_CLASS_TUPLE         = '(',
 | |
|   G_VARIANT_CLASS_DICT_ENTRY    = '{'
 | |
| } GVariantClass;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                            g_variant_unref                         (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_ref                           (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_ref_sink                      (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_is_floating                   (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_take_ref                      (GVariant             *value);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const GVariantType *            g_variant_get_type                      (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *                   g_variant_get_type_string               (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_is_of_type                    (GVariant             *value,
 | |
|                                                                          const GVariantType   *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_is_container                  (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariantClass                   g_variant_classify                      (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_boolean                   (gboolean              value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_byte                      (guchar                value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_int16                     (gint16                value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_uint16                    (guint16               value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_int32                     (gint32                value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_uint32                    (guint32               value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_int64                     (gint64                value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_uint64                    (guint64               value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_handle                    (gint32                value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_double                    (gdouble               value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_string                    (const gchar          *string);
 | |
| GLIB_AVAILABLE_IN_2_38
 | |
| GVariant *                      g_variant_new_take_string               (gchar                *string);
 | |
| GLIB_AVAILABLE_IN_2_38
 | |
| GVariant *                      g_variant_new_printf                    (const gchar          *format_string,
 | |
|                                                                          ...) G_GNUC_PRINTF (1, 2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_object_path               (const gchar          *object_path);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_is_object_path                (const gchar          *string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_signature                 (const gchar          *signature);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_is_signature                  (const gchar          *string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_variant                   (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_strv                      (const gchar * const  *strv,
 | |
|                                                                          gssize                length);
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| GVariant *                      g_variant_new_objv                      (const gchar * const  *strv,
 | |
|                                                                          gssize                length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_bytestring                (const gchar          *string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_bytestring_array          (const gchar * const  *strv,
 | |
|                                                                          gssize                length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_fixed_array               (const GVariantType   *element_type,
 | |
|                                                                          gconstpointer         elements,
 | |
|                                                                          gsize                 n_elements,
 | |
|                                                                          gsize                 element_size);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_get_boolean                   (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guchar                          g_variant_get_byte                      (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint16                          g_variant_get_int16                     (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint16                         g_variant_get_uint16                    (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint32                          g_variant_get_int32                     (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint32                         g_variant_get_uint32                    (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint64                          g_variant_get_int64                     (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint64                         g_variant_get_uint64                    (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint32                          g_variant_get_handle                    (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gdouble                         g_variant_get_double                    (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_get_variant                   (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *                   g_variant_get_string                    (GVariant             *value,
 | |
|                                                                          gsize                *length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *                         g_variant_dup_string                    (GVariant             *value,
 | |
|                                                                          gsize                *length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar **                  g_variant_get_strv                      (GVariant             *value,
 | |
|                                                                          gsize                *length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar **                        g_variant_dup_strv                      (GVariant             *value,
 | |
|                                                                          gsize                *length);
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| const gchar **                  g_variant_get_objv                      (GVariant             *value,
 | |
|                                                                          gsize                *length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar **                        g_variant_dup_objv                      (GVariant             *value,
 | |
|                                                                          gsize                *length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *                   g_variant_get_bytestring                (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *                         g_variant_dup_bytestring                (GVariant             *value,
 | |
|                                                                          gsize                *length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar **                  g_variant_get_bytestring_array          (GVariant             *value,
 | |
|                                                                          gsize                *length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar **                        g_variant_dup_bytestring_array          (GVariant             *value,
 | |
|                                                                          gsize                *length);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_maybe                     (const GVariantType   *child_type,
 | |
|                                                                          GVariant             *child);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_array                     (const GVariantType   *child_type,
 | |
|                                                                          GVariant * const     *children,
 | |
|                                                                          gsize                 n_children);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_tuple                     (GVariant * const     *children,
 | |
|                                                                          gsize                 n_children);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_dict_entry                (GVariant             *key,
 | |
|                                                                          GVariant             *value);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_get_maybe                     (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize                           g_variant_n_children                    (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                            g_variant_get_child                     (GVariant             *value,
 | |
|                                                                          gsize                 index_,
 | |
|                                                                          const gchar          *format_string,
 | |
|                                                                          ...);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_get_child_value               (GVariant             *value,
 | |
|                                                                          gsize                 index_);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_lookup                        (GVariant             *dictionary,
 | |
|                                                                          const gchar          *key,
 | |
|                                                                          const gchar          *format_string,
 | |
|                                                                          ...);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_lookup_value                  (GVariant             *dictionary,
 | |
|                                                                          const gchar          *key,
 | |
|                                                                          const GVariantType   *expected_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gconstpointer                   g_variant_get_fixed_array               (GVariant             *value,
 | |
|                                                                          gsize                *n_elements,
 | |
|                                                                          gsize                 element_size);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize                           g_variant_get_size                      (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gconstpointer                   g_variant_get_data                      (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_2_36
 | |
| GBytes *                        g_variant_get_data_as_bytes             (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                            g_variant_store                         (GVariant             *value,
 | |
|                                                                          gpointer              data);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *                         g_variant_print                         (GVariant             *value,
 | |
|                                                                          gboolean              type_annotate);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GString *                       g_variant_print_string                  (GVariant             *value,
 | |
|                                                                          GString              *string,
 | |
|                                                                          gboolean              type_annotate);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint                           g_variant_hash                          (gconstpointer         value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_equal                         (gconstpointer         one,
 | |
|                                                                          gconstpointer         two);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_get_normal_form               (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_is_normal_form                (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_byteswap                      (GVariant             *value);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_36
 | |
| GVariant *                      g_variant_new_from_bytes                (const GVariantType   *type,
 | |
|                                                                          GBytes               *bytes,
 | |
|                                                                          gboolean              trusted);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_from_data                 (const GVariantType   *type,
 | |
|                                                                          gconstpointer         data,
 | |
|                                                                          gsize                 size,
 | |
|                                                                          gboolean              trusted,
 | |
|                                                                          GDestroyNotify        notify,
 | |
|                                                                          gpointer              user_data);
 | |
| 
 | |
| typedef struct _GVariantIter GVariantIter;
 | |
| struct _GVariantIter {
 | |
|   /*< private >*/
 | |
|   gsize x[16];
 | |
| };
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariantIter *                  g_variant_iter_new                      (GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize                           g_variant_iter_init                     (GVariantIter         *iter,
 | |
|                                                                          GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariantIter *                  g_variant_iter_copy                     (GVariantIter         *iter);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize                           g_variant_iter_n_children               (GVariantIter         *iter);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                            g_variant_iter_free                     (GVariantIter         *iter);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_iter_next_value               (GVariantIter         *iter);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_iter_next                     (GVariantIter         *iter,
 | |
|                                                                          const gchar          *format_string,
 | |
|                                                                          ...);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean                        g_variant_iter_loop                     (GVariantIter         *iter,
 | |
|                                                                          const gchar          *format_string,
 | |
|                                                                          ...);
 | |
| 
 | |
| 
 | |
| typedef struct _GVariantBuilder GVariantBuilder;
 | |
| struct _GVariantBuilder {
 | |
|   /*< private >*/
 | |
|   union
 | |
|   {
 | |
|     struct {
 | |
|       gsize partial_magic;
 | |
|       const GVariantType *type;
 | |
|       gsize y[14];
 | |
|     } s;
 | |
|     gsize x[16];
 | |
|   } u;
 | |
| };
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   G_VARIANT_PARSE_ERROR_FAILED,
 | |
|   G_VARIANT_PARSE_ERROR_BASIC_TYPE_EXPECTED,
 | |
|   G_VARIANT_PARSE_ERROR_CANNOT_INFER_TYPE,
 | |
|   G_VARIANT_PARSE_ERROR_DEFINITE_TYPE_EXPECTED,
 | |
|   G_VARIANT_PARSE_ERROR_INPUT_NOT_AT_END,
 | |
|   G_VARIANT_PARSE_ERROR_INVALID_CHARACTER,
 | |
|   G_VARIANT_PARSE_ERROR_INVALID_FORMAT_STRING,
 | |
|   G_VARIANT_PARSE_ERROR_INVALID_OBJECT_PATH,
 | |
|   G_VARIANT_PARSE_ERROR_INVALID_SIGNATURE,
 | |
|   G_VARIANT_PARSE_ERROR_INVALID_TYPE_STRING,
 | |
|   G_VARIANT_PARSE_ERROR_NO_COMMON_TYPE,
 | |
|   G_VARIANT_PARSE_ERROR_NUMBER_OUT_OF_RANGE,
 | |
|   G_VARIANT_PARSE_ERROR_NUMBER_TOO_BIG,
 | |
|   G_VARIANT_PARSE_ERROR_TYPE_ERROR,
 | |
|   G_VARIANT_PARSE_ERROR_UNEXPECTED_TOKEN,
 | |
|   G_VARIANT_PARSE_ERROR_UNKNOWN_KEYWORD,
 | |
|   G_VARIANT_PARSE_ERROR_UNTERMINATED_STRING_CONSTANT,
 | |
|   G_VARIANT_PARSE_ERROR_VALUE_EXPECTED
 | |
| } GVariantParseError;
 | |
| #define G_VARIANT_PARSE_ERROR (g_variant_parse_error_quark ())
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_38_FOR(g_variant_parse_error_quark)
 | |
| GQuark                          g_variant_parser_get_error_quark        (void);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQuark                          g_variant_parse_error_quark             (void);
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_BUILDER_INIT:
 | |
|  * @variant_type: a const GVariantType*
 | |
|  *
 | |
|  * A stack-allocated #GVariantBuilder must be initialized if it is
 | |
|  * used together with g_auto() to avoid warnings or crashes if
 | |
|  * function returns before g_variant_builder_init() is called on the
 | |
|  * builder.  This macro can be used as initializer instead of an
 | |
|  * explicit zeroing a variable when declaring it and a following
 | |
|  * g_variant_builder_init(), but it cannot be assigned to a variable.
 | |
|  *
 | |
|  * The passed @variant_type should be a static GVariantType to avoid
 | |
|  * lifetime issues, as copying the @variant_type does not happen in
 | |
|  * the G_VARIANT_BUILDER_INIT() call, but rather in functions that
 | |
|  * make sure that #GVariantBuilder is valid.
 | |
|  *
 | |
|  * |[
 | |
|  *   g_auto(GVariantBuilder) builder = G_VARIANT_BUILDER_INIT (G_VARIANT_TYPE_BYTESTRING);
 | |
|  * ]|
 | |
|  *
 | |
|  * Since: 2.50
 | |
|  */
 | |
| #define G_VARIANT_BUILDER_INIT(variant_type) { { { 2942751021u, variant_type, { 0, } } } }
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariantBuilder *               g_variant_builder_new                   (const GVariantType   *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                            g_variant_builder_unref                 (GVariantBuilder      *builder);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariantBuilder *               g_variant_builder_ref                   (GVariantBuilder      *builder);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                            g_variant_builder_init                  (GVariantBuilder      *builder,
 | |
|                                                                          const GVariantType   *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_builder_end                   (GVariantBuilder      *builder);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                            g_variant_builder_clear                 (GVariantBuilder      *builder);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                            g_variant_builder_open                  (GVariantBuilder      *builder,
 | |
|                                                                          const GVariantType   *type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                            g_variant_builder_close                 (GVariantBuilder      *builder);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                            g_variant_builder_add_value             (GVariantBuilder      *builder,
 | |
|                                                                          GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                            g_variant_builder_add                   (GVariantBuilder      *builder,
 | |
|                                                                          const gchar          *format_string,
 | |
|                                                                          ...);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                            g_variant_builder_add_parsed            (GVariantBuilder      *builder,
 | |
|                                                                          const gchar          *format,
 | |
|                                                                          ...);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new                           (const gchar          *format_string,
 | |
|                                                                          ...);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                            g_variant_get                           (GVariant             *value,
 | |
|                                                                          const gchar          *format_string,
 | |
|                                                                          ...);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_va                        (const gchar          *format_string,
 | |
|                                                                          const gchar         **endptr,
 | |
|                                                                          va_list              *app);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                            g_variant_get_va                        (GVariant             *value,
 | |
|                                                                          const gchar          *format_string,
 | |
|                                                                          const gchar         **endptr,
 | |
|                                                                          va_list              *app);
 | |
| GLIB_AVAILABLE_IN_2_34
 | |
| gboolean                        g_variant_check_format_string           (GVariant             *value,
 | |
|                                                                          const gchar          *format_string,
 | |
|                                                                          gboolean              copy_only);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_parse                         (const GVariantType   *type,
 | |
|                                                                          const gchar          *text,
 | |
|                                                                          const gchar          *limit,
 | |
|                                                                          const gchar         **endptr,
 | |
|                                                                          GError              **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_parsed                    (const gchar          *format,
 | |
|                                                                          ...);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant *                      g_variant_new_parsed_va                 (const gchar          *format,
 | |
|                                                                          va_list              *app);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| gchar *                         g_variant_parse_error_print_context     (GError               *error,
 | |
|                                                                          const gchar          *source_str);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                            g_variant_compare                       (gconstpointer one,
 | |
|                                                                          gconstpointer two);
 | |
| 
 | |
| typedef struct _GVariantDict GVariantDict;
 | |
| struct _GVariantDict {
 | |
|   /*< private >*/
 | |
|   union
 | |
|   {
 | |
|     struct {
 | |
|       GVariant *asv;
 | |
|       gsize partial_magic;
 | |
|       gsize y[14];
 | |
|     } s;
 | |
|     gsize x[16];
 | |
|   } u;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * G_VARIANT_DICT_INIT:
 | |
|  * @asv: (nullable): a GVariant*
 | |
|  *
 | |
|  * A stack-allocated #GVariantDict must be initialized if it is used
 | |
|  * together with g_auto() to avoid warnings or crashes if function
 | |
|  * returns before g_variant_dict_init() is called on the builder.
 | |
|  * This macro can be used as initializer instead of an explicit
 | |
|  * zeroing a variable when declaring it and a following
 | |
|  * g_variant_dict_init(), but it cannot be assigned to a variable.
 | |
|  *
 | |
|  * The passed @asv has to live long enough for #GVariantDict to gather
 | |
|  * the entries from, as the gathering does not happen in the
 | |
|  * G_VARIANT_DICT_INIT() call, but rather in functions that make sure
 | |
|  * that #GVariantDict is valid.  In context where the initialization
 | |
|  * value has to be a constant expression, the only possible value of
 | |
|  * @asv is %NULL.  It is still possible to call g_variant_dict_init()
 | |
|  * safely with a different @asv right after the variable was
 | |
|  * initialized with G_VARIANT_DICT_INIT().
 | |
|  *
 | |
|  * |[
 | |
|  *   g_autoptr(GVariant) variant = get_asv_variant ();
 | |
|  *   g_auto(GVariantDict) dict = G_VARIANT_DICT_INIT (variant);
 | |
|  * ]|
 | |
|  *
 | |
|  * Since: 2.50
 | |
|  */
 | |
| #define G_VARIANT_DICT_INIT(asv) { { { asv, 3488698669u, { 0, } } } }
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| GVariantDict *                  g_variant_dict_new                      (GVariant             *from_asv);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| void                            g_variant_dict_init                     (GVariantDict         *dict,
 | |
|                                                                          GVariant             *from_asv);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| gboolean                        g_variant_dict_lookup                   (GVariantDict         *dict,
 | |
|                                                                          const gchar          *key,
 | |
|                                                                          const gchar          *format_string,
 | |
|                                                                          ...);
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| GVariant *                      g_variant_dict_lookup_value             (GVariantDict         *dict,
 | |
|                                                                          const gchar          *key,
 | |
|                                                                          const GVariantType   *expected_type);
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| gboolean                        g_variant_dict_contains                 (GVariantDict         *dict,
 | |
|                                                                          const gchar          *key);
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| void                            g_variant_dict_insert                   (GVariantDict         *dict,
 | |
|                                                                          const gchar          *key,
 | |
|                                                                          const gchar          *format_string,
 | |
|                                                                          ...);
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| void                            g_variant_dict_insert_value             (GVariantDict         *dict,
 | |
|                                                                          const gchar          *key,
 | |
|                                                                          GVariant             *value);
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| gboolean                        g_variant_dict_remove                   (GVariantDict         *dict,
 | |
|                                                                          const gchar          *key);
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| void                            g_variant_dict_clear                    (GVariantDict         *dict);
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| GVariant *                      g_variant_dict_end                      (GVariantDict         *dict);
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| GVariantDict *                  g_variant_dict_ref                      (GVariantDict         *dict);
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| void                            g_variant_dict_unref                    (GVariantDict         *dict);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_VARIANT_H__ */
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* calculate a string size, guaranteed to fit format + args.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize	g_printf_string_upper_bound (const gchar* format,
 | |
| 				     va_list	  args) G_GNUC_PRINTF(1, 0);
 | |
| 
 | |
| /* 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 void            (*GLogFunc)             (const gchar   *log_domain,
 | |
|                                                  GLogLevelFlags log_level,
 | |
|                                                  const gchar   *message,
 | |
|                                                  gpointer       user_data);
 | |
| 
 | |
| /* Logging mechanism
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint           g_log_set_handler       (const gchar    *log_domain,
 | |
|                                          GLogLevelFlags  log_levels,
 | |
|                                          GLogFunc        log_func,
 | |
|                                          gpointer        user_data);
 | |
| GLIB_AVAILABLE_IN_2_46
 | |
| guint           g_log_set_handler_full  (const gchar    *log_domain,
 | |
|                                          GLogLevelFlags  log_levels,
 | |
|                                          GLogFunc        log_func,
 | |
|                                          gpointer        user_data,
 | |
|                                          GDestroyNotify  destroy);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_log_remove_handler    (const gchar    *log_domain,
 | |
|                                          guint           handler_id);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_log_default_handler   (const gchar    *log_domain,
 | |
|                                          GLogLevelFlags  log_level,
 | |
|                                          const gchar    *message,
 | |
|                                          gpointer        unused_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GLogFunc        g_log_set_default_handler (GLogFunc      log_func,
 | |
| 					   gpointer      user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_log                   (const gchar    *log_domain,
 | |
|                                          GLogLevelFlags  log_level,
 | |
|                                          const gchar    *format,
 | |
|                                          ...) G_GNUC_PRINTF (3, 4);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_logv                  (const gchar    *log_domain,
 | |
|                                          GLogLevelFlags  log_level,
 | |
|                                          const gchar    *format,
 | |
|                                          va_list         args) G_GNUC_PRINTF(3, 0);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GLogLevelFlags  g_log_set_fatal_mask    (const gchar    *log_domain,
 | |
|                                          GLogLevelFlags  fatal_mask);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GLogLevelFlags  g_log_set_always_fatal  (GLogLevelFlags  fatal_mask);
 | |
| 
 | |
| /* Structured logging mechanism. */
 | |
| 
 | |
| /**
 | |
|  * GLogWriterOutput:
 | |
|  * @G_LOG_WRITER_HANDLED: Log writer has handled the log entry.
 | |
|  * @G_LOG_WRITER_UNHANDLED: Log writer could not handle the log entry.
 | |
|  *
 | |
|  * Return values from #GLogWriterFuncs to indicate whether the given log entry
 | |
|  * was successfully handled by the writer, or whether there was an error in
 | |
|  * handling it (and hence a fallback writer should be used).
 | |
|  *
 | |
|  * If a #GLogWriterFunc ignores a log entry, it should return
 | |
|  * %G_LOG_WRITER_HANDLED.
 | |
|  *
 | |
|  * Since: 2.50
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_LOG_WRITER_HANDLED = 1,
 | |
|   G_LOG_WRITER_UNHANDLED = 0,
 | |
| } GLogWriterOutput;
 | |
| 
 | |
| /**
 | |
|  * GLogField:
 | |
|  * @key: field name (UTF-8 string)
 | |
|  * @value: field value (arbitrary bytes)
 | |
|  * @length: length of @value, in bytes, or -1 if it is nul-terminated
 | |
|  *
 | |
|  * Structure representing a single field in a structured log entry. See
 | |
|  * g_log_structured() for details.
 | |
|  *
 | |
|  * Log fields may contain arbitrary values, including binary with embedded nul
 | |
|  * bytes. If the field contains a string, the string must be UTF-8 encoded and
 | |
|  * have a trailing nul byte. Otherwise, @length must be set to a non-negative
 | |
|  * value.
 | |
|  *
 | |
|  * Since: 2.50
 | |
|  */
 | |
| typedef struct _GLogField GLogField;
 | |
| struct _GLogField
 | |
| {
 | |
|   const gchar *key;
 | |
|   gconstpointer value;
 | |
|   gssize length;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * GLogWriterFunc:
 | |
|  * @log_level: log level of the message
 | |
|  * @fields: (array length=n_fields): fields forming the message
 | |
|  * @n_fields: number of @fields
 | |
|  * @user_data: user data passed to g_log_set_writer_func()
 | |
|  *
 | |
|  * Writer function for log entries. A log entry is a collection of one or more
 | |
|  * #GLogFields, using the standard [field names from journal
 | |
|  * specification](https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html).
 | |
|  * See g_log_structured() for more information.
 | |
|  *
 | |
|  * Writer functions must ignore fields which they do not recognise, unless they
 | |
|  * can write arbitrary binary output, as field values may be arbitrary binary.
 | |
|  *
 | |
|  * @log_level is guaranteed to be included in @fields as the `PRIORITY` field,
 | |
|  * but is provided separately for convenience of deciding whether or where to
 | |
|  * output the log entry.
 | |
|  *
 | |
|  * Returns: %G_LOG_WRITER_HANDLED if the log entry was handled successfully;
 | |
|  *    %G_LOG_WRITER_UNHANDLED otherwise
 | |
|  * Since: 2.50
 | |
|  */
 | |
| typedef GLogWriterOutput (*GLogWriterFunc)     (GLogLevelFlags   log_level,
 | |
|                                                 const GLogField *fields,
 | |
|                                                 gsize            n_fields,
 | |
|                                                 gpointer         user_data);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_50
 | |
| void             g_log_structured              (const gchar     *log_domain,
 | |
|                                                 GLogLevelFlags   log_level,
 | |
|                                                 ...);
 | |
| GLIB_AVAILABLE_IN_2_50
 | |
| void             g_log_structured_array        (GLogLevelFlags   log_level,
 | |
|                                                 const GLogField *fields,
 | |
|                                                 gsize            n_fields);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_50
 | |
| void             g_log_variant                 (const gchar     *log_domain,
 | |
|                                                 GLogLevelFlags   log_level,
 | |
|                                                 GVariant        *fields);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_50
 | |
| void             g_log_set_writer_func         (GLogWriterFunc   func,
 | |
|                                                 gpointer         user_data,
 | |
|                                                 GDestroyNotify   user_data_free);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_50
 | |
| gboolean         g_log_writer_supports_color   (gint             output_fd);
 | |
| GLIB_AVAILABLE_IN_2_50
 | |
| gboolean         g_log_writer_is_journald      (gint             output_fd);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_50
 | |
| gchar           *g_log_writer_format_fields    (GLogLevelFlags   log_level,
 | |
|                                                 const GLogField *fields,
 | |
|                                                 gsize            n_fields,
 | |
|                                                 gboolean         use_color);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_50
 | |
| GLogWriterOutput g_log_writer_journald         (GLogLevelFlags   log_level,
 | |
|                                                 const GLogField *fields,
 | |
|                                                 gsize            n_fields,
 | |
|                                                 gpointer         user_data);
 | |
| GLIB_AVAILABLE_IN_2_50
 | |
| GLogWriterOutput g_log_writer_standard_streams (GLogLevelFlags   log_level,
 | |
|                                                 const GLogField *fields,
 | |
|                                                 gsize            n_fields,
 | |
|                                                 gpointer         user_data);
 | |
| GLIB_AVAILABLE_IN_2_50
 | |
| GLogWriterOutput g_log_writer_default          (GLogLevelFlags   log_level,
 | |
|                                                 const GLogField *fields,
 | |
|                                                 gsize            n_fields,
 | |
|                                                 gpointer         user_data);
 | |
| 
 | |
| /**
 | |
|  * G_DEBUG_HERE:
 | |
|  *
 | |
|  * A convenience form of g_log_structured(), recommended to be added to
 | |
|  * functions when debugging. It prints the current monotonic time and the code
 | |
|  * location using %G_STRLOC.
 | |
|  *
 | |
|  * Since: 2.50
 | |
|  */
 | |
| #define G_DEBUG_HERE()                                          \
 | |
|   g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,            \
 | |
|                     "CODE_FILE", __FILE__,                      \
 | |
|                     "CODE_LINE", G_STRINGIFY (__LINE__),        \
 | |
|                     "CODE_FUNC", G_STRFUNC,                      \
 | |
|                     "MESSAGE", "%" G_GINT64_FORMAT ": %s",      \
 | |
|                     g_get_monotonic_time (), G_STRLOC)
 | |
| 
 | |
| /* internal */
 | |
| void	_g_log_fallback_handler	(const gchar   *log_domain,
 | |
| 						 GLogLevelFlags log_level,
 | |
| 						 const gchar   *message,
 | |
| 						 gpointer       unused_data);
 | |
| 
 | |
| /* Internal functions, used to implement the following macros */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_return_if_fail_warning (const char *log_domain,
 | |
| 			       const char *pretty_function,
 | |
| 			       const char *expression) G_ANALYZER_NORETURN;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_warn_message           (const char     *domain,
 | |
|                                const char     *file,
 | |
|                                int             line,
 | |
|                                const char     *func,
 | |
|                                const char     *warnexpr) G_ANALYZER_NORETURN;
 | |
| GLIB_DEPRECATED
 | |
| void g_assert_warning         (const char *log_domain,
 | |
| 			       const char *file,
 | |
| 			       const int   line,
 | |
| 		               const char *pretty_function,
 | |
| 		               const char *expression) G_GNUC_NORETURN;
 | |
| 
 | |
| 
 | |
| #ifndef G_LOG_DOMAIN
 | |
| #define G_LOG_DOMAIN    ((gchar*) 0)
 | |
| #endif  /* G_LOG_DOMAIN */
 | |
| 
 | |
| #if defined(G_HAVE_ISO_VARARGS) && !G_ANALYZER_ANALYZING
 | |
| #ifdef G_LOG_USE_STRUCTURED
 | |
| #define g_error(...)  G_STMT_START {                                            \
 | |
|                         g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR,      \
 | |
|                                           "CODE_FILE", __FILE__,                \
 | |
|                                           "CODE_LINE", G_STRINGIFY (__LINE__),  \
 | |
|                                           "CODE_FUNC", G_STRFUNC,                \
 | |
|                                           "MESSAGE", __VA_ARGS__);              \
 | |
|                         for (;;) ;                                              \
 | |
|                       } G_STMT_END
 | |
| #define g_message(...)  g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE,    \
 | |
|                                           "CODE_FILE", __FILE__,                \
 | |
|                                           "CODE_LINE", G_STRINGIFY (__LINE__),  \
 | |
|                                           "CODE_FUNC", G_STRFUNC,                \
 | |
|                                           "MESSAGE", __VA_ARGS__)
 | |
| #define g_critical(...) g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,   \
 | |
|                                           "CODE_FILE", __FILE__,                \
 | |
|                                           "CODE_LINE", G_STRINGIFY (__LINE__),  \
 | |
|                                           "CODE_FUNC", G_STRFUNC,                \
 | |
|                                           "MESSAGE", __VA_ARGS__)
 | |
| #define g_warning(...)  g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,    \
 | |
|                                           "CODE_FILE", __FILE__,                \
 | |
|                                           "CODE_LINE", G_STRINGIFY (__LINE__),  \
 | |
|                                           "CODE_FUNC", G_STRFUNC,                \
 | |
|                                           "MESSAGE", __VA_ARGS__)
 | |
| #define g_info(...)     g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_INFO,       \
 | |
|                                           "CODE_FILE", __FILE__,                \
 | |
|                                           "CODE_LINE", G_STRINGIFY (__LINE__),  \
 | |
|                                           "CODE_FUNC", G_STRFUNC,                \
 | |
|                                           "MESSAGE", __VA_ARGS__)
 | |
| #define g_debug(...)    g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,      \
 | |
|                                           "CODE_FILE", __FILE__,                \
 | |
|                                           "CODE_LINE", G_STRINGIFY (__LINE__),  \
 | |
|                                           "CODE_FUNC", G_STRFUNC,                \
 | |
|                                           "MESSAGE", __VA_ARGS__)
 | |
| #else
 | |
| /* for(;;) ; so that GCC knows that control doesn't go past g_error().
 | |
|  * Put space before ending semicolon to avoid C++ build warnings.
 | |
|  */
 | |
| #define g_error(...)  G_STMT_START {                 \
 | |
|                         g_log (G_LOG_DOMAIN,         \
 | |
|                                G_LOG_LEVEL_ERROR,    \
 | |
|                                __VA_ARGS__);         \
 | |
|                         for (;;) ;                   \
 | |
|                       } G_STMT_END
 | |
| #define g_message(...)  g_log (G_LOG_DOMAIN,         \
 | |
|                                G_LOG_LEVEL_MESSAGE,  \
 | |
|                                __VA_ARGS__)
 | |
| #define g_critical(...) g_log (G_LOG_DOMAIN,         \
 | |
|                                G_LOG_LEVEL_CRITICAL, \
 | |
|                                __VA_ARGS__)
 | |
| #define g_warning(...)  g_log (G_LOG_DOMAIN,         \
 | |
|                                G_LOG_LEVEL_WARNING,  \
 | |
|                                __VA_ARGS__)
 | |
| #define g_info(...)     g_log (G_LOG_DOMAIN,         \
 | |
|                                G_LOG_LEVEL_INFO,     \
 | |
|                                __VA_ARGS__)
 | |
| #define g_debug(...)    g_log (G_LOG_DOMAIN,         \
 | |
|                                G_LOG_LEVEL_DEBUG,    \
 | |
|                                __VA_ARGS__)
 | |
| #endif
 | |
| #elif defined(G_HAVE_GNUC_VARARGS)  && !G_ANALYZER_ANALYZING
 | |
| #ifdef G_LOG_USE_STRUCTURED
 | |
| #define g_error(format...)   G_STMT_START {                                          \
 | |
|                                g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR,    \
 | |
|                                                 "CODE_FILE", __FILE__,               \
 | |
|                                                 "CODE_LINE", G_STRINGIFY (__LINE__), \
 | |
|                                                 "CODE_FUNC", G_STRFUNC,               \
 | |
|                                                 "MESSAGE", format);                  \
 | |
|                                for (;;) ;                                            \
 | |
|                              } G_STMT_END
 | |
| #define g_message(format...)  g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE,   \
 | |
|                                                "CODE_FILE", __FILE__,                \
 | |
|                                                "CODE_LINE", G_STRINGIFY (__LINE__),  \
 | |
|                                                "CODE_FUNC", G_STRFUNC,                \
 | |
|                                                "MESSAGE", format)
 | |
| #define g_critical(format...) g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,  \
 | |
|                                                 "CODE_FILE", __FILE__,               \
 | |
|                                                 "CODE_LINE", G_STRINGIFY (__LINE__), \
 | |
|                                                 "CODE_FUNC", G_STRFUNC,               \
 | |
|                                                 "MESSAGE", format)
 | |
| #define g_warning(format...)  g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,   \
 | |
|                                                 "CODE_FILE", __FILE__,               \
 | |
|                                                 "CODE_LINE", G_STRINGIFY (__LINE__), \
 | |
|                                                 "CODE_FUNC", G_STRFUNC,               \
 | |
|                                                 "MESSAGE", format)
 | |
| #define g_info(format...)     g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_INFO,      \
 | |
|                                                 "CODE_FILE", __FILE__,               \
 | |
|                                                 "CODE_LINE", G_STRINGIFY (__LINE__), \
 | |
|                                                 "CODE_FUNC", G_STRFUNC,               \
 | |
|                                                 "MESSAGE", format)
 | |
| #define g_debug(format...)    g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,     \
 | |
|                                                 "CODE_FILE", __FILE__,               \
 | |
|                                                 "CODE_LINE", G_STRINGIFY (__LINE__), \
 | |
|                                                 "CODE_FUNC", G_STRFUNC,               \
 | |
|                                                 "MESSAGE", format)
 | |
| #else
 | |
| #define g_error(format...)    G_STMT_START {                 \
 | |
|                                 g_log (G_LOG_DOMAIN,         \
 | |
|                                        G_LOG_LEVEL_ERROR,    \
 | |
|                                        format);              \
 | |
|                                 for (;;) ;                   \
 | |
|                               } G_STMT_END
 | |
| 
 | |
| #define g_message(format...)    g_log (G_LOG_DOMAIN,         \
 | |
|                                        G_LOG_LEVEL_MESSAGE,  \
 | |
|                                        format)
 | |
| #define g_critical(format...)   g_log (G_LOG_DOMAIN,         \
 | |
|                                        G_LOG_LEVEL_CRITICAL, \
 | |
|                                        format)
 | |
| #define g_warning(format...)    g_log (G_LOG_DOMAIN,         \
 | |
|                                        G_LOG_LEVEL_WARNING,  \
 | |
|                                        format)
 | |
| #define g_info(format...)       g_log (G_LOG_DOMAIN,         \
 | |
|                                        G_LOG_LEVEL_INFO,     \
 | |
|                                        format)
 | |
| #define g_debug(format...)      g_log (G_LOG_DOMAIN,         \
 | |
|                                        G_LOG_LEVEL_DEBUG,    \
 | |
|                                        format)
 | |
| #endif
 | |
| #else   /* no varargs macros */
 | |
| static void g_error (const gchar *format, ...) G_GNUC_NORETURN G_ANALYZER_NORETURN;
 | |
| static void g_critical (const gchar *format, ...) G_ANALYZER_NORETURN;
 | |
| 
 | |
| static void
 | |
| g_error (const gchar *format,
 | |
|          ...)
 | |
| {
 | |
|   va_list args;
 | |
|   va_start (args, format);
 | |
|   g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, format, args);
 | |
|   va_end (args);
 | |
| 
 | |
|   for(;;) ;
 | |
| }
 | |
| static void
 | |
| g_message (const gchar *format,
 | |
|            ...)
 | |
| {
 | |
|   va_list args;
 | |
|   va_start (args, format);
 | |
|   g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, format, args);
 | |
|   va_end (args);
 | |
| }
 | |
| static void
 | |
| g_critical (const gchar *format,
 | |
|             ...)
 | |
| {
 | |
|   va_list args;
 | |
|   va_start (args, format);
 | |
|   g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, format, args);
 | |
|   va_end (args);
 | |
| }
 | |
| static void
 | |
| g_warning (const gchar *format,
 | |
|            ...)
 | |
| {
 | |
|   va_list args;
 | |
|   va_start (args, format);
 | |
|   g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, format, args);
 | |
|   va_end (args);
 | |
| }
 | |
| static void
 | |
| g_info (const gchar *format,
 | |
|         ...)
 | |
| {
 | |
|   va_list args;
 | |
|   va_start (args, format);
 | |
|   g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, format, args);
 | |
|   va_end (args);
 | |
| }
 | |
| static void
 | |
| g_debug (const gchar *format,
 | |
|          ...)
 | |
| {
 | |
|   va_list args;
 | |
|   va_start (args, format);
 | |
|   g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format, args);
 | |
|   va_end (args);
 | |
| }
 | |
| #endif  /* !__GNUC__ */
 | |
| 
 | |
| /**
 | |
|  * GPrintFunc:
 | |
|  * @string: the message to output
 | |
|  *
 | |
|  * Specifies the type of the print handler functions.
 | |
|  * These are called with the complete formatted string to output.
 | |
|  */
 | |
| typedef void    (*GPrintFunc)           (const gchar    *string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_print                 (const gchar    *format,
 | |
|                                          ...) G_GNUC_PRINTF (1, 2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GPrintFunc      g_set_print_handler     (GPrintFunc      func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_printerr              (const gchar    *format,
 | |
|                                          ...) G_GNUC_PRINTF (1, 2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GPrintFunc      g_set_printerr_handler  (GPrintFunc      func);
 | |
| 
 | |
| /**
 | |
|  * g_warn_if_reached:
 | |
|  *
 | |
|  * Logs a warning.
 | |
|  *
 | |
|  * Since: 2.16
 | |
|  */
 | |
| #define g_warn_if_reached() \
 | |
|   do { \
 | |
|     g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); \
 | |
|   } while (0)
 | |
| 
 | |
| /**
 | |
|  * g_warn_if_fail:
 | |
|  * @expr: the expression to check
 | |
|  *
 | |
|  * Logs a warning if the expression is not true.
 | |
|  *
 | |
|  * Since: 2.16
 | |
|  */
 | |
| #define g_warn_if_fail(expr) \
 | |
|   do { \
 | |
|     if G_LIKELY (expr) ; \
 | |
|     else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, #expr); \
 | |
|   } while (0)
 | |
| 
 | |
| #ifdef G_DISABLE_CHECKS
 | |
| 
 | |
| /**
 | |
|  * g_return_if_fail:
 | |
|  * @expr: the expression to check
 | |
|  *
 | |
|  * Verifies that the expression @expr, usually representing a precondition,
 | |
|  * evaluates to %TRUE. If the function returns a value, use
 | |
|  * g_return_val_if_fail() instead.
 | |
|  *
 | |
|  * If @expr evaluates to %FALSE, the current function should be considered to
 | |
|  * have undefined behaviour (a programmer error). The only correct solution
 | |
|  * to such an error is to change the module that is calling the current
 | |
|  * function, so that it avoids this incorrect call.
 | |
|  *
 | |
|  * To make this undefined behaviour visible, if @expr evaluates to %FALSE,
 | |
|  * the result is usually that a critical message is logged and the current
 | |
|  * function returns.
 | |
|  *
 | |
|  * If G_DISABLE_CHECKS is defined then the check is not performed.  You
 | |
|  * should therefore not depend on any side effects of @expr.
 | |
|  */
 | |
| #define g_return_if_fail(expr) G_STMT_START{ (void)0; }G_STMT_END
 | |
| 
 | |
| /**
 | |
|  * g_return_val_if_fail:
 | |
|  * @expr: the expression to check
 | |
|  * @val: the value to return from the current function
 | |
|  *       if the expression is not true
 | |
|  *
 | |
|  * Verifies that the expression @expr, usually representing a precondition,
 | |
|  * evaluates to %TRUE. If the function does not return a value, use
 | |
|  * g_return_if_fail() instead.
 | |
|  *
 | |
|  * If @expr evaluates to %FALSE, the current function should be considered to
 | |
|  * have undefined behaviour (a programmer error). The only correct solution
 | |
|  * to such an error is to change the module that is calling the current
 | |
|  * function, so that it avoids this incorrect call.
 | |
|  *
 | |
|  * To make this undefined behaviour visible, if @expr evaluates to %FALSE,
 | |
|  * the result is usually that a critical message is logged and @val is
 | |
|  * returned from the current function.
 | |
|  *
 | |
|  * If G_DISABLE_CHECKS is defined then the check is not performed.  You
 | |
|  * should therefore not depend on any side effects of @expr.
 | |
|  */
 | |
| #define g_return_val_if_fail(expr,val) G_STMT_START{ (void)0; }G_STMT_END
 | |
| 
 | |
| /**
 | |
|  * g_return_if_reached:
 | |
|  *
 | |
|  * Logs a critical message and returns from the current function.
 | |
|  * This can only be used in functions which do not return a value.
 | |
|  */
 | |
| #define g_return_if_reached() G_STMT_START{ return; }G_STMT_END
 | |
| 
 | |
| /**
 | |
|  * g_return_val_if_reached:
 | |
|  * @val: the value to return from the current function
 | |
|  *
 | |
|  * Logs a critical message and returns @val.
 | |
|  */
 | |
| #define g_return_val_if_reached(val) G_STMT_START{ return (val); }G_STMT_END
 | |
| 
 | |
| #else /* !G_DISABLE_CHECKS */
 | |
| 
 | |
| #define g_return_if_fail(expr)		G_STMT_START{			\
 | |
|      if G_LIKELY(expr) { } else       					\
 | |
|        {								\
 | |
| 	 g_return_if_fail_warning (G_LOG_DOMAIN,			\
 | |
| 		                   G_STRFUNC,				\
 | |
| 		                   #expr);				\
 | |
| 	 return;							\
 | |
|        };				}G_STMT_END
 | |
| 
 | |
| #define g_return_val_if_fail(expr,val)	G_STMT_START{			\
 | |
|      if G_LIKELY(expr) { } else						\
 | |
|        {								\
 | |
| 	 g_return_if_fail_warning (G_LOG_DOMAIN,			\
 | |
| 		                   G_STRFUNC,				\
 | |
| 		                   #expr);				\
 | |
| 	 return (val);							\
 | |
|        };				}G_STMT_END
 | |
| 
 | |
| #define g_return_if_reached()		G_STMT_START{			\
 | |
|      g_log (G_LOG_DOMAIN,						\
 | |
| 	    G_LOG_LEVEL_CRITICAL,					\
 | |
| 	    "file %s: line %d (%s): should not be reached",		\
 | |
| 	    __FILE__,							\
 | |
| 	    __LINE__,							\
 | |
| 	    G_STRFUNC);							\
 | |
|      return;				}G_STMT_END
 | |
| 
 | |
| #define g_return_val_if_reached(val)	G_STMT_START{			\
 | |
|      g_log (G_LOG_DOMAIN,						\
 | |
| 	    G_LOG_LEVEL_CRITICAL,					\
 | |
| 	    "file %s: line %d (%s): should not be reached",		\
 | |
| 	    __FILE__,							\
 | |
| 	    __LINE__,							\
 | |
| 	    G_STRFUNC);							\
 | |
|      return (val);			}G_STMT_END
 | |
| 
 | |
| #endif /* !G_DISABLE_CHECKS */
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_MESSAGES_H__ */
 | |
| /* goption.h - Option parser
 | |
|  *
 | |
|  *  Copyright (C) 2004  Anders Carlsson <andersca@gnome.org>
 | |
|  *
 | |
|  * 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, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_OPTION_H__
 | |
| #define __G_OPTION_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /**
 | |
|  * GOptionContext:
 | |
|  * 
 | |
|  * A `GOptionContext` struct defines which options
 | |
|  * are accepted by the commandline option parser. The struct has only private 
 | |
|  * fields and should not be directly accessed.
 | |
|  */
 | |
| typedef struct _GOptionContext GOptionContext;
 | |
| 
 | |
| /**
 | |
|  * GOptionGroup:
 | |
|  *
 | |
|  * A `GOptionGroup` struct defines the options in a single
 | |
|  * group. The struct has only private fields and should not be directly accessed.
 | |
|  *
 | |
|  * All options in a group share the same translation function. Libraries which
 | |
|  * need to parse commandline options are expected to provide a function for
 | |
|  * getting a `GOptionGroup` holding their options, which
 | |
|  * the application can then add to its #GOptionContext.
 | |
|  */
 | |
| typedef struct _GOptionGroup   GOptionGroup;
 | |
| typedef struct _GOptionEntry   GOptionEntry;
 | |
| 
 | |
| /**
 | |
|  * GOptionFlags:
 | |
|  * @G_OPTION_FLAG_NONE: No flags. Since: 2.42.
 | |
|  * @G_OPTION_FLAG_HIDDEN: The option doesn't appear in `--help` output.
 | |
|  * @G_OPTION_FLAG_IN_MAIN: The option appears in the main section of the
 | |
|  *     `--help` output, even if it is defined in a group.
 | |
|  * @G_OPTION_FLAG_REVERSE: For options of the %G_OPTION_ARG_NONE kind, this
 | |
|  *     flag indicates that the sense of the option is reversed.
 | |
|  * @G_OPTION_FLAG_NO_ARG: For options of the %G_OPTION_ARG_CALLBACK kind,
 | |
|  *     this flag indicates that the callback does not take any argument
 | |
|  *     (like a %G_OPTION_ARG_NONE option). Since 2.8
 | |
|  * @G_OPTION_FLAG_FILENAME: For options of the %G_OPTION_ARG_CALLBACK
 | |
|  *     kind, this flag indicates that the argument should be passed to the
 | |
|  *     callback in the GLib filename encoding rather than UTF-8. Since 2.8
 | |
|  * @G_OPTION_FLAG_OPTIONAL_ARG: For options of the %G_OPTION_ARG_CALLBACK 
 | |
|  *     kind, this flag indicates that the argument supply is optional.
 | |
|  *     If no argument is given then data of %GOptionParseFunc will be
 | |
|  *     set to NULL. Since 2.8
 | |
|  * @G_OPTION_FLAG_NOALIAS: This flag turns off the automatic conflict
 | |
|  *     resolution which prefixes long option names with `groupname-` if 
 | |
|  *     there is a conflict. This option should only be used in situations
 | |
|  *     where aliasing is necessary to model some legacy commandline interface.
 | |
|  *     It is not safe to use this option, unless all option groups are under
 | |
|  *     your direct control. Since 2.8.
 | |
|  *
 | |
|  * Flags which modify individual options.
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_OPTION_FLAG_NONE            = 0,
 | |
|   G_OPTION_FLAG_HIDDEN		= 1 << 0,
 | |
|   G_OPTION_FLAG_IN_MAIN		= 1 << 1,
 | |
|   G_OPTION_FLAG_REVERSE		= 1 << 2,
 | |
|   G_OPTION_FLAG_NO_ARG		= 1 << 3,
 | |
|   G_OPTION_FLAG_FILENAME	= 1 << 4,
 | |
|   G_OPTION_FLAG_OPTIONAL_ARG    = 1 << 5,
 | |
|   G_OPTION_FLAG_NOALIAS	        = 1 << 6
 | |
| } GOptionFlags;
 | |
| 
 | |
| /**
 | |
|  * GOptionArg:
 | |
|  * @G_OPTION_ARG_NONE: No extra argument. This is useful for simple flags.
 | |
|  * @G_OPTION_ARG_STRING: The option takes a string argument.
 | |
|  * @G_OPTION_ARG_INT: The option takes an integer argument.
 | |
|  * @G_OPTION_ARG_CALLBACK: The option provides a callback (of type
 | |
|  *     #GOptionArgFunc) to parse the extra argument.
 | |
|  * @G_OPTION_ARG_FILENAME: The option takes a filename as argument.
 | |
|  * @G_OPTION_ARG_STRING_ARRAY: The option takes a string argument, multiple
 | |
|  *     uses of the option are collected into an array of strings.
 | |
|  * @G_OPTION_ARG_FILENAME_ARRAY: The option takes a filename as argument, 
 | |
|  *     multiple uses of the option are collected into an array of strings.
 | |
|  * @G_OPTION_ARG_DOUBLE: The option takes a double argument. The argument
 | |
|  *     can be formatted either for the user's locale or for the "C" locale.
 | |
|  *     Since 2.12
 | |
|  * @G_OPTION_ARG_INT64: The option takes a 64-bit integer. Like
 | |
|  *     %G_OPTION_ARG_INT but for larger numbers. The number can be in
 | |
|  *     decimal base, or in hexadecimal (when prefixed with `0x`, for
 | |
|  *     example, `0xffffffff`). Since 2.12
 | |
|  * 
 | |
|  * The #GOptionArg enum values determine which type of extra argument the
 | |
|  * options expect to find. If an option expects an extra argument, it can
 | |
|  * be specified in several ways; with a short option: `-x arg`, with a long
 | |
|  * option: `--name arg` or combined in a single argument: `--name=arg`.
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_OPTION_ARG_NONE,
 | |
|   G_OPTION_ARG_STRING,
 | |
|   G_OPTION_ARG_INT,
 | |
|   G_OPTION_ARG_CALLBACK,
 | |
|   G_OPTION_ARG_FILENAME,
 | |
|   G_OPTION_ARG_STRING_ARRAY,
 | |
|   G_OPTION_ARG_FILENAME_ARRAY,
 | |
|   G_OPTION_ARG_DOUBLE,
 | |
|   G_OPTION_ARG_INT64
 | |
| } GOptionArg;
 | |
| 
 | |
| /**
 | |
|  * GOptionArgFunc:
 | |
|  * @option_name: The name of the option being parsed. This will be either a 
 | |
|  *  single dash followed by a single letter (for a short name) or two dashes
 | |
|  *  followed by a long option name.
 | |
|  * @value: The value to be parsed.
 | |
|  * @data: User data added to the #GOptionGroup containing the option when it
 | |
|  *  was created with g_option_group_new()
 | |
|  * @error: A return location for errors. The error code %G_OPTION_ERROR_FAILED
 | |
|  *  is intended to be used for errors in #GOptionArgFunc callbacks.
 | |
|  * 
 | |
|  * The type of function to be passed as callback for %G_OPTION_ARG_CALLBACK
 | |
|  * options.
 | |
|  * 
 | |
|  * Returns: %TRUE if the option was successfully parsed, %FALSE if an error 
 | |
|  *  occurred, in which case @error should be set with g_set_error()
 | |
|  */
 | |
| typedef gboolean (*GOptionArgFunc) (const gchar    *option_name,
 | |
| 				    const gchar    *value,
 | |
| 				    gpointer        data,
 | |
| 				    GError        **error);
 | |
| 
 | |
| /**
 | |
|  * GOptionParseFunc:
 | |
|  * @context: The active #GOptionContext
 | |
|  * @group: The group to which the function belongs
 | |
|  * @data: User data added to the #GOptionGroup containing the option when it
 | |
|  *  was created with g_option_group_new()
 | |
|  * @error: A return location for error details
 | |
|  * 
 | |
|  * The type of function that can be called before and after parsing. 
 | |
|  * 
 | |
|  * Returns: %TRUE if the function completed successfully, %FALSE if an error 
 | |
|  *  occurred, in which case @error should be set with g_set_error()
 | |
|  */
 | |
| typedef gboolean (*GOptionParseFunc) (GOptionContext *context,
 | |
| 				      GOptionGroup   *group,
 | |
| 				      gpointer	      data,
 | |
| 				      GError        **error);
 | |
| 
 | |
| /**
 | |
|  * GOptionErrorFunc:
 | |
|  * @context: The active #GOptionContext
 | |
|  * @group: The group to which the function belongs
 | |
|  * @data: User data added to the #GOptionGroup containing the option when it
 | |
|  *  was created with g_option_group_new()
 | |
|  * @error: The #GError containing details about the parse error
 | |
|  * 
 | |
|  * The type of function to be used as callback when a parse error occurs.
 | |
|  */
 | |
| typedef void (*GOptionErrorFunc) (GOptionContext *context,
 | |
| 				  GOptionGroup   *group,
 | |
| 				  gpointer        data,
 | |
| 				  GError        **error);
 | |
| 
 | |
| /**
 | |
|  * G_OPTION_ERROR:
 | |
|  * 
 | |
|  * Error domain for option parsing. Errors in this domain will
 | |
|  * be from the #GOptionError enumeration. See #GError for information on 
 | |
|  * error domains.
 | |
|  */
 | |
| #define G_OPTION_ERROR (g_option_error_quark ())
 | |
| 
 | |
| /**
 | |
|  * GOptionError:
 | |
|  * @G_OPTION_ERROR_UNKNOWN_OPTION: An option was not known to the parser.
 | |
|  *  This error will only be reported, if the parser hasn't been instructed
 | |
|  *  to ignore unknown options, see g_option_context_set_ignore_unknown_options().
 | |
|  * @G_OPTION_ERROR_BAD_VALUE: A value couldn't be parsed.
 | |
|  * @G_OPTION_ERROR_FAILED: A #GOptionArgFunc callback failed.
 | |
|  * 
 | |
|  * Error codes returned by option parsing.
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_OPTION_ERROR_UNKNOWN_OPTION,
 | |
|   G_OPTION_ERROR_BAD_VALUE,
 | |
|   G_OPTION_ERROR_FAILED
 | |
| } GOptionError;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQuark g_option_error_quark (void);
 | |
| 
 | |
| /**
 | |
|  * GOptionEntry:
 | |
|  * @long_name: The long name of an option can be used to specify it
 | |
|  *     in a commandline as `--long_name`. Every option must have a
 | |
|  *     long name. To resolve conflicts if multiple option groups contain
 | |
|  *     the same long name, it is also possible to specify the option as 
 | |
|  *     `--groupname-long_name`.
 | |
|  * @short_name: If an option has a short name, it can be specified
 | |
|  *     `-short_name` in a commandline. @short_name must be  a printable
 | |
|  *     ASCII character different from '-', or zero if the option has no
 | |
|  *     short name.
 | |
|  * @flags: Flags from #GOptionFlags
 | |
|  * @arg: The type of the option, as a #GOptionArg
 | |
|  * @arg_data: If the @arg type is %G_OPTION_ARG_CALLBACK, then @arg_data
 | |
|  *     must point to a #GOptionArgFunc callback function, which will be
 | |
|  *     called to handle the extra argument. Otherwise, @arg_data is a
 | |
|  *     pointer to a location to store the value, the required type of
 | |
|  *     the location depends on the @arg type:
 | |
|  *     - %G_OPTION_ARG_NONE: %gboolean
 | |
|  *     - %G_OPTION_ARG_STRING: %gchar*
 | |
|  *     - %G_OPTION_ARG_INT: %gint
 | |
|  *     - %G_OPTION_ARG_FILENAME: %gchar*
 | |
|  *     - %G_OPTION_ARG_STRING_ARRAY: %gchar**
 | |
|  *     - %G_OPTION_ARG_FILENAME_ARRAY: %gchar**
 | |
|  *     - %G_OPTION_ARG_DOUBLE: %gdouble
 | |
|  *     If @arg type is %G_OPTION_ARG_STRING or %G_OPTION_ARG_FILENAME,
 | |
|  *     the location will contain a newly allocated string if the option
 | |
|  *     was given. That string needs to be freed by the callee using g_free().
 | |
|  *     Likewise if @arg type is %G_OPTION_ARG_STRING_ARRAY or
 | |
|  *     %G_OPTION_ARG_FILENAME_ARRAY, the data should be freed using g_strfreev().
 | |
|  * @description: the description for the option in `--help`
 | |
|  *     output. The @description is translated using the @translate_func
 | |
|  *     of the group, see g_option_group_set_translation_domain().
 | |
|  * @arg_description: The placeholder to use for the extra argument parsed
 | |
|  *     by the option in `--help` output. The @arg_description is translated
 | |
|  *     using the @translate_func of the group, see
 | |
|  *     g_option_group_set_translation_domain().
 | |
|  * 
 | |
|  * A GOptionEntry struct defines a single option. To have an effect, they
 | |
|  * must be added to a #GOptionGroup with g_option_context_add_main_entries()
 | |
|  * or g_option_group_add_entries().
 | |
|  */
 | |
| struct _GOptionEntry
 | |
| {
 | |
|   const gchar *long_name;
 | |
|   gchar        short_name;
 | |
|   gint         flags;
 | |
| 
 | |
|   GOptionArg   arg;
 | |
|   gpointer     arg_data;
 | |
|   
 | |
|   const gchar *description;
 | |
|   const gchar *arg_description;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * G_OPTION_REMAINING:
 | |
|  * 
 | |
|  * If a long option in the main group has this name, it is not treated as a 
 | |
|  * regular option. Instead it collects all non-option arguments which would
 | |
|  * otherwise be left in `argv`. The option must be of type
 | |
|  * %G_OPTION_ARG_CALLBACK, %G_OPTION_ARG_STRING_ARRAY
 | |
|  * or %G_OPTION_ARG_FILENAME_ARRAY.
 | |
|  * 
 | |
|  * 
 | |
|  * Using #G_OPTION_REMAINING instead of simply scanning `argv`
 | |
|  * for leftover arguments has the advantage that GOption takes care of 
 | |
|  * necessary encoding conversions for strings or filenames.
 | |
|  * 
 | |
|  * Since: 2.6
 | |
|  */
 | |
| #define G_OPTION_REMAINING ""
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GOptionContext *g_option_context_new              (const gchar         *parameter_string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_option_context_set_summary      (GOptionContext      *context,
 | |
|                                                    const gchar         *summary);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *   g_option_context_get_summary      (GOptionContext     *context);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_option_context_set_description  (GOptionContext      *context,
 | |
|                                                    const gchar         *description);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *   g_option_context_get_description  (GOptionContext     *context);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_option_context_free             (GOptionContext      *context);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		g_option_context_set_help_enabled (GOptionContext      *context,
 | |
| 						   gboolean		help_enabled);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	g_option_context_get_help_enabled (GOptionContext      *context);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		g_option_context_set_ignore_unknown_options (GOptionContext *context,
 | |
| 							     gboolean	     ignore_unknown);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean        g_option_context_get_ignore_unknown_options (GOptionContext *context);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_44
 | |
| void            g_option_context_set_strict_posix           (GOptionContext *context,
 | |
|                                                              gboolean        strict_posix);
 | |
| GLIB_AVAILABLE_IN_2_44
 | |
| gboolean        g_option_context_get_strict_posix           (GOptionContext *context);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_option_context_add_main_entries (GOptionContext      *context,
 | |
| 						   const GOptionEntry  *entries,
 | |
| 						   const gchar         *translation_domain);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean        g_option_context_parse            (GOptionContext      *context,
 | |
| 						   gint                *argc,
 | |
| 						   gchar             ***argv,
 | |
| 						   GError             **error);
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| gboolean        g_option_context_parse_strv       (GOptionContext      *context,
 | |
|                                                    gchar             ***arguments,
 | |
|                                                    GError             **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_option_context_set_translate_func (GOptionContext     *context,
 | |
| 						     GTranslateFunc      func,
 | |
| 						     gpointer            data,
 | |
| 						     GDestroyNotify      destroy_notify);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_option_context_set_translation_domain (GOptionContext  *context,
 | |
| 							 const gchar     *domain);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_option_context_add_group      (GOptionContext *context,
 | |
| 						 GOptionGroup   *group);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void          g_option_context_set_main_group (GOptionContext *context,
 | |
| 					       GOptionGroup   *group);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GOptionGroup *g_option_context_get_main_group (GOptionContext *context);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar        *g_option_context_get_help       (GOptionContext *context,
 | |
|                                                gboolean        main_help,
 | |
|                                                GOptionGroup   *group);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GOptionGroup *g_option_group_new                    (const gchar        *name,
 | |
| 						     const gchar        *description,
 | |
| 						     const gchar        *help_description,
 | |
| 						     gpointer            user_data,
 | |
| 						     GDestroyNotify      destroy);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	      g_option_group_set_parse_hooks	    (GOptionGroup       *group,
 | |
| 						     GOptionParseFunc    pre_parse_func,
 | |
| 						     GOptionParseFunc	 post_parse_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	      g_option_group_set_error_hook	    (GOptionGroup       *group,
 | |
| 						     GOptionErrorFunc	 error_func);
 | |
| GLIB_DEPRECATED_IN_2_44
 | |
| void          g_option_group_free                   (GOptionGroup       *group);
 | |
| GLIB_AVAILABLE_IN_2_44
 | |
| GOptionGroup *g_option_group_ref                    (GOptionGroup       *group);
 | |
| GLIB_AVAILABLE_IN_2_44
 | |
| void          g_option_group_unref                  (GOptionGroup       *group);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void          g_option_group_add_entries            (GOptionGroup       *group,
 | |
| 						     const GOptionEntry *entries);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void          g_option_group_set_translate_func     (GOptionGroup       *group,
 | |
| 						     GTranslateFunc      func,
 | |
| 						     gpointer            data,
 | |
| 						     GDestroyNotify      destroy_notify);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void          g_option_group_set_translation_domain (GOptionGroup       *group,
 | |
| 						     const gchar        *domain);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_OPTION_H__ */
 | |
| /* GLIB - Library of useful routines for C programming
 | |
|  * Copyright (C) 1995-1997, 1999  Peter Mattis, Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_PATTERN_H__
 | |
| #define __G_PATTERN_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| 
 | |
| typedef struct _GPatternSpec    GPatternSpec;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GPatternSpec* g_pattern_spec_new       (const gchar  *pattern);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void          g_pattern_spec_free      (GPatternSpec *pspec);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean      g_pattern_spec_equal     (GPatternSpec *pspec1,
 | |
| 					GPatternSpec *pspec2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean      g_pattern_match          (GPatternSpec *pspec,
 | |
| 					guint         string_length,
 | |
| 					const gchar  *string,
 | |
| 					const gchar  *string_reversed);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean      g_pattern_match_string   (GPatternSpec *pspec,
 | |
| 					const gchar  *string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean      g_pattern_match_simple   (const gchar  *pattern,
 | |
| 					const gchar  *string);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_PATTERN_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_PRIMES_H__
 | |
| #define __G_PRIMES_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* Prime numbers.
 | |
|  */
 | |
| 
 | |
| /* This function returns prime numbers spaced by approximately 1.5-2.0
 | |
|  * and is for use in resizing data structures which prefer
 | |
|  * prime-valued sizes.	The closest spaced prime function returns the
 | |
|  * next largest prime, or the highest it knows about which is about
 | |
|  * MAXINT/4.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint	   g_spaced_primes_closest (guint num) G_GNUC_CONST;
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_PRIMES_H__ */
 | |
|  /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_QSORT_H__
 | |
| #define __G_QSORT_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_qsort_with_data (gconstpointer    pbase,
 | |
| 			gint             total_elems,
 | |
| 			gsize            size,
 | |
| 			GCompareDataFunc compare_func,
 | |
| 			gpointer         user_data);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_QSORT_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_QUEUE_H__
 | |
| #define __G_QUEUE_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GQueue GQueue;
 | |
| 
 | |
| /**
 | |
|  * GQueue:
 | |
|  * @head: a pointer to the first element of the queue
 | |
|  * @tail: a pointer to the last element of the queue
 | |
|  * @length: the number of elements in the queue
 | |
|  *
 | |
|  * Contains the public fields of a
 | |
|  * [Queue][glib-Double-ended-Queues].
 | |
|  */
 | |
| struct _GQueue
 | |
| {
 | |
|   GList *head;
 | |
|   GList *tail;
 | |
|   guint  length;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * G_QUEUE_INIT:
 | |
|  *
 | |
|  * A statically-allocated #GQueue must be initialized with this
 | |
|  * macro before it can be used. This macro can be used to initialize
 | |
|  * a variable, but it cannot be assigned to a variable. In that case
 | |
|  * you have to use g_queue_init().
 | |
|  *
 | |
|  * |[
 | |
|  * GQueue my_queue = G_QUEUE_INIT;
 | |
|  * ]|
 | |
|  *
 | |
|  * Since: 2.14
 | |
|  */
 | |
| #define G_QUEUE_INIT { NULL, NULL, 0 }
 | |
| 
 | |
| /* Queues
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQueue*  g_queue_new            (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_queue_free           (GQueue           *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_queue_free_full      (GQueue           *queue,
 | |
| 				GDestroyNotify    free_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_queue_init           (GQueue           *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_queue_clear          (GQueue           *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_queue_is_empty       (GQueue           *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_queue_get_length     (GQueue           *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_queue_reverse        (GQueue           *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQueue * g_queue_copy           (GQueue           *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_queue_foreach        (GQueue           *queue,
 | |
|                                  GFunc             func,
 | |
|                                  gpointer          user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList *  g_queue_find           (GQueue           *queue,
 | |
|                                  gconstpointer     data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList *  g_queue_find_custom    (GQueue           *queue,
 | |
|                                  gconstpointer     data,
 | |
|                                  GCompareFunc      func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_queue_sort           (GQueue           *queue,
 | |
|                                  GCompareDataFunc  compare_func,
 | |
|                                  gpointer          user_data);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_queue_push_head      (GQueue           *queue,
 | |
|                                  gpointer          data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_queue_push_tail      (GQueue           *queue,
 | |
|                                  gpointer          data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_queue_push_nth       (GQueue           *queue,
 | |
|                                  gpointer          data,
 | |
|                                  gint              n);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_queue_pop_head       (GQueue           *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_queue_pop_tail       (GQueue           *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_queue_pop_nth        (GQueue           *queue,
 | |
|                                  guint             n);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_queue_peek_head      (GQueue           *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_queue_peek_tail      (GQueue           *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_queue_peek_nth       (GQueue           *queue,
 | |
|                                  guint             n);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint     g_queue_index          (GQueue           *queue,
 | |
|                                  gconstpointer     data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_queue_remove         (GQueue           *queue,
 | |
|                                  gconstpointer     data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint    g_queue_remove_all     (GQueue           *queue,
 | |
|                                  gconstpointer     data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_queue_insert_before  (GQueue           *queue,
 | |
|                                  GList            *sibling,
 | |
|                                  gpointer          data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_queue_insert_after   (GQueue           *queue,
 | |
|                                  GList            *sibling,
 | |
|                                  gpointer          data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_queue_insert_sorted  (GQueue           *queue,
 | |
|                                  gpointer          data,
 | |
|                                  GCompareDataFunc  func,
 | |
|                                  gpointer          user_data);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_queue_push_head_link (GQueue           *queue,
 | |
|                                  GList            *link_);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_queue_push_tail_link (GQueue           *queue,
 | |
|                                  GList            *link_);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_queue_push_nth_link  (GQueue           *queue,
 | |
|                                  gint              n,
 | |
|                                  GList            *link_);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_queue_pop_head_link  (GQueue           *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_queue_pop_tail_link  (GQueue           *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_queue_pop_nth_link   (GQueue           *queue,
 | |
|                                  guint             n);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_queue_peek_head_link (GQueue           *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_queue_peek_tail_link (GQueue           *queue);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*   g_queue_peek_nth_link  (GQueue           *queue,
 | |
|                                  guint             n);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint     g_queue_link_index     (GQueue           *queue,
 | |
|                                  GList            *link_);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_queue_unlink         (GQueue           *queue,
 | |
|                                  GList            *link_);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_queue_delete_link    (GQueue           *queue,
 | |
|                                  GList            *link_);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_QUEUE_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_RAND_H__
 | |
| #define __G_RAND_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GRand           GRand;
 | |
| 
 | |
| /* GRand - a good and fast random number generator: Mersenne Twister
 | |
|  * see http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html for more info.
 | |
|  * The range functions return a value in the intervall [begin, end).
 | |
|  * int          -> [0..2^32-1]
 | |
|  * int_range    -> [begin..end-1]
 | |
|  * double       -> [0..1)
 | |
|  * double_range -> [begin..end)
 | |
|  */
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GRand*  g_rand_new_with_seed  (guint32  seed);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GRand*  g_rand_new_with_seed_array (const guint32 *seed,
 | |
| 				    guint seed_length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GRand*  g_rand_new            (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_rand_free           (GRand   *rand_);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GRand*  g_rand_copy           (GRand   *rand_);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_rand_set_seed       (GRand   *rand_,
 | |
| 			       guint32  seed);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	g_rand_set_seed_array (GRand   *rand_,
 | |
| 			       const guint32 *seed,
 | |
| 			       guint    seed_length);
 | |
| 
 | |
| #define g_rand_boolean(rand_) ((g_rand_int (rand_) & (1 << 15)) != 0)
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint32 g_rand_int            (GRand   *rand_);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint32  g_rand_int_range      (GRand   *rand_,
 | |
| 			       gint32   begin,
 | |
| 			       gint32   end);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gdouble g_rand_double         (GRand   *rand_);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gdouble g_rand_double_range   (GRand   *rand_,
 | |
| 			       gdouble  begin,
 | |
| 			       gdouble  end);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_random_set_seed     (guint32  seed);
 | |
| 
 | |
| #define g_random_boolean() ((g_random_int () & (1 << 15)) != 0)
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint32 g_random_int          (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint32  g_random_int_range    (gint32   begin,
 | |
| 			       gint32   end);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gdouble g_random_double       (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gdouble g_random_double_range (gdouble  begin,
 | |
| 			       gdouble  end);
 | |
| 
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_RAND_H__ */
 | |
| /* GRegex -- regular expression API wrapper around PCRE.
 | |
|  *
 | |
|  * Copyright (C) 1999, 2000 Scott Wimer
 | |
|  * Copyright (C) 2004, Matthias Clasen <mclasen@redhat.com>
 | |
|  * Copyright (C) 2005 - 2007, Marco Barisione <marco@barisione.org>
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * License as published by the Free Software Foundation; either
 | |
|  * version 2.1 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public License
 | |
|  * along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_REGEX_H__
 | |
| #define __G_REGEX_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /**
 | |
|  * GRegexError:
 | |
|  * @G_REGEX_ERROR_COMPILE: Compilation of the regular expression failed.
 | |
|  * @G_REGEX_ERROR_OPTIMIZE: Optimization of the regular expression failed.
 | |
|  * @G_REGEX_ERROR_REPLACE: Replacement failed due to an ill-formed replacement
 | |
|  *     string.
 | |
|  * @G_REGEX_ERROR_MATCH: The match process failed.
 | |
|  * @G_REGEX_ERROR_INTERNAL: Internal error of the regular expression engine.
 | |
|  *     Since 2.16
 | |
|  * @G_REGEX_ERROR_STRAY_BACKSLASH: "\\" at end of pattern. Since 2.16
 | |
|  * @G_REGEX_ERROR_MISSING_CONTROL_CHAR: "\\c" at end of pattern. Since 2.16
 | |
|  * @G_REGEX_ERROR_UNRECOGNIZED_ESCAPE: Unrecognized character follows "\\".
 | |
|  *     Since 2.16
 | |
|  * @G_REGEX_ERROR_QUANTIFIERS_OUT_OF_ORDER: Numbers out of order in "{}"
 | |
|  *     quantifier. Since 2.16
 | |
|  * @G_REGEX_ERROR_QUANTIFIER_TOO_BIG: Number too big in "{}" quantifier.
 | |
|  *     Since 2.16
 | |
|  * @G_REGEX_ERROR_UNTERMINATED_CHARACTER_CLASS: Missing terminating "]" for
 | |
|  *     character class. Since 2.16
 | |
|  * @G_REGEX_ERROR_INVALID_ESCAPE_IN_CHARACTER_CLASS: Invalid escape sequence
 | |
|  *     in character class. Since 2.16
 | |
|  * @G_REGEX_ERROR_RANGE_OUT_OF_ORDER: Range out of order in character class.
 | |
|  *     Since 2.16
 | |
|  * @G_REGEX_ERROR_NOTHING_TO_REPEAT: Nothing to repeat. Since 2.16
 | |
|  * @G_REGEX_ERROR_UNRECOGNIZED_CHARACTER: Unrecognized character after "(?",
 | |
|  *     "(?<" or "(?P". Since 2.16
 | |
|  * @G_REGEX_ERROR_POSIX_NAMED_CLASS_OUTSIDE_CLASS: POSIX named classes are
 | |
|  *     supported only within a class. Since 2.16
 | |
|  * @G_REGEX_ERROR_UNMATCHED_PARENTHESIS: Missing terminating ")" or ")"
 | |
|  *     without opening "(". Since 2.16
 | |
|  * @G_REGEX_ERROR_INEXISTENT_SUBPATTERN_REFERENCE: Reference to non-existent
 | |
|  *     subpattern. Since 2.16
 | |
|  * @G_REGEX_ERROR_UNTERMINATED_COMMENT: Missing terminating ")" after comment.
 | |
|  *     Since 2.16
 | |
|  * @G_REGEX_ERROR_EXPRESSION_TOO_LARGE: Regular expression too large.
 | |
|  *     Since 2.16
 | |
|  * @G_REGEX_ERROR_MEMORY_ERROR: Failed to get memory. Since 2.16
 | |
|  * @G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND: Lookbehind assertion is not
 | |
|  *     fixed length. Since 2.16
 | |
|  * @G_REGEX_ERROR_MALFORMED_CONDITION: Malformed number or name after "(?(".
 | |
|  *     Since 2.16
 | |
|  * @G_REGEX_ERROR_TOO_MANY_CONDITIONAL_BRANCHES: Conditional group contains
 | |
|  *     more than two branches. Since 2.16
 | |
|  * @G_REGEX_ERROR_ASSERTION_EXPECTED: Assertion expected after "(?(".
 | |
|  *     Since 2.16
 | |
|  * @G_REGEX_ERROR_UNKNOWN_POSIX_CLASS_NAME: Unknown POSIX class name.
 | |
|  *     Since 2.16
 | |
|  * @G_REGEX_ERROR_POSIX_COLLATING_ELEMENTS_NOT_SUPPORTED: POSIX collating
 | |
|  *     elements are not supported. Since 2.16
 | |
|  * @G_REGEX_ERROR_HEX_CODE_TOO_LARGE: Character value in "\\x{...}" sequence
 | |
|  *     is too large. Since 2.16
 | |
|  * @G_REGEX_ERROR_INVALID_CONDITION: Invalid condition "(?(0)". Since 2.16
 | |
|  * @G_REGEX_ERROR_SINGLE_BYTE_MATCH_IN_LOOKBEHIND: \\C not allowed in
 | |
|  *     lookbehind assertion. Since 2.16
 | |
|  * @G_REGEX_ERROR_INFINITE_LOOP: Recursive call could loop indefinitely.
 | |
|  *     Since 2.16
 | |
|  * @G_REGEX_ERROR_MISSING_SUBPATTERN_NAME_TERMINATOR: Missing terminator
 | |
|  *     in subpattern name. Since 2.16
 | |
|  * @G_REGEX_ERROR_DUPLICATE_SUBPATTERN_NAME: Two named subpatterns have
 | |
|  *     the same name. Since 2.16
 | |
|  * @G_REGEX_ERROR_MALFORMED_PROPERTY: Malformed "\\P" or "\\p" sequence.
 | |
|  *     Since 2.16
 | |
|  * @G_REGEX_ERROR_UNKNOWN_PROPERTY: Unknown property name after "\\P" or
 | |
|  *     "\\p". Since 2.16
 | |
|  * @G_REGEX_ERROR_SUBPATTERN_NAME_TOO_LONG: Subpattern name is too long
 | |
|  *     (maximum 32 characters). Since 2.16
 | |
|  * @G_REGEX_ERROR_TOO_MANY_SUBPATTERNS: Too many named subpatterns (maximum
 | |
|  *     10,000). Since 2.16
 | |
|  * @G_REGEX_ERROR_INVALID_OCTAL_VALUE: Octal value is greater than "\\377".
 | |
|  *     Since 2.16
 | |
|  * @G_REGEX_ERROR_TOO_MANY_BRANCHES_IN_DEFINE: "DEFINE" group contains more
 | |
|  *     than one branch. Since 2.16
 | |
|  * @G_REGEX_ERROR_DEFINE_REPETION: Repeating a "DEFINE" group is not allowed.
 | |
|  *     This error is never raised. Since: 2.16 Deprecated: 2.34
 | |
|  * @G_REGEX_ERROR_INCONSISTENT_NEWLINE_OPTIONS: Inconsistent newline options.
 | |
|  *     Since 2.16
 | |
|  * @G_REGEX_ERROR_MISSING_BACK_REFERENCE: "\\g" is not followed by a braced,
 | |
|  *      angle-bracketed, or quoted name or number, or by a plain number. Since: 2.16
 | |
|  * @G_REGEX_ERROR_INVALID_RELATIVE_REFERENCE: relative reference must not be zero. Since: 2.34
 | |
|  * @G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_FORBIDDEN: the backtracing
 | |
|  *     control verb used does not allow an argument. Since: 2.34
 | |
|  * @G_REGEX_ERROR_UNKNOWN_BACKTRACKING_CONTROL_VERB: unknown backtracing 
 | |
|  *     control verb. Since: 2.34
 | |
|  * @G_REGEX_ERROR_NUMBER_TOO_BIG: number is too big in escape sequence. Since: 2.34
 | |
|  * @G_REGEX_ERROR_MISSING_SUBPATTERN_NAME: Missing subpattern name. Since: 2.34
 | |
|  * @G_REGEX_ERROR_MISSING_DIGIT: Missing digit. Since 2.34
 | |
|  * @G_REGEX_ERROR_INVALID_DATA_CHARACTER: In JavaScript compatibility mode,
 | |
|  *     "[" is an invalid data character. Since: 2.34
 | |
|  * @G_REGEX_ERROR_EXTRA_SUBPATTERN_NAME: different names for subpatterns of the 
 | |
|  *     same number are not allowed. Since: 2.34
 | |
|  * @G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_REQUIRED: the backtracing control
 | |
|  *     verb requires an argument. Since: 2.34
 | |
|  * @G_REGEX_ERROR_INVALID_CONTROL_CHAR: "\\c" must be followed by an ASCII 
 | |
|  *     character. Since: 2.34
 | |
|  * @G_REGEX_ERROR_MISSING_NAME: "\\k" is not followed by a braced, angle-bracketed, or 
 | |
|  *     quoted name. Since: 2.34
 | |
|  * @G_REGEX_ERROR_NOT_SUPPORTED_IN_CLASS: "\\N" is not supported in a class. Since: 2.34
 | |
|  * @G_REGEX_ERROR_TOO_MANY_FORWARD_REFERENCES: too many forward references. Since: 2.34
 | |
|  * @G_REGEX_ERROR_NAME_TOO_LONG: the name is too long in "(*MARK)", "(*PRUNE)", 
 | |
|  *     "(*SKIP)", or "(*THEN)". Since: 2.34
 | |
|  * @G_REGEX_ERROR_CHARACTER_VALUE_TOO_LARGE: the character value in the \\u sequence is
 | |
|  *     too large. Since: 2.34
 | |
|  *
 | |
|  * Error codes returned by regular expressions functions.
 | |
|  *
 | |
|  * Since: 2.14
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_REGEX_ERROR_COMPILE,
 | |
|   G_REGEX_ERROR_OPTIMIZE,
 | |
|   G_REGEX_ERROR_REPLACE,
 | |
|   G_REGEX_ERROR_MATCH,
 | |
|   G_REGEX_ERROR_INTERNAL,
 | |
| 
 | |
|   /* These are the error codes from PCRE + 100 */
 | |
|   G_REGEX_ERROR_STRAY_BACKSLASH = 101,
 | |
|   G_REGEX_ERROR_MISSING_CONTROL_CHAR = 102,
 | |
|   G_REGEX_ERROR_UNRECOGNIZED_ESCAPE = 103,
 | |
|   G_REGEX_ERROR_QUANTIFIERS_OUT_OF_ORDER = 104,
 | |
|   G_REGEX_ERROR_QUANTIFIER_TOO_BIG = 105,
 | |
|   G_REGEX_ERROR_UNTERMINATED_CHARACTER_CLASS = 106,
 | |
|   G_REGEX_ERROR_INVALID_ESCAPE_IN_CHARACTER_CLASS = 107,
 | |
|   G_REGEX_ERROR_RANGE_OUT_OF_ORDER = 108,
 | |
|   G_REGEX_ERROR_NOTHING_TO_REPEAT = 109,
 | |
|   G_REGEX_ERROR_UNRECOGNIZED_CHARACTER = 112,
 | |
|   G_REGEX_ERROR_POSIX_NAMED_CLASS_OUTSIDE_CLASS = 113,
 | |
|   G_REGEX_ERROR_UNMATCHED_PARENTHESIS = 114,
 | |
|   G_REGEX_ERROR_INEXISTENT_SUBPATTERN_REFERENCE = 115,
 | |
|   G_REGEX_ERROR_UNTERMINATED_COMMENT = 118,
 | |
|   G_REGEX_ERROR_EXPRESSION_TOO_LARGE = 120,
 | |
|   G_REGEX_ERROR_MEMORY_ERROR = 121,
 | |
|   G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND = 125,
 | |
|   G_REGEX_ERROR_MALFORMED_CONDITION = 126,
 | |
|   G_REGEX_ERROR_TOO_MANY_CONDITIONAL_BRANCHES = 127,
 | |
|   G_REGEX_ERROR_ASSERTION_EXPECTED = 128,
 | |
|   G_REGEX_ERROR_UNKNOWN_POSIX_CLASS_NAME = 130,
 | |
|   G_REGEX_ERROR_POSIX_COLLATING_ELEMENTS_NOT_SUPPORTED = 131,
 | |
|   G_REGEX_ERROR_HEX_CODE_TOO_LARGE = 134,
 | |
|   G_REGEX_ERROR_INVALID_CONDITION = 135,
 | |
|   G_REGEX_ERROR_SINGLE_BYTE_MATCH_IN_LOOKBEHIND = 136,
 | |
|   G_REGEX_ERROR_INFINITE_LOOP = 140,
 | |
|   G_REGEX_ERROR_MISSING_SUBPATTERN_NAME_TERMINATOR = 142,
 | |
|   G_REGEX_ERROR_DUPLICATE_SUBPATTERN_NAME = 143,
 | |
|   G_REGEX_ERROR_MALFORMED_PROPERTY = 146,
 | |
|   G_REGEX_ERROR_UNKNOWN_PROPERTY = 147,
 | |
|   G_REGEX_ERROR_SUBPATTERN_NAME_TOO_LONG = 148,
 | |
|   G_REGEX_ERROR_TOO_MANY_SUBPATTERNS = 149,
 | |
|   G_REGEX_ERROR_INVALID_OCTAL_VALUE = 151,
 | |
|   G_REGEX_ERROR_TOO_MANY_BRANCHES_IN_DEFINE = 154,
 | |
|   G_REGEX_ERROR_DEFINE_REPETION = 155,
 | |
|   G_REGEX_ERROR_INCONSISTENT_NEWLINE_OPTIONS = 156,
 | |
|   G_REGEX_ERROR_MISSING_BACK_REFERENCE = 157,
 | |
|   G_REGEX_ERROR_INVALID_RELATIVE_REFERENCE = 158,
 | |
|   G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_FORBIDDEN = 159,
 | |
|   G_REGEX_ERROR_UNKNOWN_BACKTRACKING_CONTROL_VERB  = 160,
 | |
|   G_REGEX_ERROR_NUMBER_TOO_BIG = 161,
 | |
|   G_REGEX_ERROR_MISSING_SUBPATTERN_NAME = 162,
 | |
|   G_REGEX_ERROR_MISSING_DIGIT = 163,
 | |
|   G_REGEX_ERROR_INVALID_DATA_CHARACTER = 164,
 | |
|   G_REGEX_ERROR_EXTRA_SUBPATTERN_NAME = 165,
 | |
|   G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_REQUIRED = 166,
 | |
|   G_REGEX_ERROR_INVALID_CONTROL_CHAR = 168,
 | |
|   G_REGEX_ERROR_MISSING_NAME = 169,
 | |
|   G_REGEX_ERROR_NOT_SUPPORTED_IN_CLASS = 171,
 | |
|   G_REGEX_ERROR_TOO_MANY_FORWARD_REFERENCES = 172,
 | |
|   G_REGEX_ERROR_NAME_TOO_LONG = 175,
 | |
|   G_REGEX_ERROR_CHARACTER_VALUE_TOO_LARGE = 176
 | |
| } GRegexError;
 | |
| 
 | |
| /**
 | |
|  * G_REGEX_ERROR:
 | |
|  *
 | |
|  * Error domain for regular expressions. Errors in this domain will be
 | |
|  * from the #GRegexError enumeration. See #GError for information on
 | |
|  * error domains.
 | |
|  *
 | |
|  * Since: 2.14
 | |
|  */
 | |
| #define G_REGEX_ERROR g_regex_error_quark ()
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQuark g_regex_error_quark (void);
 | |
| 
 | |
| /**
 | |
|  * GRegexCompileFlags:
 | |
|  * @G_REGEX_CASELESS: Letters in the pattern match both upper- and
 | |
|  *     lowercase letters. This option can be changed within a pattern
 | |
|  *     by a "(?i)" option setting.
 | |
|  * @G_REGEX_MULTILINE: By default, GRegex treats the strings as consisting
 | |
|  *     of a single line of characters (even if it actually contains
 | |
|  *     newlines). The "start of line" metacharacter ("^") matches only
 | |
|  *     at the start of the string, while the "end of line" metacharacter
 | |
|  *     ("$") matches only at the end of the string, or before a terminating
 | |
|  *     newline (unless #G_REGEX_DOLLAR_ENDONLY is set). When
 | |
|  *     #G_REGEX_MULTILINE is set, the "start of line" and "end of line"
 | |
|  *     constructs match immediately following or immediately before any
 | |
|  *     newline in the string, respectively, as well as at the very start
 | |
|  *     and end. This can be changed within a pattern by a "(?m)" option
 | |
|  *     setting.
 | |
|  * @G_REGEX_DOTALL: A dot metacharater (".") in the pattern matches all
 | |
|  *     characters, including newlines. Without it, newlines are excluded.
 | |
|  *     This option can be changed within a pattern by a ("?s") option setting.
 | |
|  * @G_REGEX_EXTENDED: Whitespace data characters in the pattern are
 | |
|  *     totally ignored except when escaped or inside a character class.
 | |
|  *     Whitespace does not include the VT character (code 11). In addition,
 | |
|  *     characters between an unescaped "#" outside a character class and
 | |
|  *     the next newline character, inclusive, are also ignored. This can
 | |
|  *     be changed within a pattern by a "(?x)" option setting.
 | |
|  * @G_REGEX_ANCHORED: The pattern is forced to be "anchored", that is,
 | |
|  *     it is constrained to match only at the first matching point in the
 | |
|  *     string that is being searched. This effect can also be achieved by
 | |
|  *     appropriate constructs in the pattern itself such as the "^"
 | |
|  *     metacharater.
 | |
|  * @G_REGEX_DOLLAR_ENDONLY: A dollar metacharacter ("$") in the pattern
 | |
|  *     matches only at the end of the string. Without this option, a
 | |
|  *     dollar also matches immediately before the final character if
 | |
|  *     it is a newline (but not before any other newlines). This option
 | |
|  *     is ignored if #G_REGEX_MULTILINE is set.
 | |
|  * @G_REGEX_UNGREEDY: Inverts the "greediness" of the quantifiers so that
 | |
|  *     they are not greedy by default, but become greedy if followed by "?".
 | |
|  *     It can also be set by a "(?U)" option setting within the pattern.
 | |
|  * @G_REGEX_RAW: Usually strings must be valid UTF-8 strings, using this
 | |
|  *     flag they are considered as a raw sequence of bytes.
 | |
|  * @G_REGEX_NO_AUTO_CAPTURE: Disables the use of numbered capturing
 | |
|  *     parentheses in the pattern. Any opening parenthesis that is not
 | |
|  *     followed by "?" behaves as if it were followed by "?:" but named
 | |
|  *     parentheses can still be used for capturing (and they acquire numbers
 | |
|  *     in the usual way).
 | |
|  * @G_REGEX_OPTIMIZE: Optimize the regular expression. If the pattern will
 | |
|  *     be used many times, then it may be worth the effort to optimize it
 | |
|  *     to improve the speed of matches.
 | |
|  * @G_REGEX_FIRSTLINE: Limits an unanchored pattern to match before (or at) the
 | |
|  *     first newline. Since: 2.34
 | |
|  * @G_REGEX_DUPNAMES: Names used to identify capturing subpatterns need not
 | |
|  *     be unique. This can be helpful for certain types of pattern when it
 | |
|  *     is known that only one instance of the named subpattern can ever be
 | |
|  *     matched.
 | |
|  * @G_REGEX_NEWLINE_CR: Usually any newline character or character sequence is
 | |
|  *     recognized. If this option is set, the only recognized newline character
 | |
|  *     is '\r'.
 | |
|  * @G_REGEX_NEWLINE_LF: Usually any newline character or character sequence is
 | |
|  *     recognized. If this option is set, the only recognized newline character
 | |
|  *     is '\n'.
 | |
|  * @G_REGEX_NEWLINE_CRLF: Usually any newline character or character sequence is
 | |
|  *     recognized. If this option is set, the only recognized newline character
 | |
|  *     sequence is '\r\n'.
 | |
|  * @G_REGEX_NEWLINE_ANYCRLF: Usually any newline character or character sequence
 | |
|  *     is recognized. If this option is set, the only recognized newline character
 | |
|  *     sequences are '\r', '\n', and '\r\n'. Since: 2.34
 | |
|  * @G_REGEX_BSR_ANYCRLF: Usually any newline character or character sequence
 | |
|  *     is recognised. If this option is set, then "\R" only recognizes the newline
 | |
|  *    characters '\r', '\n' and '\r\n'. Since: 2.34
 | |
|  * @G_REGEX_JAVASCRIPT_COMPAT: Changes behaviour so that it is compatible with
 | |
|  *     JavaScript rather than PCRE. Since: 2.34
 | |
|  *
 | |
|  * Flags specifying compile-time options.
 | |
|  *
 | |
|  * Since: 2.14
 | |
|  */
 | |
| /* Remember to update G_REGEX_COMPILE_MASK in gregex.c after
 | |
|  * adding a new flag.
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_REGEX_CASELESS          = 1 << 0,
 | |
|   G_REGEX_MULTILINE         = 1 << 1,
 | |
|   G_REGEX_DOTALL            = 1 << 2,
 | |
|   G_REGEX_EXTENDED          = 1 << 3,
 | |
|   G_REGEX_ANCHORED          = 1 << 4,
 | |
|   G_REGEX_DOLLAR_ENDONLY    = 1 << 5,
 | |
|   G_REGEX_UNGREEDY          = 1 << 9,
 | |
|   G_REGEX_RAW               = 1 << 11,
 | |
|   G_REGEX_NO_AUTO_CAPTURE   = 1 << 12,
 | |
|   G_REGEX_OPTIMIZE          = 1 << 13,
 | |
|   G_REGEX_FIRSTLINE         = 1 << 18,
 | |
|   G_REGEX_DUPNAMES          = 1 << 19,
 | |
|   G_REGEX_NEWLINE_CR        = 1 << 20,
 | |
|   G_REGEX_NEWLINE_LF        = 1 << 21,
 | |
|   G_REGEX_NEWLINE_CRLF      = G_REGEX_NEWLINE_CR | G_REGEX_NEWLINE_LF,
 | |
|   G_REGEX_NEWLINE_ANYCRLF   = G_REGEX_NEWLINE_CR | 1 << 22,
 | |
|   G_REGEX_BSR_ANYCRLF       = 1 << 23,
 | |
|   G_REGEX_JAVASCRIPT_COMPAT = 1 << 25
 | |
| } GRegexCompileFlags;
 | |
| 
 | |
| /**
 | |
|  * GRegexMatchFlags:
 | |
|  * @G_REGEX_MATCH_ANCHORED: The pattern is forced to be "anchored", that is,
 | |
|  *     it is constrained to match only at the first matching point in the
 | |
|  *     string that is being searched. This effect can also be achieved by
 | |
|  *     appropriate constructs in the pattern itself such as the "^"
 | |
|  *     metacharater.
 | |
|  * @G_REGEX_MATCH_NOTBOL: Specifies that first character of the string is
 | |
|  *     not the beginning of a line, so the circumflex metacharacter should
 | |
|  *     not match before it. Setting this without #G_REGEX_MULTILINE (at
 | |
|  *     compile time) causes circumflex never to match. This option affects
 | |
|  *     only the behaviour of the circumflex metacharacter, it does not
 | |
|  *     affect "\A".
 | |
|  * @G_REGEX_MATCH_NOTEOL: Specifies that the end of the subject string is
 | |
|  *     not the end of a line, so the dollar metacharacter should not match
 | |
|  *     it nor (except in multiline mode) a newline immediately before it.
 | |
|  *     Setting this without #G_REGEX_MULTILINE (at compile time) causes
 | |
|  *     dollar never to match. This option affects only the behaviour of
 | |
|  *     the dollar metacharacter, it does not affect "\Z" or "\z".
 | |
|  * @G_REGEX_MATCH_NOTEMPTY: An empty string is not considered to be a valid
 | |
|  *     match if this option is set. If there are alternatives in the pattern,
 | |
|  *     they are tried. If all the alternatives match the empty string, the
 | |
|  *     entire match fails. For example, if the pattern "a?b?" is applied to
 | |
|  *     a string not beginning with "a" or "b", it matches the empty string
 | |
|  *     at the start of the string. With this flag set, this match is not
 | |
|  *     valid, so GRegex searches further into the string for occurrences
 | |
|  *     of "a" or "b".
 | |
|  * @G_REGEX_MATCH_PARTIAL: Turns on the partial matching feature, for more
 | |
|  *     documentation on partial matching see g_match_info_is_partial_match().
 | |
|  * @G_REGEX_MATCH_NEWLINE_CR: Overrides the newline definition set when
 | |
|  *     creating a new #GRegex, setting the '\r' character as line terminator.
 | |
|  * @G_REGEX_MATCH_NEWLINE_LF: Overrides the newline definition set when
 | |
|  *     creating a new #GRegex, setting the '\n' character as line terminator.
 | |
|  * @G_REGEX_MATCH_NEWLINE_CRLF: Overrides the newline definition set when
 | |
|  *     creating a new #GRegex, setting the '\r\n' characters sequence as line terminator.
 | |
|  * @G_REGEX_MATCH_NEWLINE_ANY: Overrides the newline definition set when
 | |
|  *     creating a new #GRegex, any Unicode newline sequence
 | |
|  *     is recognised as a newline. These are '\r', '\n' and '\rn', and the
 | |
|  *     single characters U+000B LINE TABULATION, U+000C FORM FEED (FF),
 | |
|  *     U+0085 NEXT LINE (NEL), U+2028 LINE SEPARATOR and
 | |
|  *     U+2029 PARAGRAPH SEPARATOR.
 | |
|  * @G_REGEX_MATCH_NEWLINE_ANYCRLF: Overrides the newline definition set when
 | |
|  *     creating a new #GRegex; any '\r', '\n', or '\r\n' character sequence
 | |
|  *     is recognized as a newline. Since: 2.34
 | |
|  * @G_REGEX_MATCH_BSR_ANYCRLF: Overrides the newline definition for "\R" set when
 | |
|  *     creating a new #GRegex; only '\r', '\n', or '\r\n' character sequences
 | |
|  *     are recognized as a newline by "\R". Since: 2.34
 | |
|  * @G_REGEX_MATCH_BSR_ANY: Overrides the newline definition for "\R" set when
 | |
|  *     creating a new #GRegex; any Unicode newline character or character sequence
 | |
|  *     are recognized as a newline by "\R". These are '\r', '\n' and '\rn', and the
 | |
|  *     single characters U+000B LINE TABULATION, U+000C FORM FEED (FF),
 | |
|  *     U+0085 NEXT LINE (NEL), U+2028 LINE SEPARATOR and
 | |
|  *     U+2029 PARAGRAPH SEPARATOR. Since: 2.34
 | |
|  * @G_REGEX_MATCH_PARTIAL_SOFT: An alias for #G_REGEX_MATCH_PARTIAL. Since: 2.34
 | |
|  * @G_REGEX_MATCH_PARTIAL_HARD: Turns on the partial matching feature. In contrast to
 | |
|  *     to #G_REGEX_MATCH_PARTIAL_SOFT, this stops matching as soon as a partial match
 | |
|  *     is found, without continuing to search for a possible complete match. See
 | |
|  *     g_match_info_is_partial_match() for more information. Since: 2.34
 | |
|  * @G_REGEX_MATCH_NOTEMPTY_ATSTART: Like #G_REGEX_MATCH_NOTEMPTY, but only applied to
 | |
|  *     the start of the matched string. For anchored
 | |
|  *     patterns this can only happen for pattern containing "\K". Since: 2.34
 | |
|  *
 | |
|  * Flags specifying match-time options.
 | |
|  *
 | |
|  * Since: 2.14
 | |
|  */
 | |
| /* Remember to update G_REGEX_MATCH_MASK in gregex.c after
 | |
|  * adding a new flag. */
 | |
| typedef enum
 | |
| {
 | |
|   G_REGEX_MATCH_ANCHORED         = 1 << 4,
 | |
|   G_REGEX_MATCH_NOTBOL           = 1 << 7,
 | |
|   G_REGEX_MATCH_NOTEOL           = 1 << 8,
 | |
|   G_REGEX_MATCH_NOTEMPTY         = 1 << 10,
 | |
|   G_REGEX_MATCH_PARTIAL          = 1 << 15,
 | |
|   G_REGEX_MATCH_NEWLINE_CR       = 1 << 20,
 | |
|   G_REGEX_MATCH_NEWLINE_LF       = 1 << 21,
 | |
|   G_REGEX_MATCH_NEWLINE_CRLF     = G_REGEX_MATCH_NEWLINE_CR | G_REGEX_MATCH_NEWLINE_LF,
 | |
|   G_REGEX_MATCH_NEWLINE_ANY      = 1 << 22,
 | |
|   G_REGEX_MATCH_NEWLINE_ANYCRLF  = G_REGEX_MATCH_NEWLINE_CR | G_REGEX_MATCH_NEWLINE_ANY,
 | |
|   G_REGEX_MATCH_BSR_ANYCRLF      = 1 << 23,
 | |
|   G_REGEX_MATCH_BSR_ANY          = 1 << 24,
 | |
|   G_REGEX_MATCH_PARTIAL_SOFT     = G_REGEX_MATCH_PARTIAL,
 | |
|   G_REGEX_MATCH_PARTIAL_HARD     = 1 << 27,
 | |
|   G_REGEX_MATCH_NOTEMPTY_ATSTART = 1 << 28
 | |
| } GRegexMatchFlags;
 | |
| 
 | |
| /**
 | |
|  * GRegex:
 | |
|  *
 | |
|  * A GRegex is the "compiled" form of a regular expression pattern.
 | |
|  * This structure is opaque and its fields cannot be accessed directly.
 | |
|  *
 | |
|  * Since: 2.14
 | |
|  */
 | |
| typedef struct _GRegex		GRegex;
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * GMatchInfo:
 | |
|  *
 | |
|  * A GMatchInfo is an opaque struct used to return information about
 | |
|  * matches.
 | |
|  */
 | |
| typedef struct _GMatchInfo	GMatchInfo;
 | |
| 
 | |
| /**
 | |
|  * GRegexEvalCallback:
 | |
|  * @match_info: the #GMatchInfo generated by the match.
 | |
|  *     Use g_match_info_get_regex() and g_match_info_get_string() if you
 | |
|  *     need the #GRegex or the matched string.
 | |
|  * @result: a #GString containing the new string
 | |
|  * @user_data: user data passed to g_regex_replace_eval()
 | |
|  *
 | |
|  * Specifies the type of the function passed to g_regex_replace_eval().
 | |
|  * It is called for each occurrence of the pattern in the string passed
 | |
|  * to g_regex_replace_eval(), and it should append the replacement to
 | |
|  * @result.
 | |
|  *
 | |
|  * Returns: %FALSE to continue the replacement process, %TRUE to stop it
 | |
|  *
 | |
|  * Since: 2.14
 | |
|  */
 | |
| typedef gboolean (*GRegexEvalCallback)		(const GMatchInfo *match_info,
 | |
| 						 GString          *result,
 | |
| 						 gpointer          user_data);
 | |
| 
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GRegex		 *g_regex_new			(const gchar         *pattern,
 | |
| 						 GRegexCompileFlags   compile_options,
 | |
| 						 GRegexMatchFlags     match_options,
 | |
| 						 GError             **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GRegex           *g_regex_ref			(GRegex              *regex);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		  g_regex_unref			(GRegex              *regex);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar	 *g_regex_get_pattern		(const GRegex        *regex);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint		  g_regex_get_max_backref	(const GRegex        *regex);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint		  g_regex_get_capture_count	(const GRegex        *regex);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean          g_regex_get_has_cr_or_lf      (const GRegex        *regex);
 | |
| GLIB_AVAILABLE_IN_2_38
 | |
| gint              g_regex_get_max_lookbehind    (const GRegex        *regex);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint		  g_regex_get_string_number	(const GRegex        *regex, 
 | |
| 						 const gchar         *name);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar		 *g_regex_escape_string		(const gchar         *string,
 | |
| 						 gint                 length);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar		 *g_regex_escape_nul		(const gchar         *string,
 | |
| 						 gint                 length);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GRegexCompileFlags g_regex_get_compile_flags    (const GRegex        *regex);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GRegexMatchFlags   g_regex_get_match_flags      (const GRegex        *regex);
 | |
| 
 | |
| /* Matching. */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	  g_regex_match_simple		(const gchar         *pattern,
 | |
| 						 const gchar         *string,
 | |
| 						 GRegexCompileFlags   compile_options,
 | |
| 						 GRegexMatchFlags     match_options);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	  g_regex_match			(const GRegex        *regex,
 | |
| 						 const gchar         *string,
 | |
| 						 GRegexMatchFlags     match_options,
 | |
| 						 GMatchInfo         **match_info);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	  g_regex_match_full		(const GRegex        *regex,
 | |
| 						 const gchar         *string,
 | |
| 						 gssize               string_len,
 | |
| 						 gint                 start_position,
 | |
| 						 GRegexMatchFlags     match_options,
 | |
| 						 GMatchInfo         **match_info,
 | |
| 						 GError             **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	  g_regex_match_all		(const GRegex        *regex,
 | |
| 						 const gchar         *string,
 | |
| 						 GRegexMatchFlags     match_options,
 | |
| 						 GMatchInfo         **match_info);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	  g_regex_match_all_full	(const GRegex        *regex,
 | |
| 						 const gchar         *string,
 | |
| 						 gssize               string_len,
 | |
| 						 gint                 start_position,
 | |
| 						 GRegexMatchFlags     match_options,
 | |
| 						 GMatchInfo         **match_info,
 | |
| 						 GError             **error);
 | |
| 
 | |
| /* String splitting. */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar		**g_regex_split_simple		(const gchar         *pattern,
 | |
| 						 const gchar         *string,
 | |
| 						 GRegexCompileFlags   compile_options,
 | |
| 						 GRegexMatchFlags     match_options);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar		**g_regex_split			(const GRegex        *regex,
 | |
| 						 const gchar         *string,
 | |
| 						 GRegexMatchFlags     match_options);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar		**g_regex_split_full		(const GRegex        *regex,
 | |
| 						 const gchar         *string,
 | |
| 						 gssize               string_len,
 | |
| 						 gint                 start_position,
 | |
| 						 GRegexMatchFlags     match_options,
 | |
| 						 gint                 max_tokens,
 | |
| 						 GError             **error);
 | |
| 
 | |
| /* String replacement. */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar		 *g_regex_replace		(const GRegex        *regex,
 | |
| 						 const gchar         *string,
 | |
| 						 gssize               string_len,
 | |
| 						 gint                 start_position,
 | |
| 						 const gchar         *replacement,
 | |
| 						 GRegexMatchFlags     match_options,
 | |
| 						 GError             **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar		 *g_regex_replace_literal	(const GRegex        *regex,
 | |
| 						 const gchar         *string,
 | |
| 						 gssize               string_len,
 | |
| 						 gint                 start_position,
 | |
| 						 const gchar         *replacement,
 | |
| 						 GRegexMatchFlags     match_options,
 | |
| 						 GError             **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar		 *g_regex_replace_eval		(const GRegex        *regex,
 | |
| 						 const gchar         *string,
 | |
| 						 gssize               string_len,
 | |
| 						 gint                 start_position,
 | |
| 						 GRegexMatchFlags     match_options,
 | |
| 						 GRegexEvalCallback   eval,
 | |
| 						 gpointer             user_data,
 | |
| 						 GError             **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	  g_regex_check_replacement	(const gchar         *replacement,
 | |
| 						 gboolean            *has_references,
 | |
| 						 GError             **error);
 | |
| 
 | |
| /* Match info */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GRegex		 *g_match_info_get_regex	(const GMatchInfo    *match_info);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar      *g_match_info_get_string       (const GMatchInfo    *match_info);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GMatchInfo       *g_match_info_ref              (GMatchInfo          *match_info);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void              g_match_info_unref            (GMatchInfo          *match_info);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		  g_match_info_free		(GMatchInfo          *match_info);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	  g_match_info_next		(GMatchInfo          *match_info,
 | |
| 						 GError             **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	  g_match_info_matches		(const GMatchInfo    *match_info);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint		  g_match_info_get_match_count	(const GMatchInfo    *match_info);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	  g_match_info_is_partial_match	(const GMatchInfo    *match_info);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar		 *g_match_info_expand_references(const GMatchInfo    *match_info,
 | |
| 						 const gchar         *string_to_expand,
 | |
| 						 GError             **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar		 *g_match_info_fetch		(const GMatchInfo    *match_info,
 | |
| 						 gint                 match_num);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	  g_match_info_fetch_pos	(const GMatchInfo    *match_info,
 | |
| 						 gint                 match_num,
 | |
| 						 gint                *start_pos,
 | |
| 						 gint                *end_pos);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar		 *g_match_info_fetch_named	(const GMatchInfo    *match_info,
 | |
| 						 const gchar         *name);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	  g_match_info_fetch_named_pos	(const GMatchInfo    *match_info,
 | |
| 						 const gchar         *name,
 | |
| 						 gint                *start_pos,
 | |
| 						 gint                *end_pos);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar		**g_match_info_fetch_all	(const GMatchInfo    *match_info);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif  /*  __G_REGEX_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_SCANNER_H__
 | |
| #define __G_SCANNER_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GScanner	GScanner;
 | |
| typedef struct _GScannerConfig	GScannerConfig;
 | |
| typedef union  _GTokenValue     GTokenValue;
 | |
| 
 | |
| typedef void		(*GScannerMsgFunc)	(GScanner      *scanner,
 | |
| 						 gchar	       *message,
 | |
| 						 gboolean	error);
 | |
| 
 | |
| /* GScanner: Flexible lexical scanner for general purpose.
 | |
|  */
 | |
| 
 | |
| /* Character sets */
 | |
| #define G_CSET_A_2_Z	"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 | |
| #define G_CSET_a_2_z	"abcdefghijklmnopqrstuvwxyz"
 | |
| #define G_CSET_DIGITS	"0123456789"
 | |
| #define G_CSET_LATINC	"\300\301\302\303\304\305\306"\
 | |
| 			"\307\310\311\312\313\314\315\316\317\320"\
 | |
| 			"\321\322\323\324\325\326"\
 | |
| 			"\330\331\332\333\334\335\336"
 | |
| #define G_CSET_LATINS	"\337\340\341\342\343\344\345\346"\
 | |
| 			"\347\350\351\352\353\354\355\356\357\360"\
 | |
| 			"\361\362\363\364\365\366"\
 | |
| 			"\370\371\372\373\374\375\376\377"
 | |
| 
 | |
| /* Error types */
 | |
| typedef enum
 | |
| {
 | |
|   G_ERR_UNKNOWN,
 | |
|   G_ERR_UNEXP_EOF,
 | |
|   G_ERR_UNEXP_EOF_IN_STRING,
 | |
|   G_ERR_UNEXP_EOF_IN_COMMENT,
 | |
|   G_ERR_NON_DIGIT_IN_CONST,
 | |
|   G_ERR_DIGIT_RADIX,
 | |
|   G_ERR_FLOAT_RADIX,
 | |
|   G_ERR_FLOAT_MALFORMED
 | |
| } GErrorType;
 | |
| 
 | |
| /* Token types */
 | |
| typedef enum
 | |
| {
 | |
|   G_TOKEN_EOF			=   0,
 | |
|   
 | |
|   G_TOKEN_LEFT_PAREN		= '(',
 | |
|   G_TOKEN_RIGHT_PAREN		= ')',
 | |
|   G_TOKEN_LEFT_CURLY		= '{',
 | |
|   G_TOKEN_RIGHT_CURLY		= '}',
 | |
|   G_TOKEN_LEFT_BRACE		= '[',
 | |
|   G_TOKEN_RIGHT_BRACE		= ']',
 | |
|   G_TOKEN_EQUAL_SIGN		= '=',
 | |
|   G_TOKEN_COMMA			= ',',
 | |
|   
 | |
|   G_TOKEN_NONE			= 256,
 | |
|   
 | |
|   G_TOKEN_ERROR,
 | |
|   
 | |
|   G_TOKEN_CHAR,
 | |
|   G_TOKEN_BINARY,
 | |
|   G_TOKEN_OCTAL,
 | |
|   G_TOKEN_INT,
 | |
|   G_TOKEN_HEX,
 | |
|   G_TOKEN_FLOAT,
 | |
|   G_TOKEN_STRING,
 | |
|   
 | |
|   G_TOKEN_SYMBOL,
 | |
|   G_TOKEN_IDENTIFIER,
 | |
|   G_TOKEN_IDENTIFIER_NULL,
 | |
|   
 | |
|   G_TOKEN_COMMENT_SINGLE,
 | |
|   G_TOKEN_COMMENT_MULTI,
 | |
| 
 | |
|   /*< private >*/
 | |
|   G_TOKEN_LAST
 | |
| } GTokenType;
 | |
| 
 | |
| union	_GTokenValue
 | |
| {
 | |
|   gpointer	v_symbol;
 | |
|   gchar		*v_identifier;
 | |
|   gulong	v_binary;
 | |
|   gulong	v_octal;
 | |
|   gulong	v_int;
 | |
|   guint64       v_int64;
 | |
|   gdouble	v_float;
 | |
|   gulong	v_hex;
 | |
|   gchar		*v_string;
 | |
|   gchar		*v_comment;
 | |
|   guchar	v_char;
 | |
|   guint		v_error;
 | |
| };
 | |
| 
 | |
| struct	_GScannerConfig
 | |
| {
 | |
|   /* Character sets
 | |
|    */
 | |
|   gchar		*cset_skip_characters;		/* default: " \t\n" */
 | |
|   gchar		*cset_identifier_first;
 | |
|   gchar		*cset_identifier_nth;
 | |
|   gchar		*cpair_comment_single;		/* default: "#\n" */
 | |
|   
 | |
|   /* Should symbol lookup work case sensitive?
 | |
|    */
 | |
|   guint		case_sensitive : 1;
 | |
|   
 | |
|   /* Boolean values to be adjusted "on the fly"
 | |
|    * to configure scanning behaviour.
 | |
|    */
 | |
|   guint		skip_comment_multi : 1;		/* C like comment */
 | |
|   guint		skip_comment_single : 1;	/* single line comment */
 | |
|   guint		scan_comment_multi : 1;		/* scan multi line comments? */
 | |
|   guint		scan_identifier : 1;
 | |
|   guint		scan_identifier_1char : 1;
 | |
|   guint		scan_identifier_NULL : 1;
 | |
|   guint		scan_symbols : 1;
 | |
|   guint		scan_binary : 1;
 | |
|   guint		scan_octal : 1;
 | |
|   guint		scan_float : 1;
 | |
|   guint		scan_hex : 1;			/* '0x0ff0' */
 | |
|   guint		scan_hex_dollar : 1;		/* '$0ff0' */
 | |
|   guint		scan_string_sq : 1;		/* string: 'anything' */
 | |
|   guint		scan_string_dq : 1;		/* string: "\\-escapes!\n" */
 | |
|   guint		numbers_2_int : 1;		/* bin, octal, hex => int */
 | |
|   guint		int_2_float : 1;		/* int => G_TOKEN_FLOAT? */
 | |
|   guint		identifier_2_string : 1;
 | |
|   guint		char_2_token : 1;		/* return G_TOKEN_CHAR? */
 | |
|   guint		symbol_2_token : 1;
 | |
|   guint		scope_0_fallback : 1;		/* try scope 0 on lookups? */
 | |
|   guint		store_int64 : 1; 		/* use value.v_int64 rather than v_int */
 | |
| 
 | |
|   /*< private >*/
 | |
|   guint		padding_dummy;
 | |
| };
 | |
| 
 | |
| struct	_GScanner
 | |
| {
 | |
|   /* unused fields */
 | |
|   gpointer		user_data;
 | |
|   guint			max_parse_errors;
 | |
|   
 | |
|   /* g_scanner_error() increments this field */
 | |
|   guint			parse_errors;
 | |
|   
 | |
|   /* name of input stream, featured by the default message handler */
 | |
|   const gchar		*input_name;
 | |
|   
 | |
|   /* quarked data */
 | |
|   GData			*qdata;
 | |
|   
 | |
|   /* link into the scanner configuration */
 | |
|   GScannerConfig	*config;
 | |
|   
 | |
|   /* fields filled in after g_scanner_get_next_token() */
 | |
|   GTokenType		token;
 | |
|   GTokenValue		value;
 | |
|   guint			line;
 | |
|   guint			position;
 | |
|   
 | |
|   /* fields filled in after g_scanner_peek_next_token() */
 | |
|   GTokenType		next_token;
 | |
|   GTokenValue		next_value;
 | |
|   guint			next_line;
 | |
|   guint			next_position;
 | |
| 
 | |
|   /*< private >*/
 | |
|   /* to be considered private */
 | |
|   GHashTable		*symbol_table;
 | |
|   gint			input_fd;
 | |
|   const gchar		*text;
 | |
|   const gchar		*text_end;
 | |
|   gchar			*buffer;
 | |
|   guint			scope_id;
 | |
| 
 | |
|   /*< public >*/
 | |
|   /* handler function for _warn and _error */
 | |
|   GScannerMsgFunc	msg_handler;
 | |
| };
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GScanner*	g_scanner_new			(const GScannerConfig *config_templ);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		g_scanner_destroy		(GScanner	*scanner);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		g_scanner_input_file		(GScanner	*scanner,
 | |
| 						 gint		input_fd);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		g_scanner_sync_file_offset	(GScanner	*scanner);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		g_scanner_input_text		(GScanner	*scanner,
 | |
| 						 const	gchar	*text,
 | |
| 						 guint		text_len);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTokenType	g_scanner_get_next_token	(GScanner	*scanner);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTokenType	g_scanner_peek_next_token	(GScanner	*scanner);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTokenType	g_scanner_cur_token		(GScanner	*scanner);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTokenValue	g_scanner_cur_value		(GScanner	*scanner);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint		g_scanner_cur_line		(GScanner	*scanner);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint		g_scanner_cur_position		(GScanner	*scanner);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	g_scanner_eof			(GScanner	*scanner);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint		g_scanner_set_scope		(GScanner	*scanner,
 | |
| 						 guint		 scope_id);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		g_scanner_scope_add_symbol	(GScanner	*scanner,
 | |
| 						 guint		 scope_id,
 | |
| 						 const gchar	*symbol,
 | |
| 						 gpointer	value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		g_scanner_scope_remove_symbol	(GScanner	*scanner,
 | |
| 						 guint		 scope_id,
 | |
| 						 const gchar	*symbol);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer	g_scanner_scope_lookup_symbol	(GScanner	*scanner,
 | |
| 						 guint		 scope_id,
 | |
| 						 const gchar	*symbol);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		g_scanner_scope_foreach_symbol	(GScanner	*scanner,
 | |
| 						 guint		 scope_id,
 | |
| 						 GHFunc		 func,
 | |
| 						 gpointer	 user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer	g_scanner_lookup_symbol		(GScanner	*scanner,
 | |
| 						 const gchar	*symbol);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		g_scanner_unexp_token		(GScanner	*scanner,
 | |
| 						 GTokenType	expected_token,
 | |
| 						 const gchar	*identifier_spec,
 | |
| 						 const gchar	*symbol_spec,
 | |
| 						 const gchar	*symbol_name,
 | |
| 						 const gchar	*message,
 | |
| 						 gint		 is_error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		g_scanner_error			(GScanner	*scanner,
 | |
| 						 const gchar	*format,
 | |
| 						 ...) G_GNUC_PRINTF (2,3);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		g_scanner_warn			(GScanner	*scanner,
 | |
| 						 const gchar	*format,
 | |
| 						 ...) G_GNUC_PRINTF (2,3);
 | |
| 
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
| 
 | |
| /* keep downward source compatibility */
 | |
| #define		g_scanner_add_symbol( scanner, symbol, value )	G_STMT_START { \
 | |
|   g_scanner_scope_add_symbol ((scanner), 0, (symbol), (value)); \
 | |
| } G_STMT_END
 | |
| #define		g_scanner_remove_symbol( scanner, symbol )	G_STMT_START { \
 | |
|   g_scanner_scope_remove_symbol ((scanner), 0, (symbol)); \
 | |
| } G_STMT_END
 | |
| #define		g_scanner_foreach_symbol( scanner, func, data )	G_STMT_START { \
 | |
|   g_scanner_scope_foreach_symbol ((scanner), 0, (func), (data)); \
 | |
| } G_STMT_END
 | |
| 
 | |
| /* The following two functions are deprecated and will be removed in
 | |
|  * the next major release. They do no good. */
 | |
| #define g_scanner_freeze_symbol_table(scanner) ((void)0)
 | |
| #define g_scanner_thaw_symbol_table(scanner) ((void)0)
 | |
| 
 | |
| #endif /* G_DISABLE_DEPRECATED */
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_SCANNER_H__ */
 | |
| /* GLIB - Library of useful routines for C programming
 | |
|  * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
 | |
|  * Soeren Sandmann (sandmann@daimi.au.dk)
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_SEQUENCE_H__
 | |
| #define __G_SEQUENCE_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GSequence      GSequence;
 | |
| typedef struct _GSequenceNode  GSequenceIter;
 | |
| 
 | |
| typedef gint (* GSequenceIterCompareFunc) (GSequenceIter *a,
 | |
|                                            GSequenceIter *b,
 | |
|                                            gpointer       data);
 | |
| 
 | |
| 
 | |
| /* GSequence */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSequence *    g_sequence_new                (GDestroyNotify            data_destroy);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_sequence_free               (GSequence                *seq);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint           g_sequence_get_length         (GSequence                *seq);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_sequence_foreach            (GSequence                *seq,
 | |
|                                               GFunc                     func,
 | |
|                                               gpointer                  user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_sequence_foreach_range      (GSequenceIter            *begin,
 | |
|                                               GSequenceIter            *end,
 | |
|                                               GFunc                     func,
 | |
|                                               gpointer                  user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_sequence_sort               (GSequence                *seq,
 | |
|                                               GCompareDataFunc          cmp_func,
 | |
|                                               gpointer                  cmp_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_sequence_sort_iter          (GSequence                *seq,
 | |
|                                               GSequenceIterCompareFunc  cmp_func,
 | |
|                                               gpointer                  cmp_data);
 | |
| GLIB_AVAILABLE_IN_2_48
 | |
| gboolean       g_sequence_is_empty           (GSequence                *seq);
 | |
| 
 | |
| 
 | |
| /* Getting iters */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSequenceIter *g_sequence_get_begin_iter     (GSequence                *seq);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSequenceIter *g_sequence_get_end_iter       (GSequence                *seq);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSequenceIter *g_sequence_get_iter_at_pos    (GSequence                *seq,
 | |
|                                               gint                      pos);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSequenceIter *g_sequence_append             (GSequence                *seq,
 | |
|                                               gpointer                  data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSequenceIter *g_sequence_prepend            (GSequence                *seq,
 | |
|                                               gpointer                  data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSequenceIter *g_sequence_insert_before      (GSequenceIter            *iter,
 | |
|                                               gpointer                  data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_sequence_move               (GSequenceIter            *src,
 | |
|                                               GSequenceIter            *dest);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_sequence_swap               (GSequenceIter            *a,
 | |
|                                               GSequenceIter            *b);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSequenceIter *g_sequence_insert_sorted      (GSequence                *seq,
 | |
|                                               gpointer                  data,
 | |
|                                               GCompareDataFunc          cmp_func,
 | |
|                                               gpointer                  cmp_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSequenceIter *g_sequence_insert_sorted_iter (GSequence                *seq,
 | |
|                                               gpointer                  data,
 | |
|                                               GSequenceIterCompareFunc  iter_cmp,
 | |
|                                               gpointer                  cmp_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_sequence_sort_changed       (GSequenceIter            *iter,
 | |
|                                               GCompareDataFunc          cmp_func,
 | |
|                                               gpointer                  cmp_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_sequence_sort_changed_iter  (GSequenceIter            *iter,
 | |
|                                               GSequenceIterCompareFunc  iter_cmp,
 | |
|                                               gpointer                  cmp_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_sequence_remove             (GSequenceIter            *iter);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_sequence_remove_range       (GSequenceIter            *begin,
 | |
|                                               GSequenceIter            *end);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_sequence_move_range         (GSequenceIter            *dest,
 | |
|                                               GSequenceIter            *begin,
 | |
|                                               GSequenceIter            *end);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSequenceIter *g_sequence_search             (GSequence                *seq,
 | |
|                                               gpointer                  data,
 | |
|                                               GCompareDataFunc          cmp_func,
 | |
|                                               gpointer                  cmp_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSequenceIter *g_sequence_search_iter        (GSequence                *seq,
 | |
|                                               gpointer                  data,
 | |
|                                               GSequenceIterCompareFunc  iter_cmp,
 | |
|                                               gpointer                  cmp_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSequenceIter *g_sequence_lookup             (GSequence                *seq,
 | |
|                                               gpointer                  data,
 | |
|                                               GCompareDataFunc          cmp_func,
 | |
|                                               gpointer                  cmp_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSequenceIter *g_sequence_lookup_iter        (GSequence                *seq,
 | |
|                                               gpointer                  data,
 | |
|                                               GSequenceIterCompareFunc  iter_cmp,
 | |
|                                               gpointer                  cmp_data);
 | |
| 
 | |
| 
 | |
| /* Dereferencing */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer       g_sequence_get                (GSequenceIter            *iter);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_sequence_set                (GSequenceIter            *iter,
 | |
|                                               gpointer                  data);
 | |
| 
 | |
| /* Operations on GSequenceIter * */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean       g_sequence_iter_is_begin      (GSequenceIter            *iter);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean       g_sequence_iter_is_end        (GSequenceIter            *iter);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSequenceIter *g_sequence_iter_next          (GSequenceIter            *iter);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSequenceIter *g_sequence_iter_prev          (GSequenceIter            *iter);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint           g_sequence_iter_get_position  (GSequenceIter            *iter);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSequenceIter *g_sequence_iter_move          (GSequenceIter            *iter,
 | |
|                                               gint                      delta);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSequence *    g_sequence_iter_get_sequence  (GSequenceIter            *iter);
 | |
| 
 | |
| 
 | |
| /* Search */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint           g_sequence_iter_compare       (GSequenceIter            *a,
 | |
|                                               GSequenceIter            *b);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSequenceIter *g_sequence_range_get_midpoint (GSequenceIter            *begin,
 | |
|                                               GSequenceIter            *end);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_SEQUENCE_H__ */
 | |
| /* gshell.h - Shell-related utilities
 | |
|  *
 | |
|  *  Copyright 2000 Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public License
 | |
|  * along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_SHELL_H__
 | |
| #define __G_SHELL_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| #define G_SHELL_ERROR g_shell_error_quark ()
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   /* mismatched or otherwise mangled quoting */
 | |
|   G_SHELL_ERROR_BAD_QUOTING,
 | |
|   /* string to be parsed was empty */
 | |
|   G_SHELL_ERROR_EMPTY_STRING,
 | |
|   G_SHELL_ERROR_FAILED
 | |
| } GShellError;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQuark g_shell_error_quark (void);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*   g_shell_quote      (const gchar   *unquoted_string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*   g_shell_unquote    (const gchar   *quoted_string,
 | |
|                              GError       **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_shell_parse_argv (const gchar   *command_line,
 | |
|                              gint          *argcp,
 | |
|                              gchar       ***argvp,
 | |
|                              GError       **error);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_SHELL_H__ */
 | |
| /* GLIB sliced memory - fast threaded memory chunk allocator
 | |
|  * Copyright (C) 2005 Tim Janik
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_SLICE_H__
 | |
| #define __G_SLICE_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* slices - fast allocation/release of small memory blocks
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_slice_alloc          	(gsize	       block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_slice_alloc0         	(gsize         block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_slice_copy                   (gsize         block_size,
 | |
|                                          gconstpointer mem_block) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_slice_free1          	(gsize         block_size,
 | |
| 					 gpointer      mem_block);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_slice_free_chain_with_offset (gsize         block_size,
 | |
| 					 gpointer      mem_chain,
 | |
| 					 gsize         next_offset);
 | |
| #define  g_slice_new(type)      ((type*) g_slice_alloc (sizeof (type)))
 | |
| #define  g_slice_new0(type)     ((type*) g_slice_alloc0 (sizeof (type)))
 | |
| /* MemoryBlockType *
 | |
|  *       g_slice_dup                    (MemoryBlockType,
 | |
|  *	                                 MemoryBlockType *mem_block);
 | |
|  *       g_slice_free                   (MemoryBlockType,
 | |
|  *	                                 MemoryBlockType *mem_block);
 | |
|  *       g_slice_free_chain             (MemoryBlockType,
 | |
|  *                                       MemoryBlockType *first_chain_block,
 | |
|  *                                       memory_block_next_field);
 | |
|  * pseudo prototypes for the macro
 | |
|  * definitions following below.
 | |
|  */
 | |
| 
 | |
| /* we go through extra hoops to ensure type safety */
 | |
| #define g_slice_dup(type, mem)                                  \
 | |
|   (1 ? (type*) g_slice_copy (sizeof (type), (mem))              \
 | |
|      : ((void) ((type*) 0 == (mem)), (type*) 0))
 | |
| #define g_slice_free(type, mem)                                 \
 | |
| G_STMT_START {                                                  \
 | |
|   if (1) g_slice_free1 (sizeof (type), (mem));			\
 | |
|   else   (void) ((type*) 0 == (mem)); 				\
 | |
| } G_STMT_END
 | |
| #define g_slice_free_chain(type, mem_chain, next)               \
 | |
| G_STMT_START {                                                  \
 | |
|   if (1) g_slice_free_chain_with_offset (sizeof (type),		\
 | |
|                  (mem_chain), G_STRUCT_OFFSET (type, next)); 	\
 | |
|   else   (void) ((type*) 0 == (mem_chain));			\
 | |
| } G_STMT_END
 | |
| 
 | |
| /* --- internal debugging API --- */
 | |
| typedef enum {
 | |
|   G_SLICE_CONFIG_ALWAYS_MALLOC = 1,
 | |
|   G_SLICE_CONFIG_BYPASS_MAGAZINES,
 | |
|   G_SLICE_CONFIG_WORKING_SET_MSECS,
 | |
|   G_SLICE_CONFIG_COLOR_INCREMENT,
 | |
|   G_SLICE_CONFIG_CHUNK_SIZES,
 | |
|   G_SLICE_CONFIG_CONTENTION_COUNTER
 | |
| } GSliceConfig;
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_34
 | |
| void     g_slice_set_config	   (GSliceConfig ckey, gint64 value);
 | |
| GLIB_DEPRECATED_IN_2_34
 | |
| gint64   g_slice_get_config	   (GSliceConfig ckey);
 | |
| GLIB_DEPRECATED_IN_2_34
 | |
| gint64*  g_slice_get_config_state  (GSliceConfig ckey, gint64 address, guint *n_values);
 | |
| 
 | |
| #ifdef G_ENABLE_DEBUG
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_slice_debug_tree_statistics (void);
 | |
| #endif
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_SLICE_H__ */
 | |
| /* gspawn.h - Process launching
 | |
|  *
 | |
|  *  Copyright 2000 Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public License
 | |
|  * along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_SPAWN_H__
 | |
| #define __G_SPAWN_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| 
 | |
| /* I'm not sure I remember our proposed naming convention here. */
 | |
| /**
 | |
|  * G_SPAWN_ERROR:
 | |
|  *
 | |
|  * Error domain for spawning processes. Errors in this domain will
 | |
|  * be from the #GSpawnError enumeration. See #GError for information on
 | |
|  * error domains.
 | |
|  */
 | |
| #define G_SPAWN_ERROR g_spawn_error_quark ()
 | |
| 
 | |
| /**
 | |
|  * GSpawnError:
 | |
|  * @G_SPAWN_ERROR_FORK: Fork failed due to lack of memory.
 | |
|  * @G_SPAWN_ERROR_READ: Read or select on pipes failed.
 | |
|  * @G_SPAWN_ERROR_CHDIR: Changing to working directory failed.
 | |
|  * @G_SPAWN_ERROR_ACCES: execv() returned `EACCES`
 | |
|  * @G_SPAWN_ERROR_PERM: execv() returned `EPERM`
 | |
|  * @G_SPAWN_ERROR_TOO_BIG: execv() returned `E2BIG`
 | |
|  * @G_SPAWN_ERROR_2BIG: deprecated alias for %G_SPAWN_ERROR_TOO_BIG
 | |
|  * @G_SPAWN_ERROR_NOEXEC: execv() returned `ENOEXEC`
 | |
|  * @G_SPAWN_ERROR_NAMETOOLONG: execv() returned `ENAMETOOLONG`
 | |
|  * @G_SPAWN_ERROR_NOENT: execv() returned `ENOENT`
 | |
|  * @G_SPAWN_ERROR_NOMEM: execv() returned `ENOMEM`
 | |
|  * @G_SPAWN_ERROR_NOTDIR: execv() returned `ENOTDIR`
 | |
|  * @G_SPAWN_ERROR_LOOP: execv() returned `ELOOP`
 | |
|  * @G_SPAWN_ERROR_TXTBUSY: execv() returned `ETXTBUSY`
 | |
|  * @G_SPAWN_ERROR_IO: execv() returned `EIO`
 | |
|  * @G_SPAWN_ERROR_NFILE: execv() returned `ENFILE`
 | |
|  * @G_SPAWN_ERROR_MFILE: execv() returned `EMFILE`
 | |
|  * @G_SPAWN_ERROR_INVAL: execv() returned `EINVAL`
 | |
|  * @G_SPAWN_ERROR_ISDIR: execv() returned `EISDIR`
 | |
|  * @G_SPAWN_ERROR_LIBBAD: execv() returned `ELIBBAD`
 | |
|  * @G_SPAWN_ERROR_FAILED: Some other fatal failure,
 | |
|  *   `error->message` should explain.
 | |
|  *
 | |
|  * Error codes returned by spawning processes.
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_SPAWN_ERROR_FORK,   /* fork failed due to lack of memory */
 | |
|   G_SPAWN_ERROR_READ,   /* read or select on pipes failed */
 | |
|   G_SPAWN_ERROR_CHDIR,  /* changing to working dir failed */
 | |
|   G_SPAWN_ERROR_ACCES,  /* execv() returned EACCES */
 | |
|   G_SPAWN_ERROR_PERM,   /* execv() returned EPERM */
 | |
|   G_SPAWN_ERROR_TOO_BIG,/* execv() returned E2BIG */
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
|   G_SPAWN_ERROR_2BIG = G_SPAWN_ERROR_TOO_BIG,
 | |
| #endif
 | |
|   G_SPAWN_ERROR_NOEXEC, /* execv() returned ENOEXEC */
 | |
|   G_SPAWN_ERROR_NAMETOOLONG, /* ""  "" ENAMETOOLONG */
 | |
|   G_SPAWN_ERROR_NOENT,       /* ""  "" ENOENT */
 | |
|   G_SPAWN_ERROR_NOMEM,       /* ""  "" ENOMEM */
 | |
|   G_SPAWN_ERROR_NOTDIR,      /* ""  "" ENOTDIR */
 | |
|   G_SPAWN_ERROR_LOOP,        /* ""  "" ELOOP   */
 | |
|   G_SPAWN_ERROR_TXTBUSY,     /* ""  "" ETXTBUSY */
 | |
|   G_SPAWN_ERROR_IO,          /* ""  "" EIO */
 | |
|   G_SPAWN_ERROR_NFILE,       /* ""  "" ENFILE */
 | |
|   G_SPAWN_ERROR_MFILE,       /* ""  "" EMFLE */
 | |
|   G_SPAWN_ERROR_INVAL,       /* ""  "" EINVAL */
 | |
|   G_SPAWN_ERROR_ISDIR,       /* ""  "" EISDIR */
 | |
|   G_SPAWN_ERROR_LIBBAD,      /* ""  "" ELIBBAD */
 | |
|   G_SPAWN_ERROR_FAILED       /* other fatal failure, error->message
 | |
|                               * should explain
 | |
|                               */
 | |
| } GSpawnError;
 | |
| 
 | |
| /**
 | |
|  * G_SPAWN_EXIT_ERROR:
 | |
|  *
 | |
|  * Error domain used by g_spawn_check_exit_status().  The code
 | |
|  * will be the program exit code.
 | |
|  */
 | |
| #define G_SPAWN_EXIT_ERROR g_spawn_exit_error_quark ()
 | |
| 
 | |
| /**
 | |
|  * GSpawnChildSetupFunc:
 | |
|  * @user_data: user data to pass to the function.
 | |
|  *
 | |
|  * Specifies the type of the setup function passed to g_spawn_async(),
 | |
|  * g_spawn_sync() and g_spawn_async_with_pipes(), which can, in very
 | |
|  * limited ways, be used to affect the child's execution.
 | |
|  *
 | |
|  * On POSIX platforms, the function is called in the child after GLib
 | |
|  * has performed all the setup it plans to perform, but before calling
 | |
|  * exec(). Actions taken in this function will only affect the child,
 | |
|  * not the parent.
 | |
|  *
 | |
|  * On Windows, the function is called in the parent. Its usefulness on
 | |
|  * Windows is thus questionable. In many cases executing the child setup
 | |
|  * function in the parent can have ill effects, and you should be very
 | |
|  * careful when porting software to Windows that uses child setup
 | |
|  * functions.
 | |
|  *
 | |
|  * However, even on POSIX, you are extremely limited in what you can
 | |
|  * safely do from a #GSpawnChildSetupFunc, because any mutexes that were
 | |
|  * held by other threads in the parent process at the time of the fork()
 | |
|  * will still be locked in the child process, and they will never be
 | |
|  * unlocked (since the threads that held them don't exist in the child).
 | |
|  * POSIX allows only async-signal-safe functions (see signal(7)) to be
 | |
|  * called in the child between fork() and exec(), which drastically limits
 | |
|  * the usefulness of child setup functions.
 | |
|  *
 | |
|  * In particular, it is not safe to call any function which may
 | |
|  * call malloc(), which includes POSIX functions such as setenv().
 | |
|  * If you need to set up the child environment differently from
 | |
|  * the parent, you should use g_get_environ(), g_environ_setenv(),
 | |
|  * and g_environ_unsetenv(), and then pass the complete environment
 | |
|  * list to the `g_spawn...` function.
 | |
|  */
 | |
| typedef void (* GSpawnChildSetupFunc) (gpointer user_data);
 | |
| 
 | |
| /**
 | |
|  * GSpawnFlags:
 | |
|  * @G_SPAWN_DEFAULT: no flags, default behaviour
 | |
|  * @G_SPAWN_LEAVE_DESCRIPTORS_OPEN: the parent's open file descriptors will
 | |
|  *     be inherited by the child; otherwise all descriptors except stdin,
 | |
|  *     stdout and stderr will be closed before calling exec() in the child.
 | |
|  * @G_SPAWN_DO_NOT_REAP_CHILD: the child will not be automatically reaped;
 | |
|  *     you must use g_child_watch_add() yourself (or call waitpid() or handle
 | |
|  *     `SIGCHLD` yourself), or the child will become a zombie.
 | |
|  * @G_SPAWN_SEARCH_PATH: `argv[0]` need not be an absolute path, it will be
 | |
|  *     looked for in the user's `PATH`.
 | |
|  * @G_SPAWN_STDOUT_TO_DEV_NULL: the child's standard output will be discarded,
 | |
|  *     instead of going to the same location as the parent's standard output.
 | |
|  * @G_SPAWN_STDERR_TO_DEV_NULL: the child's standard error will be discarded.
 | |
|  * @G_SPAWN_CHILD_INHERITS_STDIN: the child will inherit the parent's standard
 | |
|  *     input (by default, the child's standard input is attached to `/dev/null`).
 | |
|  * @G_SPAWN_FILE_AND_ARGV_ZERO: the first element of `argv` is the file to
 | |
|  *     execute, while the remaining elements are the actual argument vector
 | |
|  *     to pass to the file. Normally g_spawn_async_with_pipes() uses `argv[0]`
 | |
|  *     as the file to execute, and passes all of `argv` to the child.
 | |
|  * @G_SPAWN_SEARCH_PATH_FROM_ENVP: if `argv[0]` is not an abolute path,
 | |
|  *     it will be looked for in the `PATH` from the passed child environment.
 | |
|  *     Since: 2.34
 | |
|  * @G_SPAWN_CLOEXEC_PIPES: create all pipes with the `O_CLOEXEC` flag set.
 | |
|  *     Since: 2.40
 | |
|  *
 | |
|  * Flags passed to g_spawn_sync(), g_spawn_async() and g_spawn_async_with_pipes().
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_SPAWN_DEFAULT                = 0,
 | |
|   G_SPAWN_LEAVE_DESCRIPTORS_OPEN = 1 << 0,
 | |
|   G_SPAWN_DO_NOT_REAP_CHILD      = 1 << 1,
 | |
|   /* look for argv[0] in the path i.e. use execvp() */
 | |
|   G_SPAWN_SEARCH_PATH            = 1 << 2,
 | |
|   /* Dump output to /dev/null */
 | |
|   G_SPAWN_STDOUT_TO_DEV_NULL     = 1 << 3,
 | |
|   G_SPAWN_STDERR_TO_DEV_NULL     = 1 << 4,
 | |
|   G_SPAWN_CHILD_INHERITS_STDIN   = 1 << 5,
 | |
|   G_SPAWN_FILE_AND_ARGV_ZERO     = 1 << 6,
 | |
|   G_SPAWN_SEARCH_PATH_FROM_ENVP  = 1 << 7,
 | |
|   G_SPAWN_CLOEXEC_PIPES          = 1 << 8
 | |
| } GSpawnFlags;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQuark g_spawn_error_quark (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQuark g_spawn_exit_error_quark (void);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_spawn_async (const gchar           *working_directory,
 | |
|                         gchar                **argv,
 | |
|                         gchar                **envp,
 | |
|                         GSpawnFlags            flags,
 | |
|                         GSpawnChildSetupFunc   child_setup,
 | |
|                         gpointer               user_data,
 | |
|                         GPid                  *child_pid,
 | |
|                         GError               **error);
 | |
| 
 | |
| 
 | |
| /* Opens pipes for non-NULL standard_output, standard_input, standard_error,
 | |
|  * and returns the parent's end of the pipes.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_spawn_async_with_pipes (const gchar          *working_directory,
 | |
|                                    gchar               **argv,
 | |
|                                    gchar               **envp,
 | |
|                                    GSpawnFlags           flags,
 | |
|                                    GSpawnChildSetupFunc  child_setup,
 | |
|                                    gpointer              user_data,
 | |
|                                    GPid                 *child_pid,
 | |
|                                    gint                 *standard_input,
 | |
|                                    gint                 *standard_output,
 | |
|                                    gint                 *standard_error,
 | |
|                                    GError              **error);
 | |
| 
 | |
| 
 | |
| /* If standard_output or standard_error are non-NULL, the full
 | |
|  * standard output or error of the command will be placed there.
 | |
|  */
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_spawn_sync         (const gchar          *working_directory,
 | |
|                                gchar               **argv,
 | |
|                                gchar               **envp,
 | |
|                                GSpawnFlags           flags,
 | |
|                                GSpawnChildSetupFunc  child_setup,
 | |
|                                gpointer              user_data,
 | |
|                                gchar               **standard_output,
 | |
|                                gchar               **standard_error,
 | |
|                                gint                 *exit_status,
 | |
|                                GError              **error);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_spawn_command_line_sync  (const gchar          *command_line,
 | |
|                                      gchar               **standard_output,
 | |
|                                      gchar               **standard_error,
 | |
|                                      gint                 *exit_status,
 | |
|                                      GError              **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_spawn_command_line_async (const gchar          *command_line,
 | |
|                                      GError              **error);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_34
 | |
| gboolean g_spawn_check_exit_status (gint      exit_status,
 | |
| 				    GError  **error);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_spawn_close_pid (GPid pid);
 | |
| 
 | |
| #ifndef __GTK_DOC_IGNORE__
 | |
| #ifdef G_OS_WIN32
 | |
| #define g_spawn_async              g_spawn_async_utf8
 | |
| #define g_spawn_async_with_pipes   g_spawn_async_with_pipes_utf8
 | |
| #define g_spawn_sync               g_spawn_sync_utf8
 | |
| #define g_spawn_command_line_sync  g_spawn_command_line_sync_utf8
 | |
| #define g_spawn_command_line_async g_spawn_command_line_async_utf8
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_spawn_async_utf8              (const gchar           *working_directory,
 | |
|                                           gchar                **argv,
 | |
|                                           gchar                **envp,
 | |
|                                           GSpawnFlags            flags,
 | |
|                                           GSpawnChildSetupFunc   child_setup,
 | |
|                                           gpointer               user_data,
 | |
|                                           GPid                  *child_pid,
 | |
|                                           GError               **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_spawn_async_with_pipes_utf8   (const gchar           *working_directory,
 | |
|                                           gchar                **argv,
 | |
|                                           gchar                **envp,
 | |
|                                           GSpawnFlags            flags,
 | |
|                                           GSpawnChildSetupFunc   child_setup,
 | |
|                                           gpointer               user_data,
 | |
|                                           GPid                  *child_pid,
 | |
|                                           gint                  *standard_input,
 | |
|                                           gint                  *standard_output,
 | |
|                                           gint                  *standard_error,
 | |
|                                           GError               **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_spawn_sync_utf8               (const gchar           *working_directory,
 | |
|                                           gchar                **argv,
 | |
|                                           gchar                **envp,
 | |
|                                           GSpawnFlags            flags,
 | |
|                                           GSpawnChildSetupFunc   child_setup,
 | |
|                                           gpointer               user_data,
 | |
|                                           gchar                **standard_output,
 | |
|                                           gchar                **standard_error,
 | |
|                                           gint                  *exit_status,
 | |
|                                           GError               **error);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_spawn_command_line_sync_utf8  (const gchar           *command_line,
 | |
|                                           gchar                **standard_output,
 | |
|                                           gchar                **standard_error,
 | |
|                                           gint                  *exit_status,
 | |
|                                           GError               **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_spawn_command_line_async_utf8 (const gchar           *command_line,
 | |
|                                           GError               **error);
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_SPAWN_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_STRFUNCS_H__
 | |
| #define __G_STRFUNCS_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| #include <stdarg.h>
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* Functions like the ones in <ctype.h> that are not affected by locale. */
 | |
| typedef enum {
 | |
|   G_ASCII_ALNUM  = 1 << 0,
 | |
|   G_ASCII_ALPHA  = 1 << 1,
 | |
|   G_ASCII_CNTRL  = 1 << 2,
 | |
|   G_ASCII_DIGIT  = 1 << 3,
 | |
|   G_ASCII_GRAPH  = 1 << 4,
 | |
|   G_ASCII_LOWER  = 1 << 5,
 | |
|   G_ASCII_PRINT  = 1 << 6,
 | |
|   G_ASCII_PUNCT  = 1 << 7,
 | |
|   G_ASCII_SPACE  = 1 << 8,
 | |
|   G_ASCII_UPPER  = 1 << 9,
 | |
|   G_ASCII_XDIGIT = 1 << 10
 | |
| } GAsciiType;
 | |
| 
 | |
| GLIB_VAR const guint16 * const g_ascii_table;
 | |
| 
 | |
| #define g_ascii_isalnum(c) \
 | |
|   ((g_ascii_table[(guchar) (c)] & G_ASCII_ALNUM) != 0)
 | |
| 
 | |
| #define g_ascii_isalpha(c) \
 | |
|   ((g_ascii_table[(guchar) (c)] & G_ASCII_ALPHA) != 0)
 | |
| 
 | |
| #define g_ascii_iscntrl(c) \
 | |
|   ((g_ascii_table[(guchar) (c)] & G_ASCII_CNTRL) != 0)
 | |
| 
 | |
| #define g_ascii_isdigit(c) \
 | |
|   ((g_ascii_table[(guchar) (c)] & G_ASCII_DIGIT) != 0)
 | |
| 
 | |
| #define g_ascii_isgraph(c) \
 | |
|   ((g_ascii_table[(guchar) (c)] & G_ASCII_GRAPH) != 0)
 | |
| 
 | |
| #define g_ascii_islower(c) \
 | |
|   ((g_ascii_table[(guchar) (c)] & G_ASCII_LOWER) != 0)
 | |
| 
 | |
| #define g_ascii_isprint(c) \
 | |
|   ((g_ascii_table[(guchar) (c)] & G_ASCII_PRINT) != 0)
 | |
| 
 | |
| #define g_ascii_ispunct(c) \
 | |
|   ((g_ascii_table[(guchar) (c)] & G_ASCII_PUNCT) != 0)
 | |
| 
 | |
| #define g_ascii_isspace(c) \
 | |
|   ((g_ascii_table[(guchar) (c)] & G_ASCII_SPACE) != 0)
 | |
| 
 | |
| #define g_ascii_isupper(c) \
 | |
|   ((g_ascii_table[(guchar) (c)] & G_ASCII_UPPER) != 0)
 | |
| 
 | |
| #define g_ascii_isxdigit(c) \
 | |
|   ((g_ascii_table[(guchar) (c)] & G_ASCII_XDIGIT) != 0)
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar                 g_ascii_tolower  (gchar        c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar                 g_ascii_toupper  (gchar        c) G_GNUC_CONST;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                  g_ascii_digit_value  (gchar    c) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                  g_ascii_xdigit_value (gchar    c) G_GNUC_CONST;
 | |
| 
 | |
| /* String utility functions that modify a string argument or
 | |
|  * return a constant string that must not be freed.
 | |
|  */
 | |
| #define	 G_STR_DELIMITERS	"_-|> <."
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*	              g_strdelimit     (gchar	     *string,
 | |
| 					const gchar  *delimiters,
 | |
| 					gchar	      new_delimiter);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*	              g_strcanon       (gchar        *string,
 | |
| 					const gchar  *valid_chars,
 | |
| 					gchar         substitutor);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_strerror       (gint	      errnum) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_strsignal      (gint	      signum) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *	              g_strreverse     (gchar	     *string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize	              g_strlcpy	       (gchar	     *dest,
 | |
| 					const gchar  *src,
 | |
| 					gsize         dest_size);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gsize	              g_strlcat        (gchar	     *dest,
 | |
| 					const gchar  *src,
 | |
| 					gsize         dest_size);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *               g_strstr_len     (const gchar  *haystack,
 | |
| 					gssize        haystack_len,
 | |
| 					const gchar  *needle);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *               g_strrstr        (const gchar  *haystack,
 | |
| 					const gchar  *needle);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *               g_strrstr_len    (const gchar  *haystack,
 | |
| 					gssize        haystack_len,
 | |
| 					const gchar  *needle);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean              g_str_has_suffix (const gchar  *str,
 | |
| 					const gchar  *suffix);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean              g_str_has_prefix (const gchar  *str,
 | |
| 					const gchar  *prefix);
 | |
| 
 | |
| /* String to/from double conversion functions */
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gdouble	              g_strtod         (const gchar  *nptr,
 | |
| 					gchar	    **endptr);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gdouble	              g_ascii_strtod   (const gchar  *nptr,
 | |
| 					gchar	    **endptr);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint64		      g_ascii_strtoull (const gchar *nptr,
 | |
| 					gchar      **endptr,
 | |
| 					guint        base);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint64		      g_ascii_strtoll  (const gchar *nptr,
 | |
| 					gchar      **endptr,
 | |
| 					guint        base);
 | |
| /* 29 bytes should enough for all possible values that
 | |
|  * g_ascii_dtostr can produce.
 | |
|  * Then add 10 for good measure */
 | |
| #define G_ASCII_DTOSTR_BUF_SIZE (29 + 10)
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *               g_ascii_dtostr   (gchar        *buffer,
 | |
| 					gint          buf_len,
 | |
| 					gdouble       d);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar *               g_ascii_formatd  (gchar        *buffer,
 | |
| 					gint          buf_len,
 | |
| 					const gchar  *format,
 | |
| 					gdouble       d);
 | |
| 
 | |
| /* removes leading spaces */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*                g_strchug        (gchar        *string);
 | |
| /* removes trailing spaces */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*                g_strchomp       (gchar        *string);
 | |
| /* removes leading & trailing spaces */
 | |
| #define g_strstrip( string )	g_strchomp (g_strchug (string))
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                  g_ascii_strcasecmp  (const gchar *s1,
 | |
| 					   const gchar *s2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint                  g_ascii_strncasecmp (const gchar *s1,
 | |
| 					   const gchar *s2,
 | |
| 					   gsize        n);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*                g_ascii_strdown     (const gchar *str,
 | |
| 					   gssize       len) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*                g_ascii_strup       (const gchar *str,
 | |
| 					   gssize       len) G_GNUC_MALLOC;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| gboolean              g_str_is_ascii      (const gchar *str);
 | |
| 
 | |
| GLIB_DEPRECATED
 | |
| gint                  g_strcasecmp     (const gchar *s1,
 | |
|                                         const gchar *s2);
 | |
| GLIB_DEPRECATED
 | |
| gint                  g_strncasecmp    (const gchar *s1,
 | |
|                                         const gchar *s2,
 | |
|                                         guint        n);
 | |
| GLIB_DEPRECATED
 | |
| gchar*                g_strdown        (gchar       *string);
 | |
| GLIB_DEPRECATED
 | |
| gchar*                g_strup          (gchar       *string);
 | |
| 
 | |
| 
 | |
| /* String utility functions that return a newly allocated string which
 | |
|  * ought to be freed with g_free from the caller at some point.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*	              g_strdup	       (const gchar *str) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*	              g_strdup_printf  (const gchar *format,
 | |
| 					...) G_GNUC_PRINTF (1, 2) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*	              g_strdup_vprintf (const gchar *format,
 | |
| 					va_list      args) G_GNUC_PRINTF(1, 0) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*	              g_strndup	       (const gchar *str,
 | |
| 					gsize        n) G_GNUC_MALLOC;  
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*	              g_strnfill       (gsize        length,  
 | |
| 					gchar        fill_char) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*	              g_strconcat      (const gchar *string1,
 | |
| 					...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*                g_strjoin	       (const gchar  *separator,
 | |
| 					...) G_GNUC_MALLOC G_GNUC_NULL_TERMINATED;
 | |
| 
 | |
| /* Make a copy of a string interpreting C string -style escape
 | |
|  * sequences. Inverse of g_strescape. The recognized sequences are \b
 | |
|  * \f \n \r \t \\ \" and the octal format.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*                g_strcompress    (const gchar *source) G_GNUC_MALLOC;
 | |
| 
 | |
| /* Copy a string escaping nonprintable characters like in C strings.
 | |
|  * Inverse of g_strcompress. The exceptions parameter, if non-NULL, points
 | |
|  * to a string containing characters that are not to be escaped.
 | |
|  *
 | |
|  * Deprecated API: gchar* g_strescape (const gchar *source);
 | |
|  * Luckily this function wasn't used much, using NULL as second parameter
 | |
|  * provides mostly identical semantics.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*                g_strescape      (const gchar *source,
 | |
| 					const gchar *exceptions) G_GNUC_MALLOC;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer              g_memdup	       (gconstpointer mem,
 | |
| 					guint	       byte_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(2);
 | |
| 
 | |
| /* NULL terminated string arrays.
 | |
|  * g_strsplit(), g_strsplit_set() split up string into max_tokens tokens
 | |
|  * at delim and return a newly allocated string array.
 | |
|  * g_strjoinv() concatenates all of str_array's strings, sliding in an
 | |
|  * optional separator, the returned string is newly allocated.
 | |
|  * g_strfreev() frees the array itself and all of its strings.
 | |
|  * g_strdupv() copies a NULL-terminated array of strings
 | |
|  * g_strv_length() returns the length of a NULL-terminated array of strings
 | |
|  */
 | |
| typedef gchar** GStrv;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar**	              g_strsplit       (const gchar  *string,
 | |
| 					const gchar  *delimiter,
 | |
| 					gint          max_tokens) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar **	      g_strsplit_set   (const gchar *string,
 | |
| 					const gchar *delimiters,
 | |
| 					gint         max_tokens) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*                g_strjoinv       (const gchar  *separator,
 | |
| 					gchar       **str_array) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_strfreev       (gchar       **str_array);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar**               g_strdupv        (gchar       **str_array) G_GNUC_MALLOC;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint                 g_strv_length    (gchar       **str_array);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*                g_stpcpy         (gchar        *dest,
 | |
|                                         const char   *src);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| gchar *                 g_str_to_ascii                                  (const gchar   *str,
 | |
|                                                                          const gchar   *from_locale);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| gchar **                g_str_tokenize_and_fold                         (const gchar   *string,
 | |
|                                                                          const gchar   *translit_locale,
 | |
|                                                                          gchar       ***ascii_alternates);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| gboolean                g_str_match_string                              (const gchar   *search_term,
 | |
|                                                                          const gchar   *potential_hit,
 | |
|                                                                          gboolean       accept_alternates);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_44
 | |
| gboolean              g_strv_contains  (const gchar * const *strv,
 | |
|                                         const gchar         *str);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_STRFUNCS_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_STRINGCHUNK_H__
 | |
| #define __G_STRINGCHUNK_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GStringChunk GStringChunk;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GStringChunk* g_string_chunk_new          (gsize size);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void          g_string_chunk_free         (GStringChunk *chunk);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void          g_string_chunk_clear        (GStringChunk *chunk);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*        g_string_chunk_insert       (GStringChunk *chunk,
 | |
|                                            const gchar  *string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*        g_string_chunk_insert_len   (GStringChunk *chunk,
 | |
|                                            const gchar  *string,
 | |
|                                            gssize        len);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*        g_string_chunk_insert_const (GStringChunk *chunk,
 | |
|                                            const gchar  *string);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_STRING_H__ */
 | |
| /* GLib testing utilities
 | |
|  * Copyright (C) 2007 Imendio AB
 | |
|  * Authors: Tim Janik
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_TEST_UTILS_H__
 | |
| #define __G_TEST_UTILS_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct GTestCase  GTestCase;
 | |
| typedef struct GTestSuite GTestSuite;
 | |
| typedef void (*GTestFunc)        (void);
 | |
| typedef void (*GTestDataFunc)    (gconstpointer user_data);
 | |
| typedef void (*GTestFixtureFunc) (gpointer      fixture,
 | |
|                                   gconstpointer user_data);
 | |
| 
 | |
| /* assertion API */
 | |
| #define g_assert_cmpstr(s1, cmp, s2)    G_STMT_START { \
 | |
|                                              const char *__s1 = (s1), *__s2 = (s2); \
 | |
|                                              if (g_strcmp0 (__s1, __s2) cmp 0) ; else \
 | |
|                                                g_assertion_message_cmpstr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
 | |
|                                                  #s1 " " #cmp " " #s2, __s1, #cmp, __s2); \
 | |
|                                         } G_STMT_END
 | |
| #define g_assert_cmpint(n1, cmp, n2)    G_STMT_START { \
 | |
|                                              gint64 __n1 = (n1), __n2 = (n2); \
 | |
|                                              if (__n1 cmp __n2) ; else \
 | |
|                                                g_assertion_message_cmpnum (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
 | |
|                                                  #n1 " " #cmp " " #n2, __n1, #cmp, __n2, 'i'); \
 | |
|                                         } G_STMT_END
 | |
| #define g_assert_cmpuint(n1, cmp, n2)   G_STMT_START { \
 | |
|                                              guint64 __n1 = (n1), __n2 = (n2); \
 | |
|                                              if (__n1 cmp __n2) ; else \
 | |
|                                                g_assertion_message_cmpnum (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
 | |
|                                                  #n1 " " #cmp " " #n2, __n1, #cmp, __n2, 'i'); \
 | |
|                                         } G_STMT_END
 | |
| #define g_assert_cmphex(n1, cmp, n2)    G_STMT_START {\
 | |
|                                              guint64 __n1 = (n1), __n2 = (n2); \
 | |
|                                              if (__n1 cmp __n2) ; else \
 | |
|                                                g_assertion_message_cmpnum (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
 | |
|                                                  #n1 " " #cmp " " #n2, __n1, #cmp, __n2, 'x'); \
 | |
|                                         } G_STMT_END
 | |
| #define g_assert_cmpfloat(n1,cmp,n2)    G_STMT_START { \
 | |
|                                              long double __n1 = (n1), __n2 = (n2); \
 | |
|                                              if (__n1 cmp __n2) ; else \
 | |
|                                                g_assertion_message_cmpnum (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
 | |
|                                                  #n1 " " #cmp " " #n2, __n1, #cmp, __n2, 'f'); \
 | |
|                                         } G_STMT_END
 | |
| #define g_assert_cmpmem(m1, l1, m2, l2) G_STMT_START {\
 | |
|                                              gconstpointer __m1 = m1, __m2 = m2; \
 | |
|                                              int __l1 = l1, __l2 = l2; \
 | |
|                                              if (__l1 != __l2) \
 | |
|                                                g_assertion_message_cmpnum (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
 | |
|                                                                            #l1 " (len(" #m1 ")) == " #l2 " (len(" #m2 "))", __l1, "==", __l2, 'i'); \
 | |
|                                              else if (__l1 != 0 && memcmp (__m1, __m2, __l1) != 0) \
 | |
|                                                g_assertion_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
 | |
|                                                                     "assertion failed (" #m1 " == " #m2 ")"); \
 | |
|                                         } G_STMT_END
 | |
| #define g_assert_no_error(err)          G_STMT_START { \
 | |
|                                              if (err) \
 | |
|                                                g_assertion_message_error (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
 | |
|                                                  #err, err, 0, 0); \
 | |
|                                         } G_STMT_END
 | |
| #define g_assert_error(err, dom, c)     G_STMT_START { \
 | |
|                                                if (!err || (err)->domain != dom || (err)->code != c) \
 | |
|                                                g_assertion_message_error (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
 | |
|                                                  #err, err, dom, c); \
 | |
|                                         } G_STMT_END
 | |
| #define g_assert_true(expr)             G_STMT_START { \
 | |
|                                              if G_LIKELY (expr) ; else \
 | |
|                                                g_assertion_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
 | |
|                                                                     "'" #expr "' should be TRUE"); \
 | |
|                                         } G_STMT_END
 | |
| #define g_assert_false(expr)            G_STMT_START { \
 | |
|                                              if G_LIKELY (!(expr)) ; else \
 | |
|                                                g_assertion_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
 | |
|                                                                     "'" #expr "' should be FALSE"); \
 | |
|                                         } G_STMT_END
 | |
| #define g_assert_null(expr)             G_STMT_START { if G_LIKELY ((expr) == NULL) ; else \
 | |
|                                                g_assertion_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
 | |
|                                                                     "'" #expr "' should be NULL"); \
 | |
|                                         } G_STMT_END
 | |
| #define g_assert_nonnull(expr)          G_STMT_START { \
 | |
|                                              if G_LIKELY ((expr) != NULL) ; else \
 | |
|                                                g_assertion_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
 | |
|                                                                     "'" #expr "' should not be NULL"); \
 | |
|                                         } G_STMT_END
 | |
| #ifdef G_DISABLE_ASSERT
 | |
| #define g_assert_not_reached()          G_STMT_START { (void) 0; } G_STMT_END
 | |
| #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
 | |
| #else /* !G_DISABLE_ASSERT */
 | |
| #define g_assert_not_reached()          G_STMT_START { g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, NULL); } G_STMT_END
 | |
| #define g_assert(expr)                  G_STMT_START { \
 | |
|                                              if G_LIKELY (expr) ; else \
 | |
|                                                g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
 | |
|                                                                          #expr); \
 | |
|                                         } G_STMT_END
 | |
| #endif /* !G_DISABLE_ASSERT */
 | |
| 
 | |
| typedef void (*GAssertionFunc)          (const char     *domain,
 | |
|                                          const char     *file,
 | |
|                                          int             line,
 | |
|                                          const char     *func,
 | |
|                                          const char     *message,
 | |
|                                          gpointer        user_data);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_50
 | |
| void g_assertion_set_handler            (GAssertionFunc handler,
 | |
|                                          gpointer user_data);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| int     g_strcmp0                       (const char     *str1,
 | |
|                                          const char     *str2);
 | |
| 
 | |
| /* report performance results */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_test_minimized_result         (double          minimized_quantity,
 | |
|                                          const char     *format,
 | |
|                                          ...) G_GNUC_PRINTF (2, 3);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_test_maximized_result         (double          maximized_quantity,
 | |
|                                          const char     *format,
 | |
|                                          ...) G_GNUC_PRINTF (2, 3);
 | |
| 
 | |
| /* initialize testing framework */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_test_init                     (int            *argc,
 | |
|                                          char         ***argv,
 | |
|                                          ...) G_GNUC_NULL_TERMINATED;
 | |
| /* query testing framework config */
 | |
| #define g_test_initialized()            (g_test_config_vars->test_initialized)
 | |
| #define g_test_quick()                  (g_test_config_vars->test_quick)
 | |
| #define g_test_slow()                   (!g_test_config_vars->test_quick)
 | |
| #define g_test_thorough()               (!g_test_config_vars->test_quick)
 | |
| #define g_test_perf()                   (g_test_config_vars->test_perf)
 | |
| #define g_test_verbose()                (g_test_config_vars->test_verbose)
 | |
| #define g_test_quiet()                  (g_test_config_vars->test_quiet)
 | |
| #define g_test_undefined()              (g_test_config_vars->test_undefined)
 | |
| GLIB_AVAILABLE_IN_2_38
 | |
| gboolean g_test_subprocess (void);
 | |
| 
 | |
| /* run all tests under toplevel suite (path: /) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| int     g_test_run                      (void);
 | |
| /* hook up a test functions under test path */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_test_add_func                 (const char     *testpath,
 | |
|                                          GTestFunc       test_func);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_test_add_data_func            (const char     *testpath,
 | |
|                                          gconstpointer   test_data,
 | |
|                                          GTestDataFunc   test_func);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_34
 | |
| void    g_test_add_data_func_full       (const char     *testpath,
 | |
|                                          gpointer        test_data,
 | |
|                                          GTestDataFunc   test_func,
 | |
|                                          GDestroyNotify  data_free_func);
 | |
| 
 | |
| /* tell about failure */
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| void    g_test_fail                     (void);
 | |
| GLIB_AVAILABLE_IN_2_38
 | |
| void    g_test_incomplete               (const gchar *msg);
 | |
| GLIB_AVAILABLE_IN_2_38
 | |
| void    g_test_skip                     (const gchar *msg);
 | |
| GLIB_AVAILABLE_IN_2_38
 | |
| gboolean g_test_failed                  (void);
 | |
| GLIB_AVAILABLE_IN_2_38
 | |
| void    g_test_set_nonfatal_assertions  (void);
 | |
| 
 | |
| /* hook up a test with fixture under test path */
 | |
| #define g_test_add(testpath, Fixture, tdata, fsetup, ftest, fteardown) \
 | |
| 					G_STMT_START {			\
 | |
|                                          void (*add_vtable) (const char*,       \
 | |
|                                                     gsize,             \
 | |
|                                                     gconstpointer,     \
 | |
|                                                     void (*) (Fixture*, gconstpointer),   \
 | |
|                                                     void (*) (Fixture*, gconstpointer),   \
 | |
|                                                     void (*) (Fixture*, gconstpointer)) =  (void (*) (const gchar *, gsize, gconstpointer, void (*) (Fixture*, gconstpointer), void (*) (Fixture*, gconstpointer), void (*) (Fixture*, gconstpointer))) g_test_add_vtable; \
 | |
|                                          add_vtable \
 | |
|                                           (testpath, sizeof (Fixture), tdata, fsetup, ftest, fteardown); \
 | |
| 					} G_STMT_END
 | |
| 
 | |
| /* add test messages to the test report */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_test_message                  (const char *format,
 | |
|                                          ...) G_GNUC_PRINTF (1, 2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_test_bug_base                 (const char *uri_pattern);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_test_bug                      (const char *bug_uri_snippet);
 | |
| /* measure test timings */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_test_timer_start              (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| double  g_test_timer_elapsed            (void); /* elapsed seconds */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| double  g_test_timer_last               (void); /* repeat last elapsed() result */
 | |
| 
 | |
| /* automatically g_free or g_object_unref upon teardown */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_test_queue_free               (gpointer gfree_pointer);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_test_queue_destroy            (GDestroyNotify destroy_func,
 | |
|                                          gpointer       destroy_data);
 | |
| #define g_test_queue_unref(gobject)     g_test_queue_destroy (g_object_unref, gobject)
 | |
| 
 | |
| typedef enum {
 | |
|   G_TEST_TRAP_SILENCE_STDOUT    = 1 << 7,
 | |
|   G_TEST_TRAP_SILENCE_STDERR    = 1 << 8,
 | |
|   G_TEST_TRAP_INHERIT_STDIN     = 1 << 9
 | |
| } GTestTrapFlags;
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_38_FOR (g_test_trap_subprocess)
 | |
| gboolean g_test_trap_fork               (guint64              usec_timeout,
 | |
|                                          GTestTrapFlags       test_trap_flags);
 | |
| 
 | |
| typedef enum {
 | |
|   G_TEST_SUBPROCESS_INHERIT_STDIN  = 1 << 0,
 | |
|   G_TEST_SUBPROCESS_INHERIT_STDOUT = 1 << 1,
 | |
|   G_TEST_SUBPROCESS_INHERIT_STDERR = 1 << 2
 | |
| } GTestSubprocessFlags;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_38
 | |
| void     g_test_trap_subprocess         (const char           *test_path,
 | |
|                                          guint64               usec_timeout,
 | |
|                                          GTestSubprocessFlags  test_flags);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_test_trap_has_passed         (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_test_trap_reached_timeout    (void);
 | |
| #define  g_test_trap_assert_passed()                      g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 0, 0)
 | |
| #define  g_test_trap_assert_failed()                      g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 1, 0)
 | |
| #define  g_test_trap_assert_stdout(soutpattern)           g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 2, soutpattern)
 | |
| #define  g_test_trap_assert_stdout_unmatched(soutpattern) g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 3, soutpattern)
 | |
| #define  g_test_trap_assert_stderr(serrpattern)           g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 4, serrpattern)
 | |
| #define  g_test_trap_assert_stderr_unmatched(serrpattern) g_test_trap_assertions (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, 5, serrpattern)
 | |
| 
 | |
| /* provide seed-able random numbers for tests */
 | |
| #define  g_test_rand_bit()              (0 != (g_test_rand_int() & (1 << 15)))
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint32   g_test_rand_int                (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint32   g_test_rand_int_range          (gint32          begin,
 | |
|                                          gint32          end);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| double   g_test_rand_double             (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| double   g_test_rand_double_range       (double          range_start,
 | |
|                                          double          range_end);
 | |
| 
 | |
| /*
 | |
|  * semi-internal API: non-documented symbols with stable ABI. You
 | |
|  * should use the non-internal helper macros instead. However, for
 | |
|  * compatibility reason, you may use this semi-internal API.
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTestCase*    g_test_create_case        (const char       *test_name,
 | |
|                                          gsize             data_size,
 | |
|                                          gconstpointer     test_data,
 | |
|                                          GTestFixtureFunc  data_setup,
 | |
|                                          GTestFixtureFunc  data_test,
 | |
|                                          GTestFixtureFunc  data_teardown);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTestSuite*   g_test_create_suite       (const char       *suite_name);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTestSuite*   g_test_get_root           (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void          g_test_suite_add          (GTestSuite     *suite,
 | |
|                                          GTestCase      *test_case);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void          g_test_suite_add_suite    (GTestSuite     *suite,
 | |
|                                          GTestSuite     *nestedsuite);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| int           g_test_run_suite          (GTestSuite     *suite);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_test_trap_assertions          (const char     *domain,
 | |
|                                          const char     *file,
 | |
|                                          int             line,
 | |
|                                          const char     *func,
 | |
|                                          guint64         assertion_flags, /* 0-pass, 1-fail, 2-outpattern, 4-errpattern */
 | |
|                                          const char     *pattern);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_assertion_message             (const char     *domain,
 | |
|                                          const char     *file,
 | |
|                                          int             line,
 | |
|                                          const char     *func,
 | |
|                                          const char     *message);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_assertion_message_expr        (const char     *domain,
 | |
|                                          const char     *file,
 | |
|                                          int             line,
 | |
|                                          const char     *func,
 | |
|                                          const char     *expr) G_GNUC_NORETURN;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_assertion_message_cmpstr      (const char     *domain,
 | |
|                                          const char     *file,
 | |
|                                          int             line,
 | |
|                                          const char     *func,
 | |
|                                          const char     *expr,
 | |
|                                          const char     *arg1,
 | |
|                                          const char     *cmp,
 | |
|                                          const char     *arg2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_assertion_message_cmpnum      (const char     *domain,
 | |
|                                          const char     *file,
 | |
|                                          int             line,
 | |
|                                          const char     *func,
 | |
|                                          const char     *expr,
 | |
|                                          long double     arg1,
 | |
|                                          const char     *cmp,
 | |
|                                          long double     arg2,
 | |
|                                          char            numtype);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_assertion_message_error       (const char     *domain,
 | |
|                                          const char     *file,
 | |
|                                          int             line,
 | |
|                                          const char     *func,
 | |
|                                          const char     *expr,
 | |
|                                          const GError   *error,
 | |
|                                          GQuark          error_domain,
 | |
|                                          int             error_code);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_test_add_vtable               (const char     *testpath,
 | |
|                                          gsize           data_size,
 | |
|                                          gconstpointer   test_data,
 | |
|                                          GTestFixtureFunc  data_setup,
 | |
|                                          GTestFixtureFunc  data_test,
 | |
|                                          GTestFixtureFunc  data_teardown);
 | |
| typedef struct {
 | |
|   gboolean      test_initialized;
 | |
|   gboolean      test_quick;     /* disable thorough tests */
 | |
|   gboolean      test_perf;      /* run performance tests */
 | |
|   gboolean      test_verbose;   /* extra info */
 | |
|   gboolean      test_quiet;     /* reduce output */
 | |
|   gboolean      test_undefined; /* run tests that are meant to assert */
 | |
| } GTestConfig;
 | |
| GLIB_VAR const GTestConfig * const g_test_config_vars;
 | |
| 
 | |
| /* internal logging API */
 | |
| typedef enum {
 | |
|   G_TEST_LOG_NONE,
 | |
|   G_TEST_LOG_ERROR,             /* s:msg */
 | |
|   G_TEST_LOG_START_BINARY,      /* s:binaryname s:seed */
 | |
|   G_TEST_LOG_LIST_CASE,         /* s:testpath */
 | |
|   G_TEST_LOG_SKIP_CASE,         /* s:testpath */
 | |
|   G_TEST_LOG_START_CASE,        /* s:testpath */
 | |
|   G_TEST_LOG_STOP_CASE,         /* d:status d:nforks d:elapsed */
 | |
|   G_TEST_LOG_MIN_RESULT,        /* s:blurb d:result */
 | |
|   G_TEST_LOG_MAX_RESULT,        /* s:blurb d:result */
 | |
|   G_TEST_LOG_MESSAGE,           /* s:blurb */
 | |
|   G_TEST_LOG_START_SUITE,
 | |
|   G_TEST_LOG_STOP_SUITE
 | |
| } GTestLogType;
 | |
| 
 | |
| typedef struct {
 | |
|   GTestLogType  log_type;
 | |
|   guint         n_strings;
 | |
|   gchar       **strings; /* NULL terminated */
 | |
|   guint         n_nums;
 | |
|   long double  *nums;
 | |
| } GTestLogMsg;
 | |
| typedef struct {
 | |
|   /*< private >*/
 | |
|   GString     *data;
 | |
|   GSList      *msgs;
 | |
| } GTestLogBuffer;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const char*     g_test_log_type_name    (GTestLogType    log_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTestLogBuffer* g_test_log_buffer_new   (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_test_log_buffer_free  (GTestLogBuffer *tbuffer);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_test_log_buffer_push  (GTestLogBuffer *tbuffer,
 | |
|                                          guint           n_bytes,
 | |
|                                          const guint8   *bytes);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTestLogMsg*    g_test_log_buffer_pop   (GTestLogBuffer *tbuffer);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_test_log_msg_free     (GTestLogMsg    *tmsg);
 | |
| 
 | |
| /**
 | |
|  * GTestLogFatalFunc:
 | |
|  * @log_domain: the log domain of the message
 | |
|  * @log_level: the log level of the message (including the fatal and recursion flags)
 | |
|  * @message: the message to process
 | |
|  * @user_data: user data, set in g_test_log_set_fatal_handler()
 | |
|  *
 | |
|  * Specifies the prototype of fatal log handler functions.
 | |
|  *
 | |
|  * Returns: %TRUE if the program should abort, %FALSE otherwise
 | |
|  *
 | |
|  * Since: 2.22
 | |
|  */
 | |
| typedef gboolean        (*GTestLogFatalFunc)    (const gchar    *log_domain,
 | |
|                                                  GLogLevelFlags  log_level,
 | |
|                                                  const gchar    *message,
 | |
|                                                  gpointer        user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void
 | |
| g_test_log_set_fatal_handler            (GTestLogFatalFunc log_func,
 | |
|                                          gpointer          user_data);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_34
 | |
| void    g_test_expect_message                    (const gchar    *log_domain,
 | |
|                                                   GLogLevelFlags  log_level,
 | |
|                                                   const gchar    *pattern);
 | |
| GLIB_AVAILABLE_IN_2_34
 | |
| void    g_test_assert_expected_messages_internal (const char     *domain,
 | |
|                                                   const char     *file,
 | |
|                                                   int             line,
 | |
|                                                   const char     *func);
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   G_TEST_DIST,
 | |
|   G_TEST_BUILT
 | |
| } GTestFileType;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_38
 | |
| gchar * g_test_build_filename                    (GTestFileType   file_type,
 | |
|                                                   const gchar    *first_path,
 | |
|                                                   ...) G_GNUC_NULL_TERMINATED;
 | |
| GLIB_AVAILABLE_IN_2_38
 | |
| const gchar *g_test_get_dir                      (GTestFileType   file_type);
 | |
| GLIB_AVAILABLE_IN_2_38
 | |
| const gchar *g_test_get_filename                 (GTestFileType   file_type,
 | |
|                                                   const gchar    *first_path,
 | |
|                                                   ...) G_GNUC_NULL_TERMINATED;
 | |
| 
 | |
| #define g_test_assert_expected_messages() g_test_assert_expected_messages_internal (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC)
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_TEST_UTILS_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_THREADPOOL_H__
 | |
| #define __G_THREADPOOL_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GThreadPool GThreadPool;
 | |
| 
 | |
| /* Thread Pools
 | |
|  */
 | |
| 
 | |
| struct _GThreadPool
 | |
| {
 | |
|   GFunc func;
 | |
|   gpointer user_data;
 | |
|   gboolean exclusive;
 | |
| };
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GThreadPool *   g_thread_pool_new               (GFunc            func,
 | |
|                                                  gpointer         user_data,
 | |
|                                                  gint             max_threads,
 | |
|                                                  gboolean         exclusive,
 | |
|                                                  GError         **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_thread_pool_free              (GThreadPool     *pool,
 | |
|                                                  gboolean         immediate,
 | |
|                                                  gboolean         wait_);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean        g_thread_pool_push              (GThreadPool     *pool,
 | |
|                                                  gpointer         data,
 | |
|                                                  GError         **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint           g_thread_pool_unprocessed       (GThreadPool     *pool);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_thread_pool_set_sort_function (GThreadPool      *pool,
 | |
|                                                  GCompareDataFunc  func,
 | |
|                                                  gpointer          user_data);
 | |
| GLIB_AVAILABLE_IN_2_46
 | |
| gboolean        g_thread_pool_move_to_front     (GThreadPool      *pool,
 | |
|                                                  gpointer          data);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean        g_thread_pool_set_max_threads   (GThreadPool     *pool,
 | |
|                                                  gint             max_threads,
 | |
|                                                  GError         **error);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint            g_thread_pool_get_max_threads   (GThreadPool     *pool);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint           g_thread_pool_get_num_threads   (GThreadPool     *pool);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_thread_pool_set_max_unused_threads (gint  max_threads);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint            g_thread_pool_get_max_unused_threads (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint           g_thread_pool_get_num_unused_threads (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_thread_pool_stop_unused_threads    (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_thread_pool_set_max_idle_time      (guint interval);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint           g_thread_pool_get_max_idle_time      (void);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_THREADPOOL_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_TIMER_H__
 | |
| #define __G_TIMER_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* Timer
 | |
|  */
 | |
| 
 | |
| /* microseconds per second */
 | |
| typedef struct _GTimer		GTimer;
 | |
| 
 | |
| #define G_USEC_PER_SEC 1000000
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTimer*  g_timer_new	         (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_timer_destroy         (GTimer      *timer);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_timer_start	         (GTimer      *timer);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_timer_stop	         (GTimer      *timer);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_timer_reset	         (GTimer      *timer);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_timer_continue        (GTimer      *timer);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gdouble  g_timer_elapsed         (GTimer      *timer,
 | |
| 				  gulong      *microseconds);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_usleep                (gulong       microseconds);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_time_val_add          (GTimeVal    *time_, 
 | |
|                                   glong        microseconds);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_time_val_from_iso8601 (const gchar *iso_date,
 | |
| 				  GTimeVal    *time_);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*   g_time_val_to_iso8601   (GTimeVal    *time_) G_GNUC_MALLOC;
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_TIMER_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_TRASH_STACK_H__
 | |
| #define __G_TRASH_STACK_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GTrashStack GTrashStack;
 | |
| struct _GTrashStack
 | |
| {
 | |
|   GTrashStack *next;
 | |
| };
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_48
 | |
| void      g_trash_stack_push   (GTrashStack **stack_p,
 | |
|                                 gpointer      data_p);
 | |
| GLIB_DEPRECATED_IN_2_48
 | |
| gpointer  g_trash_stack_pop    (GTrashStack **stack_p);
 | |
| GLIB_DEPRECATED_IN_2_48
 | |
| gpointer  g_trash_stack_peek   (GTrashStack **stack_p);
 | |
| GLIB_DEPRECATED_IN_2_48
 | |
| guint     g_trash_stack_height (GTrashStack **stack_p);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_TRASH_STACK_H_ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_TREE_H__
 | |
| #define __G_TREE_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GTree  GTree;
 | |
| 
 | |
| typedef gboolean (*GTraverseFunc) (gpointer  key,
 | |
|                                    gpointer  value,
 | |
|                                    gpointer  data);
 | |
| 
 | |
| /* Balanced binary trees
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTree*   g_tree_new             (GCompareFunc      key_compare_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTree*   g_tree_new_with_data   (GCompareDataFunc  key_compare_func,
 | |
|                                  gpointer          key_compare_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTree*   g_tree_new_full        (GCompareDataFunc  key_compare_func,
 | |
|                                  gpointer          key_compare_data,
 | |
|                                  GDestroyNotify    key_destroy_func,
 | |
|                                  GDestroyNotify    value_destroy_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTree*   g_tree_ref             (GTree            *tree);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_tree_unref           (GTree            *tree);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_tree_destroy         (GTree            *tree);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_tree_insert          (GTree            *tree,
 | |
|                                  gpointer          key,
 | |
|                                  gpointer          value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_tree_replace         (GTree            *tree,
 | |
|                                  gpointer          key,
 | |
|                                  gpointer          value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_tree_remove          (GTree            *tree,
 | |
|                                  gconstpointer     key);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_tree_steal           (GTree            *tree,
 | |
|                                  gconstpointer     key);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_tree_lookup          (GTree            *tree,
 | |
|                                  gconstpointer     key);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_tree_lookup_extended (GTree            *tree,
 | |
|                                  gconstpointer     lookup_key,
 | |
|                                  gpointer         *orig_key,
 | |
|                                  gpointer         *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_tree_foreach         (GTree            *tree,
 | |
|                                  GTraverseFunc	   func,
 | |
|                                  gpointer	   user_data);
 | |
| 
 | |
| GLIB_DEPRECATED
 | |
| void     g_tree_traverse        (GTree            *tree,
 | |
|                                  GTraverseFunc     traverse_func,
 | |
|                                  GTraverseType     traverse_type,
 | |
|                                  gpointer          user_data);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_tree_search          (GTree            *tree,
 | |
|                                  GCompareFunc      search_func,
 | |
|                                  gconstpointer     user_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint     g_tree_height          (GTree            *tree);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint     g_tree_nnodes          (GTree            *tree);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_TREE_H__ */
 | |
| /* GIO - GLib Input, Output and Streaming Library
 | |
|  *
 | |
|  * Copyright (C) 2006-2007 Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General
 | |
|  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  * Author: Alexander Larsson <alexl@redhat.com>
 | |
|  */
 | |
| 
 | |
| #ifndef __G_URI_FUNCS_H__
 | |
| #define __G_URI_FUNCS_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /**
 | |
|  * G_URI_RESERVED_CHARS_GENERIC_DELIMITERS:
 | |
|  * 
 | |
|  * Generic delimiters characters as defined in RFC 3986. Includes ":/?#[]@".
 | |
|  **/
 | |
| #define G_URI_RESERVED_CHARS_GENERIC_DELIMITERS ":/?#[]@"
 | |
| 
 | |
| /**
 | |
|  * G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS:
 | |
|  * 
 | |
|  * Subcomponent delimiter characters as defined in RFC 3986. Includes "!$&'()*+,;=".
 | |
|  **/
 | |
| #define G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS "!$&'()*+,;="
 | |
| 
 | |
| /**
 | |
|  * G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT:
 | |
|  * 
 | |
|  * Allowed characters in path elements. Includes "!$&'()*+,;=:@".
 | |
|  **/
 | |
| #define G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS ":@"
 | |
| 
 | |
| /**
 | |
|  * G_URI_RESERVED_CHARS_ALLOWED_IN_PATH:
 | |
|  * 
 | |
|  * Allowed characters in a path. Includes "!$&'()*+,;=:@/".
 | |
|  **/
 | |
| #define G_URI_RESERVED_CHARS_ALLOWED_IN_PATH G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT "/"
 | |
| 
 | |
| /**
 | |
|  * G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO:
 | |
|  * 
 | |
|  * Allowed characters in userinfo as defined in RFC 3986. Includes "!$&'()*+,;=:".
 | |
|  **/
 | |
| #define G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS ":"
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| char *   g_uri_unescape_string       (const char *escaped_string,
 | |
| 				      const char *illegal_characters);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| char *   g_uri_unescape_segment      (const char *escaped_string,
 | |
| 				      const char *escaped_string_end,
 | |
| 				      const char *illegal_characters);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| char *   g_uri_parse_scheme          (const char *uri);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| char *   g_uri_escape_string         (const char *unescaped,
 | |
| 				      const char *reserved_chars_allowed,
 | |
| 				      gboolean    allow_utf8);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_URI_FUNCS_H__ */
 | |
| /* guuid.h - UUID functions
 | |
|  *
 | |
|  * Copyright (C) 2013-2015, 2017 Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU Lesser General Public License as
 | |
|  * published by the Free Software Foundation; either version 2.1 of the
 | |
|  * licence, or (at your option) any later version.
 | |
|  *
 | |
|  * This 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 Lesser General Public
 | |
|  * License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, write to the Free Software
 | |
|  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301
 | |
|  * USA.
 | |
|  *
 | |
|  * Authors: Marc-André Lureau <marcandre.lureau@redhat.com>
 | |
|  */
 | |
| 
 | |
| #ifndef __G_UUID_H__
 | |
| #define __G_UUID_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_52
 | |
| gboolean      g_uuid_string_is_valid       (const gchar   *str);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_52
 | |
| gchar *       g_uuid_string_random         (void);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif  /* __G_UUID_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_VERSION_H__
 | |
| #define __G_VERSION_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GLIB_VAR const guint glib_major_version;
 | |
| GLIB_VAR const guint glib_minor_version;
 | |
| GLIB_VAR const guint glib_micro_version;
 | |
| GLIB_VAR const guint glib_interface_age;
 | |
| GLIB_VAR const guint glib_binary_age;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar * glib_check_version (guint required_major,
 | |
|                                   guint required_minor,
 | |
|                                   guint required_micro);
 | |
| 
 | |
| #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)))
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /*  __G_VERSION_H__ */
 | |
| #ifdef G_PLATFORM_WIN32
 | |
| #include <glib/gwin32.h>
 | |
| #endif
 | |
| 
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
| /*
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * License as published by the Free Software Foundation; either
 | |
|  * version 2 of the licence, 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef __G_ALLOCATOR_H__
 | |
| #define __G_ALLOCATOR_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GAllocator GAllocator;
 | |
| typedef struct _GMemChunk  GMemChunk;
 | |
| 
 | |
| #define G_ALLOC_ONLY                    1
 | |
| #define G_ALLOC_AND_FREE                2
 | |
| #define G_ALLOCATOR_LIST                1
 | |
| #define G_ALLOCATOR_SLIST               2
 | |
| #define G_ALLOCATOR_NODE                3
 | |
| 
 | |
| #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_mem_chunk_free (mem_chunk, mem))
 | |
| #define g_mem_chunk_create(type, x, y)  (g_mem_chunk_new (NULL, sizeof (type), 0, 0))
 | |
| 
 | |
| 
 | |
| GLIB_DEPRECATED
 | |
| GMemChunk *     g_mem_chunk_new         (const gchar  *name,
 | |
|                                          gint          atom_size,
 | |
|                                          gsize         area_size,
 | |
|                                          gint          type);
 | |
| GLIB_DEPRECATED
 | |
| void            g_mem_chunk_destroy     (GMemChunk    *mem_chunk);
 | |
| GLIB_DEPRECATED
 | |
| gpointer        g_mem_chunk_alloc       (GMemChunk    *mem_chunk);
 | |
| GLIB_DEPRECATED
 | |
| gpointer        g_mem_chunk_alloc0      (GMemChunk    *mem_chunk);
 | |
| GLIB_DEPRECATED
 | |
| void            g_mem_chunk_free        (GMemChunk    *mem_chunk,
 | |
|                                          gpointer      mem);
 | |
| GLIB_DEPRECATED
 | |
| void            g_mem_chunk_clean       (GMemChunk    *mem_chunk);
 | |
| GLIB_DEPRECATED
 | |
| void            g_mem_chunk_reset       (GMemChunk    *mem_chunk);
 | |
| GLIB_DEPRECATED
 | |
| void            g_mem_chunk_print       (GMemChunk    *mem_chunk);
 | |
| GLIB_DEPRECATED
 | |
| void            g_mem_chunk_info        (void);
 | |
| GLIB_DEPRECATED
 | |
| void            g_blow_chunks           (void);
 | |
| 
 | |
| 
 | |
| GLIB_DEPRECATED
 | |
| GAllocator *    g_allocator_new         (const gchar  *name,
 | |
|                                          guint         n_preallocs);
 | |
| GLIB_DEPRECATED
 | |
| void            g_allocator_free        (GAllocator   *allocator);
 | |
| GLIB_DEPRECATED
 | |
| void            g_list_push_allocator   (GAllocator   *allocator);
 | |
| GLIB_DEPRECATED
 | |
| void            g_list_pop_allocator    (void);
 | |
| GLIB_DEPRECATED
 | |
| void            g_slist_push_allocator  (GAllocator   *allocator);
 | |
| GLIB_DEPRECATED
 | |
| void            g_slist_pop_allocator   (void);
 | |
| GLIB_DEPRECATED
 | |
| void            g_node_push_allocator   (GAllocator   *allocator);
 | |
| GLIB_DEPRECATED
 | |
| void            g_node_pop_allocator    (void);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_ALLOCATOR_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_CACHE_H__
 | |
| #define __G_CACHE_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
| 
 | |
| typedef struct _GCache          GCache;
 | |
| 
 | |
| typedef gpointer        (*GCacheNewFunc)        (gpointer       key);
 | |
| typedef gpointer        (*GCacheDupFunc)        (gpointer       value);
 | |
| typedef void            (*GCacheDestroyFunc)    (gpointer       value);
 | |
| 
 | |
| /* Caches
 | |
|  */
 | |
| GLIB_DEPRECATED
 | |
| GCache*  g_cache_new           (GCacheNewFunc      value_new_func,
 | |
|                                 GCacheDestroyFunc  value_destroy_func,
 | |
|                                 GCacheDupFunc      key_dup_func,
 | |
|                                 GCacheDestroyFunc  key_destroy_func,
 | |
|                                 GHashFunc          hash_key_func,
 | |
|                                 GHashFunc          hash_value_func,
 | |
|                                 GEqualFunc         key_equal_func);
 | |
| GLIB_DEPRECATED
 | |
| void     g_cache_destroy       (GCache            *cache);
 | |
| GLIB_DEPRECATED
 | |
| gpointer g_cache_insert        (GCache            *cache,
 | |
|                                 gpointer           key);
 | |
| GLIB_DEPRECATED
 | |
| void     g_cache_remove        (GCache            *cache,
 | |
|                                 gconstpointer      value);
 | |
| GLIB_DEPRECATED
 | |
| void     g_cache_key_foreach   (GCache            *cache,
 | |
|                                 GHFunc             func,
 | |
|                                 gpointer           user_data);
 | |
| GLIB_DEPRECATED
 | |
| void     g_cache_value_foreach (GCache            *cache,
 | |
|                                 GHFunc             func,
 | |
|                                 gpointer           user_data);
 | |
| 
 | |
| #endif
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_CACHE_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_COMPLETION_H__
 | |
| #define __G_COMPLETION_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GCompletion     GCompletion;
 | |
| 
 | |
| typedef gchar*          (*GCompletionFunc)      (gpointer);
 | |
| 
 | |
| /* GCompletion
 | |
|  */
 | |
| 
 | |
| typedef gint (*GCompletionStrncmpFunc) (const gchar *s1,
 | |
|                                         const gchar *s2,
 | |
|                                         gsize        n);
 | |
| 
 | |
| struct _GCompletion
 | |
| {
 | |
|   GList* items;
 | |
|   GCompletionFunc func;
 | |
|  
 | |
|   gchar* prefix;
 | |
|   GList* cache;
 | |
|   GCompletionStrncmpFunc strncmp_func;
 | |
| };
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| GCompletion* g_completion_new           (GCompletionFunc func);
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| void         g_completion_add_items     (GCompletion*    cmp,
 | |
|                                          GList*          items);
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| void         g_completion_remove_items  (GCompletion*    cmp,
 | |
|                                          GList*          items);
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| void         g_completion_clear_items   (GCompletion*    cmp);
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| GList*       g_completion_complete      (GCompletion*    cmp,
 | |
|                                          const gchar*    prefix,
 | |
|                                          gchar**         new_prefix);
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| GList*       g_completion_complete_utf8 (GCompletion  *cmp,
 | |
|                                          const gchar*    prefix,
 | |
|                                          gchar**         new_prefix);
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| void         g_completion_set_compare   (GCompletion *cmp,
 | |
|                                          GCompletionStrncmpFunc strncmp_func);
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| void         g_completion_free          (GCompletion*    cmp);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_COMPLETION_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_DEPRECATED_MAIN_H__
 | |
| #define __G_DEPRECATED_MAIN_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
| 
 | |
| /* ============== Compat main loop stuff ================== */
 | |
| 
 | |
| /**
 | |
|  * g_main_new:
 | |
|  * @is_running: set to %TRUE to indicate that the loop is running. This
 | |
|  *     is not very important since calling g_main_run() will set this
 | |
|  *     to %TRUE anyway.
 | |
|  *
 | |
|  * Creates a new #GMainLoop for th default main context.
 | |
|  *
 | |
|  * Returns: a new #GMainLoop
 | |
|  *
 | |
|  * Deprecated: 2.2: Use g_main_loop_new() instead
 | |
|  */
 | |
| #define         g_main_new(is_running)  g_main_loop_new (NULL, is_running)
 | |
| 
 | |
| /**
 | |
|  * g_main_run:
 | |
|  * @loop: a #GMainLoop
 | |
|  *
 | |
|  * Runs a main loop until it stops running.
 | |
|  *
 | |
|  * Deprecated: 2.2: Use g_main_loop_run() instead
 | |
|  */
 | |
| #define         g_main_run(loop)        g_main_loop_run(loop)
 | |
| 
 | |
| /**
 | |
|  * g_main_quit:
 | |
|  * @loop: a #GMainLoop
 | |
|  *
 | |
|  * Stops the #GMainLoop.
 | |
|  * If g_main_run() was called to run the #GMainLoop, it will now return.
 | |
|  *
 | |
|  * Deprecated: 2.2: Use g_main_loop_quit() instead
 | |
|  */
 | |
| #define g_main_quit(loop)       g_main_loop_quit(loop)
 | |
| 
 | |
| /**
 | |
|  * g_main_destroy:
 | |
|  * @loop: a #GMainLoop
 | |
|  *
 | |
|  * Frees the memory allocated for the #GMainLoop.
 | |
|  *
 | |
|  * Deprecated: 2.2: Use g_main_loop_unref() instead
 | |
|  */
 | |
| #define g_main_destroy(loop)    g_main_loop_unref(loop)
 | |
| 
 | |
| /**
 | |
|  * g_main_is_running:
 | |
|  * @loop: a #GMainLoop
 | |
|  *
 | |
|  * Checks if the main loop is running.
 | |
|  *
 | |
|  * Returns: %TRUE if the main loop is running
 | |
|  *
 | |
|  * Deprecated: 2.2: Use g_main_loop_is_running() instead
 | |
|  */
 | |
| #define g_main_is_running(loop) g_main_loop_is_running(loop)
 | |
| 
 | |
| /**
 | |
|  * g_main_iteration:
 | |
|  * @may_block: set to %TRUE if it should block (i.e. wait) until an event
 | |
|  *     source becomes ready. It will return after an event source has been
 | |
|  *     processed. If set to %FALSE it will return immediately if no event
 | |
|  *     source is ready to be processed.
 | |
|  *
 | |
|  * Runs a single iteration for the default #GMainContext.
 | |
|  *
 | |
|  * Returns: %TRUE if more events are pending.
 | |
|  *
 | |
|  * Deprecated: 2.2: Use g_main_context_iteration() instead.
 | |
|  */
 | |
| #define g_main_iteration(may_block) g_main_context_iteration (NULL, may_block)
 | |
| 
 | |
| /**
 | |
|  * g_main_pending:
 | |
|  *
 | |
|  * Checks if any events are pending for the default #GMainContext
 | |
|  * (i.e. ready to be processed).
 | |
|  *
 | |
|  * Returns: %TRUE if any events are pending.
 | |
|  *
 | |
|  * Deprected: 2.2: Use g_main_context_pending() instead.
 | |
|  */
 | |
| #define g_main_pending()            g_main_context_pending (NULL)
 | |
| 
 | |
| /**
 | |
|  * g_main_set_poll_func:
 | |
|  * @func: the function to call to poll all file descriptors
 | |
|  *
 | |
|  * Sets the function to use for the handle polling of file descriptors
 | |
|  * for the default main context.
 | |
|  *
 | |
|  * Deprecated: 2.2: Use g_main_context_set_poll_func() again
 | |
|  */
 | |
| #define g_main_set_poll_func(func)  g_main_context_set_poll_func (NULL, func)
 | |
| 
 | |
| #endif
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_DEPRECATED_MAIN_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_REL_H__
 | |
| #define __G_REL_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GRelation       GRelation;
 | |
| typedef struct _GTuples         GTuples;
 | |
| 
 | |
| struct _GTuples
 | |
| {
 | |
|   guint len;
 | |
| };
 | |
| 
 | |
| /* GRelation
 | |
|  *
 | |
|  * Indexed Relations.  Imagine a really simple table in a
 | |
|  * database.  Relations are not ordered.  This data type is meant for
 | |
|  * maintaining a N-way mapping.
 | |
|  *
 | |
|  * g_relation_new() creates a relation with FIELDS fields
 | |
|  *
 | |
|  * g_relation_destroy() frees all resources
 | |
|  * g_tuples_destroy() frees the result of g_relation_select()
 | |
|  *
 | |
|  * g_relation_index() indexes relation FIELD with the provided
 | |
|  *   equality and hash functions.  this must be done before any
 | |
|  *   calls to insert are made.
 | |
|  *
 | |
|  * g_relation_insert() inserts a new tuple.  you are expected to
 | |
|  *   provide the right number of fields.
 | |
|  *
 | |
|  * g_relation_delete() deletes all relations with KEY in FIELD
 | |
|  * g_relation_select() returns ...
 | |
|  * g_relation_count() counts ...
 | |
|  */
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| GRelation* g_relation_new     (gint         fields);
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| void       g_relation_destroy (GRelation   *relation);
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| void       g_relation_index   (GRelation   *relation,
 | |
|                                gint         field,
 | |
|                                GHashFunc    hash_func,
 | |
|                                GEqualFunc   key_equal_func);
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| void       g_relation_insert  (GRelation   *relation,
 | |
|                                ...);
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| gint       g_relation_delete  (GRelation   *relation,
 | |
|                                gconstpointer  key,
 | |
|                                gint         field);
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| GTuples*   g_relation_select  (GRelation   *relation,
 | |
|                                gconstpointer  key,
 | |
|                                gint         field);
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| gint       g_relation_count   (GRelation   *relation,
 | |
|                                gconstpointer  key,
 | |
|                                gint         field);
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| gboolean   g_relation_exists  (GRelation   *relation,
 | |
|                                ...);
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| void       g_relation_print   (GRelation   *relation);
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| void       g_tuples_destroy   (GTuples     *tuples);
 | |
| GLIB_DEPRECATED_IN_2_26
 | |
| gpointer   g_tuples_index     (GTuples     *tuples,
 | |
|                                gint         index_,
 | |
|                                gint         field);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_REL_H__ */
 | |
| /* 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 Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Modified by the GLib Team and others 1997-2000.  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_DEPRECATED_THREAD_H__
 | |
| #define __G_DEPRECATED_THREAD_H__
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   G_THREAD_PRIORITY_LOW,
 | |
|   G_THREAD_PRIORITY_NORMAL,
 | |
|   G_THREAD_PRIORITY_HIGH,
 | |
|   G_THREAD_PRIORITY_URGENT
 | |
| } GThreadPriority;
 | |
| 
 | |
| #endif
 | |
| 
 | |
| struct  _GThread
 | |
| {
 | |
|   /*< private >*/
 | |
|   GThreadFunc func;
 | |
|   gpointer data;
 | |
|   gboolean joinable;
 | |
|   GThreadPriority priority;
 | |
| };
 | |
| 
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
| 
 | |
| typedef struct _GThreadFunctions GThreadFunctions;
 | |
| struct _GThreadFunctions
 | |
| {
 | |
|   GMutex*  (*mutex_new)           (void);
 | |
|   void     (*mutex_lock)          (GMutex               *mutex);
 | |
|   gboolean (*mutex_trylock)       (GMutex               *mutex);
 | |
|   void     (*mutex_unlock)        (GMutex               *mutex);
 | |
|   void     (*mutex_free)          (GMutex               *mutex);
 | |
|   GCond*   (*cond_new)            (void);
 | |
|   void     (*cond_signal)         (GCond                *cond);
 | |
|   void     (*cond_broadcast)      (GCond                *cond);
 | |
|   void     (*cond_wait)           (GCond                *cond,
 | |
|                                    GMutex               *mutex);
 | |
|   gboolean (*cond_timed_wait)     (GCond                *cond,
 | |
|                                    GMutex               *mutex,
 | |
|                                    GTimeVal             *end_time);
 | |
|   void      (*cond_free)          (GCond                *cond);
 | |
|   GPrivate* (*private_new)        (GDestroyNotify        destructor);
 | |
|   gpointer  (*private_get)        (GPrivate             *private_key);
 | |
|   void      (*private_set)        (GPrivate             *private_key,
 | |
|                                    gpointer              data);
 | |
|   void      (*thread_create)      (GThreadFunc           func,
 | |
|                                    gpointer              data,
 | |
|                                    gulong                stack_size,
 | |
|                                    gboolean              joinable,
 | |
|                                    gboolean              bound,
 | |
|                                    GThreadPriority       priority,
 | |
|                                    gpointer              thread,
 | |
|                                    GError              **error);
 | |
|   void      (*thread_yield)       (void);
 | |
|   void      (*thread_join)        (gpointer              thread);
 | |
|   void      (*thread_exit)        (void);
 | |
|   void      (*thread_set_priority)(gpointer              thread,
 | |
|                                    GThreadPriority       priority);
 | |
|   void      (*thread_self)        (gpointer              thread);
 | |
|   gboolean  (*thread_equal)       (gpointer              thread1,
 | |
|                                    gpointer              thread2);
 | |
| };
 | |
| 
 | |
| GLIB_VAR GThreadFunctions       g_thread_functions_for_glib_use;
 | |
| GLIB_VAR gboolean               g_thread_use_default_impl;
 | |
| 
 | |
| GLIB_VAR guint64   (*g_thread_gettime) (void);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_thread_new)
 | |
| GThread *g_thread_create       (GThreadFunc       func,
 | |
|                                 gpointer          data,
 | |
|                                 gboolean          joinable,
 | |
|                                 GError          **error);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_thread_new)
 | |
| GThread *g_thread_create_full  (GThreadFunc       func,
 | |
|                                 gpointer          data,
 | |
|                                 gulong            stack_size,
 | |
|                                 gboolean          joinable,
 | |
|                                 gboolean          bound,
 | |
|                                 GThreadPriority   priority,
 | |
|                                 GError          **error);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32
 | |
| void     g_thread_set_priority (GThread          *thread,
 | |
|                                 GThreadPriority   priority);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32
 | |
| void     g_thread_foreach      (GFunc             thread_func,
 | |
|                                 gpointer          user_data);
 | |
| 
 | |
| #ifndef G_OS_WIN32
 | |
| #include <sys/types.h>
 | |
| #include <pthread.h>
 | |
| #endif
 | |
| 
 | |
| #define g_static_mutex_get_mutex g_static_mutex_get_mutex_impl
 | |
| #define G_STATIC_MUTEX_INIT { NULL }
 | |
| typedef struct
 | |
| {
 | |
|   GMutex *mutex;
 | |
| #ifndef G_OS_WIN32
 | |
|   /* only for ABI compatibility reasons */
 | |
|   pthread_mutex_t unused;
 | |
| #endif
 | |
| } GStaticMutex;
 | |
| 
 | |
| #define g_static_mutex_lock(mutex) \
 | |
|     g_mutex_lock (g_static_mutex_get_mutex (mutex))
 | |
| #define g_static_mutex_trylock(mutex) \
 | |
|     g_mutex_trylock (g_static_mutex_get_mutex (mutex))
 | |
| #define g_static_mutex_unlock(mutex) \
 | |
|     g_mutex_unlock (g_static_mutex_get_mutex (mutex))
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_mutex_init)
 | |
| void    g_static_mutex_init           (GStaticMutex *mutex);
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_mutex_clear)
 | |
| void    g_static_mutex_free           (GStaticMutex *mutex);
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(GMutex)
 | |
| GMutex *g_static_mutex_get_mutex_impl (GStaticMutex *mutex);
 | |
| 
 | |
| typedef struct _GStaticRecMutex GStaticRecMutex;
 | |
| struct _GStaticRecMutex
 | |
| {
 | |
|   /*< private >*/
 | |
|   GStaticMutex mutex;
 | |
|   guint depth;
 | |
| 
 | |
|   /* ABI compat only */
 | |
|   union {
 | |
| #ifdef G_OS_WIN32
 | |
|     void *owner;
 | |
| #else
 | |
|     pthread_t owner;
 | |
| #endif
 | |
|     gdouble dummy;
 | |
|   } unused;
 | |
| };
 | |
| 
 | |
| #define G_STATIC_REC_MUTEX_INIT { G_STATIC_MUTEX_INIT }
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_init)
 | |
| void     g_static_rec_mutex_init        (GStaticRecMutex *mutex);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_lock)
 | |
| void     g_static_rec_mutex_lock        (GStaticRecMutex *mutex);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_try_lock)
 | |
| gboolean g_static_rec_mutex_trylock     (GStaticRecMutex *mutex);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_unlock)
 | |
| void     g_static_rec_mutex_unlock      (GStaticRecMutex *mutex);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32
 | |
| void     g_static_rec_mutex_lock_full   (GStaticRecMutex *mutex,
 | |
|                                          guint            depth);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32
 | |
| guint    g_static_rec_mutex_unlock_full (GStaticRecMutex *mutex);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_rec_mutex_free)
 | |
| void     g_static_rec_mutex_free        (GStaticRecMutex *mutex);
 | |
| 
 | |
| typedef struct _GStaticRWLock GStaticRWLock;
 | |
| struct _GStaticRWLock
 | |
| {
 | |
|   /*< private >*/
 | |
|   GStaticMutex mutex;
 | |
|   GCond *read_cond;
 | |
|   GCond *write_cond;
 | |
|   guint read_counter;
 | |
|   gboolean have_writer;
 | |
|   guint want_to_read;
 | |
|   guint want_to_write;
 | |
| };
 | |
| 
 | |
| #define G_STATIC_RW_LOCK_INIT { G_STATIC_MUTEX_INIT, NULL, NULL, 0, FALSE, 0, 0 }
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_init)
 | |
| void      g_static_rw_lock_init           (GStaticRWLock *lock);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_reader_lock)
 | |
| void      g_static_rw_lock_reader_lock    (GStaticRWLock *lock);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_reader_trylock)
 | |
| gboolean  g_static_rw_lock_reader_trylock (GStaticRWLock *lock);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_reader_unlock)
 | |
| void      g_static_rw_lock_reader_unlock  (GStaticRWLock *lock);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_writer_lock)
 | |
| void      g_static_rw_lock_writer_lock    (GStaticRWLock *lock);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_writer_trylock)
 | |
| gboolean  g_static_rw_lock_writer_trylock (GStaticRWLock *lock);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_writer_unlock)
 | |
| void      g_static_rw_lock_writer_unlock  (GStaticRWLock *lock);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_rw_lock_free)
 | |
| void      g_static_rw_lock_free           (GStaticRWLock *lock);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32
 | |
| GPrivate *      g_private_new             (GDestroyNotify notify);
 | |
| 
 | |
| typedef struct _GStaticPrivate  GStaticPrivate;
 | |
| struct _GStaticPrivate
 | |
| {
 | |
|   /*< private >*/
 | |
|   guint index;
 | |
| };
 | |
| 
 | |
| #define G_STATIC_PRIVATE_INIT { 0 }
 | |
| GLIB_DEPRECATED_IN_2_32
 | |
| void     g_static_private_init           (GStaticPrivate *private_key);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_private_get)
 | |
| gpointer g_static_private_get            (GStaticPrivate *private_key);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_private_set)
 | |
| void     g_static_private_set            (GStaticPrivate *private_key,
 | |
|                                           gpointer        data,
 | |
|                                           GDestroyNotify  notify);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32
 | |
| void     g_static_private_free           (GStaticPrivate *private_key);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32
 | |
| gboolean g_once_init_enter_impl          (volatile gsize *location);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32
 | |
| void     g_thread_init                   (gpointer vtable);
 | |
| GLIB_DEPRECATED_IN_2_32
 | |
| void    g_thread_init_with_errorcheck_mutexes (gpointer vtable);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32
 | |
| gboolean g_thread_get_initialized        (void);
 | |
| 
 | |
| GLIB_VAR gboolean g_threads_got_initialized;
 | |
| 
 | |
| #define g_thread_supported()     (1)
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32
 | |
| GMutex *        g_mutex_new             (void);
 | |
| GLIB_DEPRECATED_IN_2_32
 | |
| void            g_mutex_free            (GMutex *mutex);
 | |
| GLIB_DEPRECATED_IN_2_32
 | |
| GCond *         g_cond_new              (void);
 | |
| GLIB_DEPRECATED_IN_2_32
 | |
| void            g_cond_free             (GCond  *cond);
 | |
| GLIB_DEPRECATED_IN_2_32
 | |
| gboolean        g_cond_timed_wait       (GCond          *cond,
 | |
|                                          GMutex         *mutex,
 | |
|                                          GTimeVal       *timeval);
 | |
| 
 | |
| #endif
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_DEPRECATED_THREAD_H__ */
 | |
| #endif /* G_DISABLE_DEPRECATED */
 | |
| 
 | |
| /*
 | |
|  * Copyright © 2015 Canonical Limited
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * License as published by the Free Software Foundation; either
 | |
|  * version 2 of the licence, 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  * Author: Ryan Lortie <desrt@desrt.ca>
 | |
|  */
 | |
| 
 | |
| #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
 | |
| #error "Only <glib.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| static inline void
 | |
| g_autoptr_cleanup_generic_gfree (void *p)
 | |
| {
 | |
|   void **pp = (void**)p;
 | |
|   g_free (*pp);
 | |
| }
 | |
| 
 | |
| static inline void
 | |
| g_autoptr_cleanup_gstring_free (GString *string)
 | |
| {
 | |
|   if (string)
 | |
|     g_string_free (string, TRUE);
 | |
| }
 | |
| 
 | |
| /* If adding a cleanup here, please also add a test case to
 | |
|  * glib/tests/autoptr.c
 | |
|  */
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GAsyncQueue, g_async_queue_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GBookmarkFile, g_bookmark_file_free)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GBytes, g_bytes_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GChecksum, g_checksum_free)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GDateTime, g_date_time_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GDir, g_dir_close)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GError, g_error_free)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GHashTable, g_hash_table_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GHmac, g_hmac_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GIOChannel, g_io_channel_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GKeyFile, g_key_file_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GList, g_list_free)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GArray, g_array_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GPtrArray, g_ptr_array_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GByteArray, g_byte_array_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMainContext, g_main_context_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMainLoop, g_main_loop_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GSource, g_source_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMappedFile, g_mapped_file_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMarkupParseContext, g_markup_parse_context_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GNode, g_node_destroy)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GOptionContext, g_option_context_free)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GOptionGroup, g_option_group_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GPatternSpec, g_pattern_spec_free)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GQueue, g_queue_free)
 | |
| G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(GQueue, g_queue_clear)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GRand, g_rand_free)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GRegex, g_regex_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMatchInfo, g_match_info_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GScanner, g_scanner_destroy)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GSequence, g_sequence_free)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GSList, g_slist_free)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GString, g_autoptr_cleanup_gstring_free)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GStringChunk, g_string_chunk_free)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GThread, g_thread_unref)
 | |
| G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(GMutex, g_mutex_clear)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMutexLocker, g_mutex_locker_free)
 | |
| G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(GCond, g_cond_clear)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GTimer, g_timer_destroy)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GTimeZone, g_time_zone_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GTree, g_tree_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GVariant, g_variant_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GVariantBuilder, g_variant_builder_unref)
 | |
| G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(GVariantBuilder, g_variant_builder_clear)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GVariantIter, g_variant_iter_free)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GVariantDict, g_variant_dict_unref)
 | |
| G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(GVariantDict, g_variant_dict_clear)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GVariantType, g_variant_type_free)
 | |
| G_DEFINE_AUTO_CLEANUP_FREE_FUNC(GStrv, g_strfreev, NULL)
 | |
| 
 | |
| #undef __GLIB_H_INSIDE__
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_50
 | |
| void                            glib_init                               (void);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_50
 | |
| void                            glib_shutdown                           (void);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_50
 | |
| void                            glib_deinit                             (void);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_LIB_H__ */
 | |
| 
 | |
| #if !defined (GUM_STATIC) && defined (G_OS_WIN32)
 | |
| #  ifdef GUM_EXPORTS
 | |
| #    define GUM_API __declspec(dllexport)
 | |
| #  else
 | |
| #    define GUM_API __declspec(dllimport)
 | |
| #  endif
 | |
| #else
 | |
| #  define GUM_API
 | |
| #endif
 | |
| 
 | |
| #if !defined (__arm__) && !defined (__aarch64__)
 | |
| # if GLIB_SIZEOF_VOID_P == 4
 | |
| #  define GUM_NATIVE_CPU GUM_CPU_IA32
 | |
| # else
 | |
| #  define GUM_NATIVE_CPU GUM_CPU_AMD64
 | |
| # endif
 | |
| #elif defined (__arm__) || defined (__aarch64__)
 | |
| # if GLIB_SIZEOF_VOID_P == 4
 | |
| #  define GUM_NATIVE_CPU GUM_CPU_ARM
 | |
| # else
 | |
| #  define GUM_NATIVE_CPU GUM_CPU_ARM64
 | |
| # endif
 | |
| #elif defined (__mips__)
 | |
| # define GUM_NATIVE_CPU GUM_CPU_MIPS
 | |
| #endif
 | |
| #ifdef G_OS_WIN32
 | |
| # define GUM_NATIVE_ABI            GUM_ABI_WINDOWS
 | |
| # define GUM_NATIVE_ABI_IS_WINDOWS 1
 | |
| # define GUM_NATIVE_ABI_IS_UNIX    0
 | |
| #else
 | |
| # define GUM_NATIVE_ABI            GUM_ABI_UNIX
 | |
| # define GUM_NATIVE_ABI_IS_WINDOWS 0
 | |
| # define GUM_NATIVE_ABI_IS_UNIX    1
 | |
| #endif
 | |
| 
 | |
| typedef guint64 GumAddress;
 | |
| #define GUM_ADDRESS(a) ((GumAddress) GPOINTER_TO_SIZE (a))
 | |
| typedef guint GumOS;
 | |
| typedef guint GumCallingConvention;
 | |
| typedef guint GumAbiType;
 | |
| typedef guint GumCpuType;
 | |
| typedef guint GumArgType;
 | |
| typedef guint GumBranchHint;
 | |
| typedef struct _GumCpuContext GumCpuContext;
 | |
| typedef guint GumRelocationScenario;
 | |
| 
 | |
| enum _GumOS
 | |
| {
 | |
|   GUM_OS_WINDOWS,
 | |
|   GUM_OS_MAC,
 | |
|   GUM_OS_LINUX,
 | |
|   GUM_OS_IOS,
 | |
|   GUM_OS_ANDROID,
 | |
|   GUM_OS_QNX
 | |
| };
 | |
| 
 | |
| enum _GumCallingConvention
 | |
| {
 | |
|   GUM_CALL_CAPI,
 | |
|   GUM_CALL_SYSAPI
 | |
| };
 | |
| 
 | |
| enum _GumAbiType
 | |
| {
 | |
|   GUM_ABI_UNIX,
 | |
|   GUM_ABI_WINDOWS
 | |
| };
 | |
| 
 | |
| enum _GumCpuType
 | |
| {
 | |
|   GUM_CPU_INVALID,
 | |
|   GUM_CPU_IA32,
 | |
|   GUM_CPU_AMD64,
 | |
|   GUM_CPU_ARM,
 | |
|   GUM_CPU_ARM64,
 | |
|   GUM_CPU_MIPS
 | |
| };
 | |
| 
 | |
| enum _GumArgType
 | |
| {
 | |
|   GUM_ARG_ADDRESS,
 | |
|   GUM_ARG_REGISTER,
 | |
|   GUM_ARG_POINTER /* deprecated */
 | |
| };
 | |
| 
 | |
| enum _GumBranchHint
 | |
| {
 | |
|   GUM_NO_HINT,
 | |
|   GUM_LIKELY,
 | |
|   GUM_UNLIKELY
 | |
| };
 | |
| 
 | |
| struct _GumCpuContext
 | |
| {
 | |
| #if !defined (__arm__) && !defined (__aarch64__) && !defined (__mips__)
 | |
| # if GLIB_SIZEOF_VOID_P == 8
 | |
|   guint64 rip;
 | |
| 
 | |
|   guint64 r15;
 | |
|   guint64 r14;
 | |
|   guint64 r13;
 | |
|   guint64 r12;
 | |
|   guint64 r11;
 | |
|   guint64 r10;
 | |
|   guint64 r9;
 | |
|   guint64 r8;
 | |
| 
 | |
|   guint64 rdi;
 | |
|   guint64 rsi;
 | |
|   guint64 rbp;
 | |
|   guint64 rsp;
 | |
|   guint64 rbx;
 | |
|   guint64 rdx;
 | |
|   guint64 rcx;
 | |
|   guint64 rax;
 | |
| # else
 | |
|   guint32 eip;
 | |
| 
 | |
|   guint32 edi;
 | |
|   guint32 esi;
 | |
|   guint32 ebp;
 | |
|   guint32 esp;
 | |
|   guint32 ebx;
 | |
|   guint32 edx;
 | |
|   guint32 ecx;
 | |
|   guint32 eax;
 | |
| # endif
 | |
| #elif defined (__aarch64__)
 | |
|   guint64 pc;
 | |
|   guint64 sp;
 | |
| 
 | |
|   guint64 x[29];
 | |
|   guint64 fp;
 | |
|   guint64 lr;
 | |
|   guint8 q[128];
 | |
| #elif defined (__arm__) && !defined (__aarch64__)
 | |
|   guint32 cpsr;
 | |
|   guint32 pc;
 | |
|   guint32 sp;
 | |
| 
 | |
|   guint32 r8;
 | |
|   guint32 r9;
 | |
|   guint32 r10;
 | |
|   guint32 r11;
 | |
|   guint32 r12;
 | |
| 
 | |
|   guint32 r[8];
 | |
|   guint32 lr;
 | |
| #elif defined (__mips__)
 | |
|   guint32 pc;
 | |
| 
 | |
|   guint32 gp;
 | |
|   guint32 sp;
 | |
|   guint32 fp;
 | |
|   guint32 ra;
 | |
| 
 | |
|   guint32 hi;
 | |
|   guint32 lo;
 | |
| 
 | |
|   guint32 at;
 | |
| 
 | |
|   guint32 v0;
 | |
|   guint32 v1;
 | |
| 
 | |
|   guint32 a0;
 | |
|   guint32 a1;
 | |
|   guint32 a2;
 | |
|   guint32 a3;
 | |
| 
 | |
|   guint32 t0;
 | |
|   guint32 t1;
 | |
|   guint32 t2;
 | |
|   guint32 t3;
 | |
|   guint32 t4;
 | |
|   guint32 t5;
 | |
|   guint32 t6;
 | |
|   guint32 t7;
 | |
|   guint32 t8;
 | |
|   guint32 t9;
 | |
| 
 | |
|   guint32 s0;
 | |
|   guint32 s1;
 | |
|   guint32 s2;
 | |
|   guint32 s3;
 | |
|   guint32 s4;
 | |
|   guint32 s5;
 | |
|   guint32 s6;
 | |
|   guint32 s7;
 | |
| 
 | |
|   guint32 k0;
 | |
|   guint32 k1;
 | |
| #endif
 | |
| };
 | |
| 
 | |
| enum _GumRelocationScenario
 | |
| {
 | |
|   GUM_SCENARIO_OFFLINE,
 | |
|   GUM_SCENARIO_ONLINE
 | |
| };
 | |
| 
 | |
| #ifndef __arm__
 | |
| # if GLIB_SIZEOF_VOID_P == 8
 | |
| #  define GUM_CPU_CONTEXT_XAX(c) ((c)->rax)
 | |
| #  define GUM_CPU_CONTEXT_XCX(c) ((c)->rcx)
 | |
| #  define GUM_CPU_CONTEXT_XDX(c) ((c)->rdx)
 | |
| #  define GUM_CPU_CONTEXT_XBX(c) ((c)->rbx)
 | |
| #  define GUM_CPU_CONTEXT_XSP(c) ((c)->rsp)
 | |
| #  define GUM_CPU_CONTEXT_XBP(c) ((c)->rbp)
 | |
| #  define GUM_CPU_CONTEXT_XSI(c) ((c)->rsi)
 | |
| #  define GUM_CPU_CONTEXT_XDI(c) ((c)->rdi)
 | |
| #  define GUM_CPU_CONTEXT_XIP(c) ((c)->rip)
 | |
| #  define GUM_CPU_CONTEXT_OFFSET_XAX (G_STRUCT_OFFSET (GumCpuContext, rax))
 | |
| #  define GUM_CPU_CONTEXT_OFFSET_XCX (G_STRUCT_OFFSET (GumCpuContext, rcx))
 | |
| #  define GUM_CPU_CONTEXT_OFFSET_XDX (G_STRUCT_OFFSET (GumCpuContext, rdx))
 | |
| #  define GUM_CPU_CONTEXT_OFFSET_XBX (G_STRUCT_OFFSET (GumCpuContext, rbx))
 | |
| #  define GUM_CPU_CONTEXT_OFFSET_XSP (G_STRUCT_OFFSET (GumCpuContext, rsp))
 | |
| #  define GUM_CPU_CONTEXT_OFFSET_XBP (G_STRUCT_OFFSET (GumCpuContext, rbp))
 | |
| #  define GUM_CPU_CONTEXT_OFFSET_XSI (G_STRUCT_OFFSET (GumCpuContext, rsi))
 | |
| #  define GUM_CPU_CONTEXT_OFFSET_XDI (G_STRUCT_OFFSET (GumCpuContext, rdi))
 | |
| #  define GUM_CPU_CONTEXT_OFFSET_XIP (G_STRUCT_OFFSET (GumCpuContext, rip))
 | |
| # else
 | |
| #  define GUM_CPU_CONTEXT_XAX(c) ((c)->eax)
 | |
| #  define GUM_CPU_CONTEXT_XCX(c) ((c)->ecx)
 | |
| #  define GUM_CPU_CONTEXT_XDX(c) ((c)->edx)
 | |
| #  define GUM_CPU_CONTEXT_XBX(c) ((c)->ebx)
 | |
| #  define GUM_CPU_CONTEXT_XSP(c) ((c)->esp)
 | |
| #  define GUM_CPU_CONTEXT_XBP(c) ((c)->ebp)
 | |
| #  define GUM_CPU_CONTEXT_XSI(c) ((c)->esi)
 | |
| #  define GUM_CPU_CONTEXT_XDI(c) ((c)->edi)
 | |
| #  define GUM_CPU_CONTEXT_XIP(c) ((c)->eip)
 | |
| #  define GUM_CPU_CONTEXT_OFFSET_XAX (G_STRUCT_OFFSET (GumCpuContext, eax))
 | |
| #  define GUM_CPU_CONTEXT_OFFSET_XCX (G_STRUCT_OFFSET (GumCpuContext, ecx))
 | |
| #  define GUM_CPU_CONTEXT_OFFSET_XDX (G_STRUCT_OFFSET (GumCpuContext, edx))
 | |
| #  define GUM_CPU_CONTEXT_OFFSET_XBX (G_STRUCT_OFFSET (GumCpuContext, ebx))
 | |
| #  define GUM_CPU_CONTEXT_OFFSET_XSP (G_STRUCT_OFFSET (GumCpuContext, esp))
 | |
| #  define GUM_CPU_CONTEXT_OFFSET_XBP (G_STRUCT_OFFSET (GumCpuContext, ebp))
 | |
| #  define GUM_CPU_CONTEXT_OFFSET_XSI (G_STRUCT_OFFSET (GumCpuContext, esi))
 | |
| #  define GUM_CPU_CONTEXT_OFFSET_XDI (G_STRUCT_OFFSET (GumCpuContext, edi))
 | |
| #  define GUM_CPU_CONTEXT_OFFSET_XIP (G_STRUCT_OFFSET (GumCpuContext, eip))
 | |
| # endif
 | |
| #endif
 | |
| 
 | |
| #define GUM_MAX_PATH                 260
 | |
| #define GUM_MAX_TYPE_NAME             16
 | |
| #define GUM_MAX_SYMBOL_NAME         2000
 | |
| 
 | |
| #define GUM_MAX_THREADS              768
 | |
| #define GUM_MAX_CALL_DEPTH            32
 | |
| #define GUM_MAX_BACKTRACE_DEPTH       16
 | |
| #define GUM_MAX_WORST_CASE_INFO_SIZE 128
 | |
| 
 | |
| #define GUM_MAX_LISTENERS_PER_FUNCTION 2
 | |
| #define GUM_MAX_LISTENER_DATA        512
 | |
| 
 | |
| #if GLIB_SIZEOF_VOID_P == 8
 | |
| #define GUM_CPU_MODE CS_MODE_64
 | |
| #define GUM_THUNK
 | |
| #else
 | |
| #define GUM_CPU_MODE CS_MODE_32
 | |
| #define GUM_THUNK GUM_FASTCALL
 | |
| #endif
 | |
| #if !defined (G_OS_WIN32) && GLIB_SIZEOF_VOID_P == 8
 | |
| # define GUM_THUNK_REG_ARG0 GUM_REG_XDI
 | |
| # define GUM_THUNK_REG_ARG1 GUM_REG_XSI
 | |
| #else
 | |
| # define GUM_THUNK_REG_ARG0 GUM_REG_XCX
 | |
| # define GUM_THUNK_REG_ARG1 GUM_REG_XDX
 | |
| #endif
 | |
| #define GUM_RED_ZONE_SIZE 128
 | |
| 
 | |
| #ifdef _MSC_VER
 | |
| # define GUM_CDECL __cdecl
 | |
| # define GUM_STDCALL __stdcall
 | |
| # define GUM_FASTCALL __fastcall
 | |
| # define GUM_NOINLINE __declspec (noinline)
 | |
| #else
 | |
| # ifndef __arm__
 | |
| #  if GLIB_SIZEOF_VOID_P == 4
 | |
| #   define GUM_CDECL __attribute__((cdecl))
 | |
| #   define GUM_STDCALL __attribute__((stdcall))
 | |
| #  else
 | |
| #   define GUM_CDECL
 | |
| #   define GUM_STDCALL
 | |
| #  endif
 | |
| #  define GUM_FASTCALL __attribute__((fastcall))
 | |
| # else
 | |
| #  define GUM_CDECL
 | |
| #  define GUM_STDCALL
 | |
| #  define GUM_FASTCALL
 | |
| # endif
 | |
| # define GUM_NOINLINE __attribute__((noinline))
 | |
| #endif
 | |
| 
 | |
| #define GUM_ALIGN_POINTER(t, p, b) \
 | |
|     ((t) GSIZE_TO_POINTER (((GPOINTER_TO_SIZE (p) + ((gsize) (b - 1))) & \
 | |
|         ~((gsize) (b - 1)))))
 | |
| #define GUM_ALIGN_SIZE(s, b) \
 | |
|     ((((gsize) s) + ((gsize) (b - 1))) & ~((gsize) (b - 1)))
 | |
| 
 | |
| #define GUM_FUNCPTR_TO_POINTER(f) (GSIZE_TO_POINTER (f))
 | |
| #define GUM_POINTER_TO_FUNCPTR(t, p) ((t) GPOINTER_TO_SIZE (p))
 | |
| 
 | |
| #define GUM_INT5_MASK  0x0000001f
 | |
| #define GUM_INT8_MASK  0x000000ff
 | |
| #define GUM_INT10_MASK 0x000003ff
 | |
| #define GUM_INT11_MASK 0x000007ff
 | |
| #define GUM_INT12_MASK 0x00000fff
 | |
| #define GUM_INT14_MASK 0x00003fff
 | |
| #define GUM_INT16_MASK 0x0000ffff
 | |
| #define GUM_INT18_MASK 0x0003ffff
 | |
| #define GUM_INT19_MASK 0x0007ffff
 | |
| #define GUM_INT24_MASK 0x00ffffff
 | |
| #define GUM_INT26_MASK 0x03ffffff
 | |
| #define GUM_INT28_MASK 0x0fffffff
 | |
| 
 | |
| #define GUM_IS_WITHIN_UINT7_RANGE(i) \
 | |
|     (((gint64) (i)) >= G_GINT64_CONSTANT (0) && \
 | |
|      ((gint64) (i)) <= G_GINT64_CONSTANT (127))
 | |
| #define GUM_IS_WITHIN_INT8_RANGE(i) \
 | |
|     (((gint64) (i)) >= G_GINT64_CONSTANT (-128) && \
 | |
|      ((gint64) (i)) <= G_GINT64_CONSTANT (127))
 | |
| #define GUM_IS_WITHIN_INT11_RANGE(i) \
 | |
|     (((gint64) (i)) >= G_GINT64_CONSTANT (-1024) && \
 | |
|      ((gint64) (i)) <= G_GINT64_CONSTANT (1023))
 | |
| #define GUM_IS_WITHIN_INT14_RANGE(i) \
 | |
|     (((gint64) (i)) >= G_GINT64_CONSTANT (-8192) && \
 | |
|      ((gint64) (i)) <= G_GINT64_CONSTANT (8191))
 | |
| #define GUM_IS_WITHIN_INT16_RANGE(i) \
 | |
|     (((gint64) (i)) >= G_GINT64_CONSTANT (-32768) && \
 | |
|      ((gint64) (i)) <= G_GINT64_CONSTANT (32767))
 | |
| #define GUM_IS_WITHIN_INT18_RANGE(i) \
 | |
|     (((gint64) (i)) >= G_GINT64_CONSTANT (-131072) && \
 | |
|      ((gint64) (i)) <= G_GINT64_CONSTANT (131071))
 | |
| #define GUM_IS_WITHIN_INT19_RANGE(i) \
 | |
|     (((gint64) (i)) >= G_GINT64_CONSTANT (-262144) && \
 | |
|      ((gint64) (i)) <= G_GINT64_CONSTANT (262143))
 | |
| #define GUM_IS_WITHIN_INT21_RANGE(i) \
 | |
|     (((gint64) (i)) >= G_GINT64_CONSTANT (-1048576) && \
 | |
|      ((gint64) (i)) <= G_GINT64_CONSTANT (1048575))
 | |
| #define GUM_IS_WITHIN_INT26_RANGE(i) \
 | |
|     (((gint64) (i)) >= G_GINT64_CONSTANT (-33554432) && \
 | |
|      ((gint64) (i)) <= G_GINT64_CONSTANT (33554431))
 | |
| #define GUM_IS_WITHIN_INT28_RANGE(i) \
 | |
|     (((gint64) (i)) >= G_GINT64_CONSTANT (-134217728) && \
 | |
|      ((gint64) (i)) <= G_GINT64_CONSTANT (134217727))
 | |
| #define GUM_IS_WITHIN_INT32_RANGE(i) \
 | |
|     (((gint64) (i)) >= (gint64) G_MININT32 && \
 | |
|      ((gint64) (i)) <= (gint64) G_MAXINT32)
 | |
| 
 | |
| #endif
 | |
| 
 | |
| /*
 | |
|  * Copyright (C) 2016 Ole André Vadla Ravnås <oleavr@nowsecure.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_API_RESOLVER_H__
 | |
| #define __GUM_API_RESOLVER_H__
 | |
| 
 | |
| /* GObject - GLib Type, Object, Parameter and Signal Library
 | |
|  * Copyright (C) 1998, 1999, 2000 Tim Janik and Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General
 | |
|  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| #ifndef __GLIB_GOBJECT_H__
 | |
| #define __GLIB_GOBJECT_H__
 | |
| 
 | |
| #define __GLIB_GOBJECT_H_INSIDE__
 | |
| 
 | |
| /* topmost include file for GObject header files */
 | |
| /* gbinding.h: Binding for object properties
 | |
|  *
 | |
|  * Copyright (C) 2010  Intel Corp.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General
 | |
|  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  * Author: Emmanuele Bassi <ebassi@linux.intel.com>
 | |
|  */
 | |
| 
 | |
| #ifndef __G_BINDING_H__
 | |
| #define __G_BINDING_H__
 | |
| 
 | |
| #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
 | |
| #error "Only <glib-object.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| /* GObject - GLib Type, Object, Parameter and Signal Library
 | |
|  * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General
 | |
|  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| #ifndef __G_OBJECT_H__
 | |
| #define __G_OBJECT_H__
 | |
| 
 | |
| #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
 | |
| #error "Only <glib-object.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| /* GObject - GLib Type, Object, Parameter and Signal Library
 | |
|  * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General
 | |
|  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| #ifndef __G_TYPE_H__
 | |
| #define __G_TYPE_H__
 | |
| 
 | |
| #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
 | |
| #error "Only <glib-object.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* Basic Type Macros
 | |
|  */
 | |
| /**
 | |
|  * G_TYPE_FUNDAMENTAL:
 | |
|  * @type: A #GType value.
 | |
|  * 
 | |
|  * The fundamental type which is the ancestor of @type.
 | |
|  * Fundamental types are types that serve as ultimate bases for the derived types, 
 | |
|  * thus they are the roots of distinct inheritance hierarchies.
 | |
|  */
 | |
| #define G_TYPE_FUNDAMENTAL(type)	(g_type_fundamental (type))
 | |
| /**
 | |
|  * G_TYPE_FUNDAMENTAL_MAX:
 | |
|  * 
 | |
|  * An integer constant that represents the number of identifiers reserved
 | |
|  * for types that are assigned at compile-time.
 | |
|  */
 | |
| #define	G_TYPE_FUNDAMENTAL_MAX		(255 << G_TYPE_FUNDAMENTAL_SHIFT)
 | |
| 
 | |
| /* Constant fundamental types,
 | |
|  */
 | |
| /**
 | |
|  * G_TYPE_INVALID:
 | |
|  * 
 | |
|  * An invalid #GType used as error return value in some functions which return
 | |
|  * a #GType. 
 | |
|  */
 | |
| #define G_TYPE_INVALID			G_TYPE_MAKE_FUNDAMENTAL (0)
 | |
| /**
 | |
|  * G_TYPE_NONE:
 | |
|  * 
 | |
|  * A fundamental type which is used as a replacement for the C
 | |
|  * void return type.
 | |
|  */
 | |
| #define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
 | |
| /**
 | |
|  * G_TYPE_INTERFACE:
 | |
|  * 
 | |
|  * The fundamental type from which all interfaces are derived.
 | |
|  */
 | |
| #define G_TYPE_INTERFACE		G_TYPE_MAKE_FUNDAMENTAL (2)
 | |
| /**
 | |
|  * G_TYPE_CHAR:
 | |
|  * 
 | |
|  * The fundamental type corresponding to #gchar.
 | |
|  * The type designated by G_TYPE_CHAR is unconditionally an 8-bit signed integer.
 | |
|  * This may or may not be the same type a the C type "gchar".
 | |
|  */
 | |
| #define G_TYPE_CHAR			G_TYPE_MAKE_FUNDAMENTAL (3)
 | |
| /**
 | |
|  * G_TYPE_UCHAR:
 | |
|  * 
 | |
|  * The fundamental type corresponding to #guchar.
 | |
|  */
 | |
| #define G_TYPE_UCHAR			G_TYPE_MAKE_FUNDAMENTAL (4)
 | |
| /**
 | |
|  * G_TYPE_BOOLEAN:
 | |
|  * 
 | |
|  * The fundamental type corresponding to #gboolean.
 | |
|  */
 | |
| #define G_TYPE_BOOLEAN			G_TYPE_MAKE_FUNDAMENTAL (5)
 | |
| /**
 | |
|  * G_TYPE_INT:
 | |
|  * 
 | |
|  * The fundamental type corresponding to #gint.
 | |
|  */
 | |
| #define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
 | |
| /**
 | |
|  * G_TYPE_UINT:
 | |
|  * 
 | |
|  * The fundamental type corresponding to #guint.
 | |
|  */
 | |
| #define G_TYPE_UINT			G_TYPE_MAKE_FUNDAMENTAL (7)
 | |
| /**
 | |
|  * G_TYPE_LONG:
 | |
|  * 
 | |
|  * The fundamental type corresponding to #glong.
 | |
|  */
 | |
| #define G_TYPE_LONG			G_TYPE_MAKE_FUNDAMENTAL (8)
 | |
| /**
 | |
|  * G_TYPE_ULONG:
 | |
|  * 
 | |
|  * The fundamental type corresponding to #gulong.
 | |
|  */
 | |
| #define G_TYPE_ULONG			G_TYPE_MAKE_FUNDAMENTAL (9)
 | |
| /**
 | |
|  * G_TYPE_INT64:
 | |
|  * 
 | |
|  * The fundamental type corresponding to #gint64.
 | |
|  */
 | |
| #define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
 | |
| /**
 | |
|  * G_TYPE_UINT64:
 | |
|  * 
 | |
|  * The fundamental type corresponding to #guint64.
 | |
|  */
 | |
| #define G_TYPE_UINT64			G_TYPE_MAKE_FUNDAMENTAL (11)
 | |
| /**
 | |
|  * G_TYPE_ENUM:
 | |
|  * 
 | |
|  * The fundamental type from which all enumeration types are derived.
 | |
|  */
 | |
| #define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
 | |
| /**
 | |
|  * G_TYPE_FLAGS:
 | |
|  * 
 | |
|  * The fundamental type from which all flags types are derived.
 | |
|  */
 | |
| #define G_TYPE_FLAGS			G_TYPE_MAKE_FUNDAMENTAL (13)
 | |
| /**
 | |
|  * G_TYPE_FLOAT:
 | |
|  * 
 | |
|  * The fundamental type corresponding to #gfloat.
 | |
|  */
 | |
| #define G_TYPE_FLOAT			G_TYPE_MAKE_FUNDAMENTAL (14)
 | |
| /**
 | |
|  * G_TYPE_DOUBLE:
 | |
|  * 
 | |
|  * The fundamental type corresponding to #gdouble.
 | |
|  */
 | |
| #define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
 | |
| /**
 | |
|  * G_TYPE_STRING:
 | |
|  * 
 | |
|  * The fundamental type corresponding to nul-terminated C strings.
 | |
|  */
 | |
| #define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
 | |
| /**
 | |
|  * G_TYPE_POINTER:
 | |
|  * 
 | |
|  * The fundamental type corresponding to #gpointer.
 | |
|  */
 | |
| #define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
 | |
| /**
 | |
|  * G_TYPE_BOXED:
 | |
|  * 
 | |
|  * The fundamental type from which all boxed types are derived.
 | |
|  */
 | |
| #define G_TYPE_BOXED			G_TYPE_MAKE_FUNDAMENTAL (18)
 | |
| /**
 | |
|  * G_TYPE_PARAM:
 | |
|  * 
 | |
|  * The fundamental type from which all #GParamSpec types are derived.
 | |
|  */
 | |
| #define G_TYPE_PARAM			G_TYPE_MAKE_FUNDAMENTAL (19)
 | |
| /**
 | |
|  * G_TYPE_OBJECT:
 | |
|  * 
 | |
|  * The fundamental type for #GObject.
 | |
|  */
 | |
| #define G_TYPE_OBJECT			G_TYPE_MAKE_FUNDAMENTAL (20)
 | |
| /**
 | |
|  * G_TYPE_VARIANT:
 | |
|  *
 | |
|  * The fundamental type corresponding to #GVariant.
 | |
|  *
 | |
|  * All floating #GVariant instances passed through the #GType system are
 | |
|  * consumed.
 | |
|  * 
 | |
|  * Note that callbacks in closures, and signal handlers
 | |
|  * for signals of return type %G_TYPE_VARIANT, must never return floating
 | |
|  * variants.
 | |
|  *
 | |
|  * Note: GLib 2.24 did include a boxed type with this name. It was replaced
 | |
|  * with this fundamental type in 2.26.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| #define	G_TYPE_VARIANT                  G_TYPE_MAKE_FUNDAMENTAL (21)
 | |
| 
 | |
| 
 | |
| /* Reserved fundamental type numbers to create new fundamental
 | |
|  * type IDs with G_TYPE_MAKE_FUNDAMENTAL().
 | |
|  * Send email to gtk-devel-list@gnome.org for reservations.
 | |
|  */
 | |
| /**
 | |
|  * G_TYPE_FUNDAMENTAL_SHIFT:
 | |
|  *
 | |
|  * Shift value used in converting numbers to type IDs.
 | |
|  */
 | |
| #define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
 | |
| /**
 | |
|  * G_TYPE_MAKE_FUNDAMENTAL:
 | |
|  * @x: the fundamental type number.
 | |
|  * 
 | |
|  * Get the type ID for the fundamental type number @x.
 | |
|  * Use g_type_fundamental_next() instead of this macro to create new fundamental 
 | |
|  * types.
 | |
|  *
 | |
|  * Returns: the GType
 | |
|  */
 | |
| #define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
 | |
| /**
 | |
|  * G_TYPE_RESERVED_GLIB_FIRST:
 | |
|  * 
 | |
|  * First fundamental type number to create a new fundamental type id with
 | |
|  * G_TYPE_MAKE_FUNDAMENTAL() reserved for GLib.
 | |
|  */
 | |
| #define G_TYPE_RESERVED_GLIB_FIRST	(22)
 | |
| /**
 | |
|  * G_TYPE_RESERVED_GLIB_LAST:
 | |
|  * 
 | |
|  * Last fundamental type number reserved for GLib.
 | |
|  */
 | |
| #define G_TYPE_RESERVED_GLIB_LAST	(31)
 | |
| /**
 | |
|  * G_TYPE_RESERVED_BSE_FIRST:
 | |
|  * 
 | |
|  * First fundamental type number to create a new fundamental type id with
 | |
|  * G_TYPE_MAKE_FUNDAMENTAL() reserved for BSE.
 | |
|  */
 | |
| #define G_TYPE_RESERVED_BSE_FIRST	(32)
 | |
| /**
 | |
|  * G_TYPE_RESERVED_BSE_LAST:
 | |
|  * 
 | |
|  * Last fundamental type number reserved for BSE.
 | |
|  */
 | |
| #define G_TYPE_RESERVED_BSE_LAST	(48)
 | |
| /**
 | |
|  * G_TYPE_RESERVED_USER_FIRST:
 | |
|  * 
 | |
|  * First available fundamental type number to create new fundamental 
 | |
|  * type id with G_TYPE_MAKE_FUNDAMENTAL().
 | |
|  */
 | |
| #define G_TYPE_RESERVED_USER_FIRST	(49)
 | |
| 
 | |
| 
 | |
| /* Type Checking Macros
 | |
|  */
 | |
| /**
 | |
|  * G_TYPE_IS_FUNDAMENTAL:
 | |
|  * @type: A #GType value
 | |
|  * 
 | |
|  * Checks if @type is a fundamental type.
 | |
|  *
 | |
|  * Returns: %TRUE on success
 | |
|  */
 | |
| #define G_TYPE_IS_FUNDAMENTAL(type)             ((type) <= G_TYPE_FUNDAMENTAL_MAX)
 | |
| /**
 | |
|  * G_TYPE_IS_DERIVED:
 | |
|  * @type: A #GType value
 | |
|  * 
 | |
|  * Checks if @type is derived (or in object-oriented terminology:
 | |
|  * inherited) from another type (this holds true for all non-fundamental
 | |
|  * types).
 | |
|  *
 | |
|  * Returns: %TRUE on success
 | |
|  */
 | |
| #define G_TYPE_IS_DERIVED(type)                 ((type) > G_TYPE_FUNDAMENTAL_MAX)
 | |
| /**
 | |
|  * G_TYPE_IS_INTERFACE:
 | |
|  * @type: A #GType value
 | |
|  * 
 | |
|  * Checks if @type is an interface type.
 | |
|  * An interface type provides a pure API, the implementation
 | |
|  * of which is provided by another type (which is then said to conform
 | |
|  * to the interface).  GLib interfaces are somewhat analogous to Java
 | |
|  * interfaces and C++ classes containing only pure virtual functions, 
 | |
|  * with the difference that GType interfaces are not derivable (but see
 | |
|  * g_type_interface_add_prerequisite() for an alternative).
 | |
|  *
 | |
|  * Returns: %TRUE on success
 | |
|  */
 | |
| #define G_TYPE_IS_INTERFACE(type)               (G_TYPE_FUNDAMENTAL (type) == G_TYPE_INTERFACE)
 | |
| /**
 | |
|  * G_TYPE_IS_CLASSED:
 | |
|  * @type: A #GType value
 | |
|  * 
 | |
|  * Checks if @type is a classed type.
 | |
|  *
 | |
|  * Returns: %TRUE on success
 | |
|  */
 | |
| #define G_TYPE_IS_CLASSED(type)                 (g_type_test_flags ((type), G_TYPE_FLAG_CLASSED))
 | |
| /**
 | |
|  * G_TYPE_IS_INSTANTIATABLE:
 | |
|  * @type: A #GType value
 | |
|  * 
 | |
|  * Checks if @type can be instantiated.  Instantiation is the
 | |
|  * process of creating an instance (object) of this type.
 | |
|  *
 | |
|  * Returns: %TRUE on success
 | |
|  */
 | |
| #define G_TYPE_IS_INSTANTIATABLE(type)          (g_type_test_flags ((type), G_TYPE_FLAG_INSTANTIATABLE))
 | |
| /**
 | |
|  * G_TYPE_IS_DERIVABLE:
 | |
|  * @type: A #GType value
 | |
|  * 
 | |
|  * Checks if @type is a derivable type.  A derivable type can
 | |
|  * be used as the base class of a flat (single-level) class hierarchy.
 | |
|  *
 | |
|  * Returns: %TRUE on success
 | |
|  */
 | |
| #define G_TYPE_IS_DERIVABLE(type)               (g_type_test_flags ((type), G_TYPE_FLAG_DERIVABLE))
 | |
| /**
 | |
|  * G_TYPE_IS_DEEP_DERIVABLE:
 | |
|  * @type: A #GType value
 | |
|  * 
 | |
|  * Checks if @type is a deep derivable type.  A deep derivable type
 | |
|  * can be used as the base class of a deep (multi-level) class hierarchy.
 | |
|  *
 | |
|  * Returns: %TRUE on success
 | |
|  */
 | |
| #define G_TYPE_IS_DEEP_DERIVABLE(type)          (g_type_test_flags ((type), G_TYPE_FLAG_DEEP_DERIVABLE))
 | |
| /**
 | |
|  * G_TYPE_IS_ABSTRACT:
 | |
|  * @type: A #GType value
 | |
|  * 
 | |
|  * Checks if @type is an abstract type.  An abstract type cannot be
 | |
|  * instantiated and is normally used as an abstract base class for
 | |
|  * derived classes.
 | |
|  *
 | |
|  * Returns: %TRUE on success
 | |
|  */
 | |
| #define G_TYPE_IS_ABSTRACT(type)                (g_type_test_flags ((type), G_TYPE_FLAG_ABSTRACT))
 | |
| /**
 | |
|  * G_TYPE_IS_VALUE_ABSTRACT:
 | |
|  * @type: A #GType value
 | |
|  * 
 | |
|  * Checks if @type is an abstract value type.  An abstract value type introduces
 | |
|  * a value table, but can't be used for g_value_init() and is normally used as
 | |
|  * an abstract base type for derived value types.
 | |
|  *
 | |
|  * Returns: %TRUE on success
 | |
|  */
 | |
| #define G_TYPE_IS_VALUE_ABSTRACT(type)          (g_type_test_flags ((type), G_TYPE_FLAG_VALUE_ABSTRACT))
 | |
| /**
 | |
|  * G_TYPE_IS_VALUE_TYPE:
 | |
|  * @type: A #GType value
 | |
|  * 
 | |
|  * Checks if @type is a value type and can be used with g_value_init(). 
 | |
|  *
 | |
|  * Returns: %TRUE on success
 | |
|  */
 | |
| #define G_TYPE_IS_VALUE_TYPE(type)              (g_type_check_is_value_type (type))
 | |
| /**
 | |
|  * G_TYPE_HAS_VALUE_TABLE:
 | |
|  * @type: A #GType value
 | |
|  * 
 | |
|  * Checks if @type has a #GTypeValueTable.
 | |
|  *
 | |
|  * Returns: %TRUE on success
 | |
|  */
 | |
| #define G_TYPE_HAS_VALUE_TABLE(type)            (g_type_value_table_peek (type) != NULL)
 | |
| 
 | |
| 
 | |
| /* Typedefs
 | |
|  */
 | |
| /**
 | |
|  * GType:
 | |
|  * 
 | |
|  * A numerical value which represents the unique identifier of a registered
 | |
|  * type.
 | |
|  */
 | |
| #if     GLIB_SIZEOF_SIZE_T != GLIB_SIZEOF_LONG || !defined __cplusplus
 | |
| typedef gsize                           GType;
 | |
| #else   /* for historic reasons, C++ links against gulong GTypes */
 | |
| typedef gulong                          GType;
 | |
| #endif
 | |
| typedef struct _GValue                  GValue;
 | |
| typedef union  _GTypeCValue             GTypeCValue;
 | |
| typedef struct _GTypePlugin             GTypePlugin;
 | |
| typedef struct _GTypeClass              GTypeClass;
 | |
| typedef struct _GTypeInterface          GTypeInterface;
 | |
| typedef struct _GTypeInstance           GTypeInstance;
 | |
| typedef struct _GTypeInfo               GTypeInfo;
 | |
| typedef struct _GTypeFundamentalInfo    GTypeFundamentalInfo;
 | |
| typedef struct _GInterfaceInfo          GInterfaceInfo;
 | |
| typedef struct _GTypeValueTable         GTypeValueTable;
 | |
| typedef struct _GTypeQuery		GTypeQuery;
 | |
| 
 | |
| 
 | |
| /* Basic Type Structures
 | |
|  */
 | |
| /**
 | |
|  * GTypeClass:
 | |
|  * 
 | |
|  * An opaque structure used as the base of all classes.
 | |
|  */
 | |
| struct _GTypeClass
 | |
| {
 | |
|   /*< private >*/
 | |
|   GType g_type;
 | |
| };
 | |
| /**
 | |
|  * GTypeInstance:
 | |
|  * 
 | |
|  * An opaque structure used as the base of all type instances.
 | |
|  */
 | |
| struct _GTypeInstance
 | |
| {
 | |
|   /*< private >*/
 | |
|   GTypeClass *g_class;
 | |
| };
 | |
| /**
 | |
|  * GTypeInterface:
 | |
|  * 
 | |
|  * An opaque structure used as the base of all interface types.
 | |
|  */
 | |
| struct _GTypeInterface
 | |
| {
 | |
|   /*< private >*/
 | |
|   GType g_type;         /* iface type */
 | |
|   GType g_instance_type;
 | |
| };
 | |
| /**
 | |
|  * GTypeQuery:
 | |
|  * @type: the #GType value of the type
 | |
|  * @type_name: the name of the type
 | |
|  * @class_size: the size of the class structure
 | |
|  * @instance_size: the size of the instance structure
 | |
|  * 
 | |
|  * A structure holding information for a specific type.
 | |
|  * It is filled in by the g_type_query() function.
 | |
|  */
 | |
| struct _GTypeQuery
 | |
| {
 | |
|   GType		type;
 | |
|   const gchar  *type_name;
 | |
|   guint		class_size;
 | |
|   guint		instance_size;
 | |
| };
 | |
| 
 | |
| 
 | |
| /* Casts, checks and accessors for structured types
 | |
|  * usage of these macros is reserved to type implementations only
 | |
|  */
 | |
| /*< protected >*/
 | |
| /**
 | |
|  * G_TYPE_CHECK_INSTANCE:
 | |
|  * @instance: Location of a #GTypeInstance structure
 | |
|  * 
 | |
|  * Checks if @instance is a valid #GTypeInstance structure,
 | |
|  * otherwise issues a warning and returns %FALSE. %NULL is not a valid
 | |
|  * #GTypeInstance.
 | |
|  * 
 | |
|  * This macro should only be used in type implementations.
 | |
|  *
 | |
|  * Returns: %TRUE on success
 | |
|  */
 | |
| #define G_TYPE_CHECK_INSTANCE(instance)				(_G_TYPE_CHI ((GTypeInstance*) (instance)))
 | |
| /**
 | |
|  * lG_TYPE_CHECK_INSTANCE_CAST:
 | |
|  * @instance: (nullable): Location of a #GTypeInstance structure
 | |
|  * @g_type: The type to be returned
 | |
|  * @c_type: The corresponding C type of @g_type
 | |
|  * 
 | |
|  * Checks that @instance is an instance of the type identified by @g_type
 | |
|  * and issues a warning if this is not the case. Returns @instance casted 
 | |
|  * to a pointer to @c_type.
 | |
|  *
 | |
|  * No warning will be issued if @instance is %NULL, and %NULL will be returned.
 | |
|  * 
 | |
|  * This macro should only be used in type implementations.
 | |
|  */
 | |
| #define lG_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (l_G_TYPE_CIC ((instance), (g_type), c_type))
 | |
| /**
 | |
|  * lG_TYPE_CHECK_INSTANCE_TYPE:
 | |
|  * @instance: (nullable): Location of a #GTypeInstance structure.
 | |
|  * @g_type: The type to be checked
 | |
|  * 
 | |
|  * Checks if @instance is an instance of the type identified by @g_type. If
 | |
|  * @instance is %NULL, %FALSE will be returned.
 | |
|  * 
 | |
|  * This macro should only be used in type implementations.
 | |
|  *
 | |
|  * Returns: %TRUE on success
 | |
|  */
 | |
| #define lG_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (l_G_TYPE_CIT ((instance), (g_type)))
 | |
| /**
 | |
|  * G_TYPE_CHECK_INSTANCE_FUNDAMENTAL_TYPE:
 | |
|  * @instance: (nullable): Location of a #GTypeInstance structure.
 | |
|  * @g_type: The fundamental type to be checked
 | |
|  *
 | |
|  * Checks if @instance is an instance of the fundamental type identified by @g_type.
 | |
|  * If @instance is %NULL, %FALSE will be returned.
 | |
|  *
 | |
|  * This macro should only be used in type implementations.
 | |
|  *
 | |
|  * Returns: %TRUE on success
 | |
|  */
 | |
| #define G_TYPE_CHECK_INSTANCE_FUNDAMENTAL_TYPE(instance, g_type)            (_G_TYPE_CIFT ((instance), (g_type)))
 | |
| /**
 | |
|  * G_TYPE_INSTANCE_GET_CLASS:
 | |
|  * @instance: Location of the #GTypeInstance structure
 | |
|  * @g_type: The #GType of the class to be returned
 | |
|  * @c_type: The C type of the class structure
 | |
|  * 
 | |
|  * Get the class structure of a given @instance, casted
 | |
|  * to a specified ancestor type @g_type of the instance.
 | |
|  * 
 | |
|  * Note that while calling a GInstanceInitFunc(), the class pointer
 | |
|  * gets modified, so it might not always return the expected pointer.
 | |
|  * 
 | |
|  * This macro should only be used in type implementations.
 | |
|  *
 | |
|  * Returns: a pointer to the class structure
 | |
|  */
 | |
| #define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
 | |
| /**
 | |
|  * G_TYPE_INSTANCE_GET_INTERFACE:
 | |
|  * @instance: Location of the #GTypeInstance structure
 | |
|  * @g_type: The #GType of the interface to be returned
 | |
|  * @c_type: The C type of the interface structure
 | |
|  * 
 | |
|  * Get the interface structure for interface @g_type of a given @instance.
 | |
|  * 
 | |
|  * This macro should only be used in type implementations.
 | |
|  *
 | |
|  * Returns: a pointer to the interface structure
 | |
|  */
 | |
| #define G_TYPE_INSTANCE_GET_INTERFACE(instance, g_type, c_type) (_G_TYPE_IGI ((instance), (g_type), c_type))
 | |
| /**
 | |
|  * G_TYPE_CHECK_CLASS_CAST:
 | |
|  * @g_class: Location of a #GTypeClass structure
 | |
|  * @g_type: The type to be returned
 | |
|  * @c_type: The corresponding C type of class structure of @g_type
 | |
|  * 
 | |
|  * Checks that @g_class is a class structure of the type identified by @g_type
 | |
|  * and issues a warning if this is not the case. Returns @g_class casted 
 | |
|  * to a pointer to @c_type. %NULL is not a valid class structure.
 | |
|  * 
 | |
|  * This macro should only be used in type implementations.
 | |
|  */
 | |
| #define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
 | |
| /**
 | |
|  * G_TYPE_CHECK_CLASS_TYPE:
 | |
|  * @g_class: (nullable): Location of a #GTypeClass structure
 | |
|  * @g_type: The type to be checked
 | |
|  * 
 | |
|  * Checks if @g_class is a class structure of the type identified by 
 | |
|  * @g_type. If @g_class is %NULL, %FALSE will be returned.
 | |
|  * 
 | |
|  * This macro should only be used in type implementations.
 | |
|  *
 | |
|  * Returns: %TRUE on success
 | |
|  */
 | |
| #define G_TYPE_CHECK_CLASS_TYPE(g_class, g_type)                (_G_TYPE_CCT ((g_class), (g_type)))
 | |
| /**
 | |
|  * G_TYPE_CHECK_VALUE:
 | |
|  * @value: a #GValue
 | |
|  * 
 | |
|  * Checks if @value has been initialized to hold values
 | |
|  * of a value type.
 | |
|  * 
 | |
|  * This macro should only be used in type implementations.
 | |
|  *
 | |
|  * Returns: %TRUE on success
 | |
|  */
 | |
| #define G_TYPE_CHECK_VALUE(value)				(_G_TYPE_CHV ((value)))
 | |
| /**
 | |
|  * G_TYPE_CHECK_VALUE_TYPE:
 | |
|  * @value: a #GValue
 | |
|  * @g_type: The type to be checked
 | |
|  * 
 | |
|  * Checks if @value has been initialized to hold values
 | |
|  * of type @g_type. 
 | |
|  * 
 | |
|  * This macro should only be used in type implementations.
 | |
|  *
 | |
|  * Returns: %TRUE on success
 | |
|  */
 | |
| #define G_TYPE_CHECK_VALUE_TYPE(value, g_type)			(_G_TYPE_CVH ((value), (g_type)))
 | |
| /**
 | |
|  * G_TYPE_FROM_INSTANCE:
 | |
|  * @instance: Location of a valid #GTypeInstance structure
 | |
|  * 
 | |
|  * Get the type identifier from a given @instance structure. 
 | |
|  * 
 | |
|  * This macro should only be used in type implementations.
 | |
|  *
 | |
|  * Returns: the #GType
 | |
|  */
 | |
| #define G_TYPE_FROM_INSTANCE(instance)                          (G_TYPE_FROM_CLASS (((GTypeInstance*) (instance))->g_class))
 | |
| /**
 | |
|  * G_TYPE_FROM_CLASS:
 | |
|  * @g_class: Location of a valid #GTypeClass structure
 | |
|  * 
 | |
|  * Get the type identifier from a given @class structure.
 | |
|  * 
 | |
|  * This macro should only be used in type implementations.
 | |
|  *
 | |
|  * Returns: the #GType
 | |
|  */
 | |
| #define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
 | |
| /**
 | |
|  * G_TYPE_FROM_INTERFACE:
 | |
|  * @g_iface: Location of a valid #GTypeInterface structure
 | |
|  * 
 | |
|  * Get the type identifier from a given @interface structure.
 | |
|  * 
 | |
|  * This macro should only be used in type implementations.
 | |
|  *
 | |
|  * Returns: the #GType
 | |
|  */
 | |
| #define G_TYPE_FROM_INTERFACE(g_iface)                          (((GTypeInterface*) (g_iface))->g_type)
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_INSTANCE_GET_PRIVATE:
 | |
|  * @instance: the instance of a type deriving from @private_type
 | |
|  * @g_type: the type identifying which private data to retrieve
 | |
|  * @c_type: The C type for the private structure
 | |
|  * 
 | |
|  * Gets the private structure for a particular type.
 | |
|  * The private structure must have been registered in the
 | |
|  * class_init function with g_type_class_add_private().
 | |
|  * 
 | |
|  * This macro should only be used in type implementations.
 | |
|  * 
 | |
|  * Since: 2.4
 | |
|  * Returns: (not nullable): a pointer to the private data structure
 | |
|  */
 | |
| #define G_TYPE_INSTANCE_GET_PRIVATE(instance, g_type, c_type)   ((c_type*) g_type_instance_get_private ((GTypeInstance*) (instance), (g_type)))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_CLASS_GET_PRIVATE:
 | |
|  * @klass: the class of a type deriving from @private_type
 | |
|  * @g_type: the type identifying which private data to retrieve
 | |
|  * @c_type: The C type for the private structure
 | |
|  * 
 | |
|  * Gets the private class structure for a particular type.
 | |
|  * The private structure must have been registered in the
 | |
|  * get_type() function with g_type_add_class_private().
 | |
|  * 
 | |
|  * This macro should only be used in type implementations.
 | |
|  * 
 | |
|  * Since: 2.24
 | |
|  * Returns: (not nullable): a pointer to the private data structure
 | |
|  */
 | |
| #define G_TYPE_CLASS_GET_PRIVATE(klass, g_type, c_type)   ((c_type*) g_type_class_get_private ((GTypeClass*) (klass), (g_type)))
 | |
| 
 | |
| /**
 | |
|  * GTypeDebugFlags:
 | |
|  * @G_TYPE_DEBUG_NONE: Print no messages
 | |
|  * @G_TYPE_DEBUG_OBJECTS: Print messages about object bookkeeping
 | |
|  * @G_TYPE_DEBUG_SIGNALS: Print messages about signal emissions
 | |
|  * @G_TYPE_DEBUG_MASK: Mask covering all debug flags
 | |
|  * @G_TYPE_DEBUG_INSTANCE_COUNT: Keep a count of instances of each type
 | |
|  *
 | |
|  * These flags used to be passed to g_type_init_with_debug_flags() which
 | |
|  * is now deprecated.
 | |
|  *
 | |
|  * If you need to enable debugging features, use the GOBJECT_DEBUG
 | |
|  * environment variable.
 | |
|  *
 | |
|  * Deprecated: 2.36: g_type_init() is now done automatically
 | |
|  */
 | |
| typedef enum	/*< skip >*/
 | |
| {
 | |
|   G_TYPE_DEBUG_NONE	= 0,
 | |
|   G_TYPE_DEBUG_OBJECTS	= 1 << 0,
 | |
|   G_TYPE_DEBUG_SIGNALS	= 1 << 1,
 | |
|   G_TYPE_DEBUG_INSTANCE_COUNT = 1 << 2,
 | |
|   G_TYPE_DEBUG_MASK	= 0x07
 | |
| } GTypeDebugFlags;
 | |
| 
 | |
| 
 | |
| /* --- prototypes --- */
 | |
| GLIB_DEPRECATED_IN_2_36
 | |
| void                  g_type_init                    (void);
 | |
| GLIB_DEPRECATED_IN_2_36
 | |
| void                  g_type_init_with_debug_flags   (GTypeDebugFlags  debug_flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_type_name                    (GType            type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GQuark                g_type_qname                   (GType            type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType                 g_type_from_name               (const gchar     *name);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType                 g_type_parent                  (GType            type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint                 g_type_depth                   (GType            type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType                 g_type_next_base               (GType            leaf_type,
 | |
| 						      GType            root_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean              g_type_is_a                    (GType            type,
 | |
| 						      GType            is_a_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer              g_type_class_ref               (GType            type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer              g_type_class_peek              (GType            type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer              g_type_class_peek_static       (GType            type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_type_class_unref             (gpointer         g_class);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer              g_type_class_peek_parent       (gpointer         g_class);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer              g_type_interface_peek          (gpointer         instance_class,
 | |
| 						      GType            iface_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer              g_type_interface_peek_parent   (gpointer         g_iface);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer              g_type_default_interface_ref   (GType            g_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer              g_type_default_interface_peek  (GType            g_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_type_default_interface_unref (gpointer         g_iface);
 | |
| 
 | |
| /* g_free() the returned arrays */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType*                g_type_children                (GType            type,
 | |
| 						      guint           *n_children);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType*                g_type_interfaces              (GType            type,
 | |
| 						      guint           *n_interfaces);
 | |
| 
 | |
| /* per-type _static_ data */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_type_set_qdata               (GType            type,
 | |
| 						      GQuark           quark,
 | |
| 						      gpointer         data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer              g_type_get_qdata               (GType            type,
 | |
| 						      GQuark           quark);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_type_query		     (GType	       type,
 | |
| 						      GTypeQuery      *query);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_44
 | |
| int                   g_type_get_instance_count      (GType            type);
 | |
| 
 | |
| /* --- type registration --- */
 | |
| /**
 | |
|  * GBaseInitFunc:
 | |
|  * @g_class: (type GObject.TypeClass): The #GTypeClass structure to initialize
 | |
|  * 
 | |
|  * A callback function used by the type system to do base initialization
 | |
|  * of the class structures of derived types. It is called as part of the
 | |
|  * initialization process of all derived classes and should reallocate
 | |
|  * or reset all dynamic class members copied over from the parent class.
 | |
|  * For example, class members (such as strings) that are not sufficiently
 | |
|  * handled by a plain memory copy of the parent class into the derived class
 | |
|  * have to be altered. See GClassInitFunc() for a discussion of the class
 | |
|  * initialization process.
 | |
|  */
 | |
| typedef void   (*GBaseInitFunc)              (gpointer         g_class);
 | |
| /**
 | |
|  * GBaseFinalizeFunc:
 | |
|  * @g_class: (type GObject.TypeClass): The #GTypeClass structure to finalize
 | |
|  * 
 | |
|  * A callback function used by the type system to finalize those portions
 | |
|  * of a derived types class structure that were setup from the corresponding
 | |
|  * GBaseInitFunc() function. Class finalization basically works the inverse
 | |
|  * way in which class initialization is performed.
 | |
|  * See GClassInitFunc() for a discussion of the class initialization process.
 | |
|  */
 | |
| typedef void   (*GBaseFinalizeFunc)          (gpointer         g_class);
 | |
| /**
 | |
|  * GClassInitFunc:
 | |
|  * @g_class: (type GObject.TypeClass): The #GTypeClass structure to initialize.
 | |
|  * @class_data: The @class_data member supplied via the #GTypeInfo structure.
 | |
|  * 
 | |
|  * A callback function used by the type system to initialize the class
 | |
|  * of a specific type. This function should initialize all static class
 | |
|  * members.
 | |
|  *
 | |
|  * The initialization process of a class involves:
 | |
|  * 
 | |
|  * - Copying common members from the parent class over to the
 | |
|  *   derived class structure.
 | |
|  * - Zero initialization of the remaining members not copied
 | |
|  *   over from the parent class.
 | |
|  * - Invocation of the GBaseInitFunc() initializers of all parent
 | |
|  *   types and the class' type.
 | |
|  * - Invocation of the class' GClassInitFunc() initializer.
 | |
|  *
 | |
|  * Since derived classes are partially initialized through a memory copy
 | |
|  * of the parent class, the general rule is that GBaseInitFunc() and
 | |
|  * GBaseFinalizeFunc() should take care of necessary reinitialization
 | |
|  * and release of those class members that were introduced by the type
 | |
|  * that specified these GBaseInitFunc()/GBaseFinalizeFunc().
 | |
|  * GClassInitFunc() should only care about initializing static
 | |
|  * class members, while dynamic class members (such as allocated strings
 | |
|  * or reference counted resources) are better handled by a GBaseInitFunc()
 | |
|  * for this type, so proper initialization of the dynamic class members
 | |
|  * is performed for class initialization of derived types as well.
 | |
|  *
 | |
|  * An example may help to correspond the intend of the different class
 | |
|  * initializers:
 | |
|  * 
 | |
|  * |[<!-- language="C" -->
 | |
|  * typedef struct {
 | |
|  *   GObjectClass parent_class;
 | |
|  *   gint         static_integer;
 | |
|  *   gchar       *dynamic_string;
 | |
|  * } TypeAClass;
 | |
|  * static void
 | |
|  * type_a_base_class_init (TypeAClass *class)
 | |
|  * {
 | |
|  *   class->dynamic_string = g_strdup ("some string");
 | |
|  * }
 | |
|  * static void
 | |
|  * type_a_base_class_finalize (TypeAClass *class)
 | |
|  * {
 | |
|  *   g_free (class->dynamic_string);
 | |
|  * }
 | |
|  * static void
 | |
|  * type_a_class_init (TypeAClass *class)
 | |
|  * {
 | |
|  *   class->static_integer = 42;
 | |
|  * }
 | |
|  * 
 | |
|  * typedef struct {
 | |
|  *   TypeAClass   parent_class;
 | |
|  *   gfloat       static_float;
 | |
|  *   GString     *dynamic_gstring;
 | |
|  * } TypeBClass;
 | |
|  * static void
 | |
|  * type_b_base_class_init (TypeBClass *class)
 | |
|  * {
 | |
|  *   class->dynamic_gstring = g_string_new ("some other string");
 | |
|  * }
 | |
|  * static void
 | |
|  * type_b_base_class_finalize (TypeBClass *class)
 | |
|  * {
 | |
|  *   g_string_free (class->dynamic_gstring);
 | |
|  * }
 | |
|  * static void
 | |
|  * type_b_class_init (TypeBClass *class)
 | |
|  * {
 | |
|  *   class->static_float = 3.14159265358979323846;
 | |
|  * }
 | |
|  * ]|
 | |
|  * Initialization of TypeBClass will first cause initialization of
 | |
|  * TypeAClass (derived classes reference their parent classes, see
 | |
|  * g_type_class_ref() on this).
 | |
|  *
 | |
|  * Initialization of TypeAClass roughly involves zero-initializing its fields,
 | |
|  * then calling its GBaseInitFunc() type_a_base_class_init() to allocate
 | |
|  * its dynamic members (dynamic_string), and finally calling its GClassInitFunc()
 | |
|  * type_a_class_init() to initialize its static members (static_integer).
 | |
|  * The first step in the initialization process of TypeBClass is then
 | |
|  * a plain memory copy of the contents of TypeAClass into TypeBClass and 
 | |
|  * zero-initialization of the remaining fields in TypeBClass.
 | |
|  * The dynamic members of TypeAClass within TypeBClass now need
 | |
|  * reinitialization which is performed by calling type_a_base_class_init()
 | |
|  * with an argument of TypeBClass.
 | |
|  *
 | |
|  * After that, the GBaseInitFunc() of TypeBClass, type_b_base_class_init()
 | |
|  * is called to allocate the dynamic members of TypeBClass (dynamic_gstring),
 | |
|  * and finally the GClassInitFunc() of TypeBClass, type_b_class_init(),
 | |
|  * is called to complete the initialization process with the static members
 | |
|  * (static_float).
 | |
|  *
 | |
|  * Corresponding finalization counter parts to the GBaseInitFunc() functions
 | |
|  * have to be provided to release allocated resources at class finalization
 | |
|  * time.
 | |
|  */
 | |
| typedef void   (*GClassInitFunc)             (gpointer         g_class,
 | |
| 					      gpointer         class_data);
 | |
| /**
 | |
|  * GClassFinalizeFunc:
 | |
|  * @g_class: (type GObject.TypeClass): The #GTypeClass structure to finalize
 | |
|  * @class_data: The @class_data member supplied via the #GTypeInfo structure
 | |
|  * 
 | |
|  * A callback function used by the type system to finalize a class.
 | |
|  * This function is rarely needed, as dynamically allocated class resources
 | |
|  * should be handled by GBaseInitFunc() and GBaseFinalizeFunc().
 | |
|  * Also, specification of a GClassFinalizeFunc() in the #GTypeInfo
 | |
|  * structure of a static type is invalid, because classes of static types
 | |
|  * will never be finalized (they are artificially kept alive when their
 | |
|  * reference count drops to zero).
 | |
|  */
 | |
| typedef void   (*GClassFinalizeFunc)         (gpointer         g_class,
 | |
| 					      gpointer         class_data);
 | |
| /**
 | |
|  * GInstanceInitFunc:
 | |
|  * @instance: The instance to initialize
 | |
|  * @g_class: (type GObject.TypeClass): The class of the type the instance is
 | |
|  *    created for
 | |
|  * 
 | |
|  * A callback function used by the type system to initialize a new
 | |
|  * instance of a type. This function initializes all instance members and
 | |
|  * allocates any resources required by it.
 | |
|  *
 | |
|  * Initialization of a derived instance involves calling all its parent
 | |
|  * types instance initializers, so the class member of the instance
 | |
|  * is altered during its initialization to always point to the class that
 | |
|  * belongs to the type the current initializer was introduced for.
 | |
|  *
 | |
|  * The extended members of @instance are guaranteed to have been filled with
 | |
|  * zeros before this function is called.
 | |
|  */
 | |
| typedef void   (*GInstanceInitFunc)          (GTypeInstance   *instance,
 | |
| 					      gpointer         g_class);
 | |
| /**
 | |
|  * GInterfaceInitFunc:
 | |
|  * @g_iface: (type GObject.TypeInterface): The interface structure to initialize
 | |
|  * @iface_data: The @interface_data supplied via the #GInterfaceInfo structure
 | |
|  * 
 | |
|  * A callback function used by the type system to initialize a new
 | |
|  * interface.  This function should initialize all internal data and
 | |
|  * allocate any resources required by the interface.
 | |
|  *
 | |
|  * The members of @iface_data are guaranteed to have been filled with
 | |
|  * zeros before this function is called.
 | |
|  */
 | |
| typedef void   (*GInterfaceInitFunc)         (gpointer         g_iface,
 | |
| 					      gpointer         iface_data);
 | |
| /**
 | |
|  * GInterfaceFinalizeFunc:
 | |
|  * @g_iface: (type GObject.TypeInterface): The interface structure to finalize
 | |
|  * @iface_data: The @interface_data supplied via the #GInterfaceInfo structure
 | |
|  * 
 | |
|  * A callback function used by the type system to finalize an interface.
 | |
|  * This function should destroy any internal data and release any resources
 | |
|  * allocated by the corresponding GInterfaceInitFunc() function.
 | |
|  */
 | |
| typedef void   (*GInterfaceFinalizeFunc)     (gpointer         g_iface,
 | |
| 					      gpointer         iface_data);
 | |
| /**
 | |
|  * GTypeClassCacheFunc:
 | |
|  * @cache_data: data that was given to the g_type_add_class_cache_func() call
 | |
|  * @g_class: (type GObject.TypeClass): The #GTypeClass structure which is
 | |
|  *    unreferenced
 | |
|  * 
 | |
|  * A callback function which is called when the reference count of a class 
 | |
|  * drops to zero. It may use g_type_class_ref() to prevent the class from
 | |
|  * being freed. You should not call g_type_class_unref() from a 
 | |
|  * #GTypeClassCacheFunc function to prevent infinite recursion, use 
 | |
|  * g_type_class_unref_uncached() instead.
 | |
|  * 
 | |
|  * The functions have to check the class id passed in to figure 
 | |
|  * whether they actually want to cache the class of this type, since all
 | |
|  * classes are routed through the same #GTypeClassCacheFunc chain.
 | |
|  * 
 | |
|  * Returns: %TRUE to stop further #GTypeClassCacheFuncs from being 
 | |
|  *  called, %FALSE to continue
 | |
|  */
 | |
| typedef gboolean (*GTypeClassCacheFunc)	     (gpointer	       cache_data,
 | |
| 					      GTypeClass      *g_class);
 | |
| /**
 | |
|  * GTypeInterfaceCheckFunc:
 | |
|  * @check_data: data passed to g_type_add_interface_check()
 | |
|  * @g_iface: (type GObject.TypeInterface): the interface that has been
 | |
|  *    initialized
 | |
|  * 
 | |
|  * A callback called after an interface vtable is initialized.
 | |
|  * See g_type_add_interface_check().
 | |
|  * 
 | |
|  * Since: 2.4
 | |
|  */
 | |
| typedef void     (*GTypeInterfaceCheckFunc)  (gpointer	       check_data,
 | |
| 					      gpointer         g_iface);
 | |
| /**
 | |
|  * GTypeFundamentalFlags:
 | |
|  * @G_TYPE_FLAG_CLASSED: Indicates a classed type
 | |
|  * @G_TYPE_FLAG_INSTANTIATABLE: Indicates an instantiable type (implies classed)
 | |
|  * @G_TYPE_FLAG_DERIVABLE: Indicates a flat derivable type
 | |
|  * @G_TYPE_FLAG_DEEP_DERIVABLE: Indicates a deep derivable type (implies derivable)
 | |
|  * 
 | |
|  * Bit masks used to check or determine specific characteristics of a
 | |
|  * fundamental type.
 | |
|  */
 | |
| typedef enum    /*< skip >*/
 | |
| {
 | |
|   G_TYPE_FLAG_CLASSED           = (1 << 0),
 | |
|   G_TYPE_FLAG_INSTANTIATABLE    = (1 << 1),
 | |
|   G_TYPE_FLAG_DERIVABLE         = (1 << 2),
 | |
|   G_TYPE_FLAG_DEEP_DERIVABLE    = (1 << 3)
 | |
| } GTypeFundamentalFlags;
 | |
| /**
 | |
|  * GTypeFlags:
 | |
|  * @G_TYPE_FLAG_ABSTRACT: Indicates an abstract type. No instances can be
 | |
|  *  created for an abstract type
 | |
|  * @G_TYPE_FLAG_VALUE_ABSTRACT: Indicates an abstract value type, i.e. a type
 | |
|  *  that introduces a value table, but can't be used for
 | |
|  *  g_value_init()
 | |
|  * 
 | |
|  * Bit masks used to check or determine characteristics of a type.
 | |
|  */
 | |
| typedef enum    /*< skip >*/
 | |
| {
 | |
|   G_TYPE_FLAG_ABSTRACT		= (1 << 4),
 | |
|   G_TYPE_FLAG_VALUE_ABSTRACT	= (1 << 5)
 | |
| } GTypeFlags;
 | |
| /**
 | |
|  * GTypeInfo:
 | |
|  * @class_size: Size of the class structure (required for interface, classed and instantiatable types)
 | |
|  * @base_init: Location of the base initialization function (optional)
 | |
|  * @base_finalize: Location of the base finalization function (optional)
 | |
|  * @class_init: Location of the class initialization function for
 | |
|  *  classed and instantiatable types. Location of the default vtable 
 | |
|  *  inititalization function for interface types. (optional) This function 
 | |
|  *  is used both to fill in virtual functions in the class or default vtable, 
 | |
|  *  and to do type-specific setup such as registering signals and object
 | |
|  *  properties.
 | |
|  * @class_finalize: Location of the class finalization function for
 | |
|  *  classed and instantiatable types. Location of the default vtable
 | |
|  *  finalization function for interface types. (optional)
 | |
|  * @class_data: User-supplied data passed to the class init/finalize functions
 | |
|  * @instance_size: Size of the instance (object) structure (required for instantiatable types only)
 | |
|  * @n_preallocs: Prior to GLib 2.10, it specified the number of pre-allocated (cached) instances to reserve memory for (0 indicates no caching). Since GLib 2.10, it is ignored, since instances are allocated with the [slice allocator][glib-Memory-Slices] now.
 | |
|  * @instance_init: Location of the instance initialization function (optional, for instantiatable types only)
 | |
|  * @value_table: A #GTypeValueTable function table for generic handling of GValues
 | |
|  *  of this type (usually only useful for fundamental types)
 | |
|  * 
 | |
|  * This structure is used to provide the type system with the information
 | |
|  * required to initialize and destruct (finalize) a type's class and
 | |
|  * its instances.
 | |
|  *
 | |
|  * The initialized structure is passed to the g_type_register_static() function
 | |
|  * (or is copied into the provided #GTypeInfo structure in the
 | |
|  * g_type_plugin_complete_type_info()). The type system will perform a deep
 | |
|  * copy of this structure, so its memory does not need to be persistent
 | |
|  * across invocation of g_type_register_static().
 | |
|  */
 | |
| struct _GTypeInfo
 | |
| {
 | |
|   /* interface types, classed types, instantiated types */
 | |
|   guint16                class_size;
 | |
|   
 | |
|   GBaseInitFunc          base_init;
 | |
|   GBaseFinalizeFunc      base_finalize;
 | |
|   
 | |
|   /* interface types, classed types, instantiated types */
 | |
|   GClassInitFunc         class_init;
 | |
|   GClassFinalizeFunc     class_finalize;
 | |
|   gconstpointer          class_data;
 | |
|   
 | |
|   /* instantiated types */
 | |
|   guint16                instance_size;
 | |
|   guint16                n_preallocs;
 | |
|   GInstanceInitFunc      instance_init;
 | |
|   
 | |
|   /* value handling */
 | |
|   const GTypeValueTable	*value_table;
 | |
| };
 | |
| /**
 | |
|  * GTypeFundamentalInfo:
 | |
|  * @type_flags: #GTypeFundamentalFlags describing the characteristics of the fundamental type
 | |
|  * 
 | |
|  * A structure that provides information to the type system which is
 | |
|  * used specifically for managing fundamental types.  
 | |
|  */
 | |
| struct _GTypeFundamentalInfo
 | |
| {
 | |
|   GTypeFundamentalFlags  type_flags;
 | |
| };
 | |
| /**
 | |
|  * GInterfaceInfo:
 | |
|  * @interface_init: location of the interface initialization function
 | |
|  * @interface_finalize: location of the interface finalization function
 | |
|  * @interface_data: user-supplied data passed to the interface init/finalize functions
 | |
|  * 
 | |
|  * A structure that provides information to the type system which is
 | |
|  * used specifically for managing interface types.
 | |
|  */
 | |
| struct _GInterfaceInfo
 | |
| {
 | |
|   GInterfaceInitFunc     interface_init;
 | |
|   GInterfaceFinalizeFunc interface_finalize;
 | |
|   gpointer               interface_data;
 | |
| };
 | |
| /**
 | |
|  * GTypeValueTable:
 | |
|  * @value_init: Default initialize @values contents by poking values
 | |
|  *  directly into the value->data array. The data array of
 | |
|  *  the #GValue passed into this function was zero-filled
 | |
|  *  with `memset()`, so no care has to be taken to free any
 | |
|  *  old contents. E.g. for the implementation of a string
 | |
|  *  value that may never be %NULL, the implementation might
 | |
|  *  look like:
 | |
|  *  |[<!-- language="C" -->
 | |
|  *  value->data[0].v_pointer = g_strdup ("");
 | |
|  *  ]|
 | |
|  * @value_free: Free any old contents that might be left in the
 | |
|  *  data array of the passed in @value. No resources may
 | |
|  *  remain allocated through the #GValue contents after
 | |
|  *  this function returns. E.g. for our above string type:
 | |
|  *  |[<!-- language="C" -->
 | |
|  *  // only free strings without a specific flag for static storage
 | |
|  *  if (!(value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS))
 | |
|  *    g_free (value->data[0].v_pointer);
 | |
|  *  ]|
 | |
|  * @value_copy: @dest_value is a #GValue with zero-filled data section
 | |
|  *  and @src_value is a properly setup #GValue of same or
 | |
|  *  derived type.
 | |
|  *  The purpose of this function is to copy the contents of
 | |
|  *  @src_value into @dest_value in a way, that even after
 | |
|  *  @src_value has been freed, the contents of @dest_value
 | |
|  *  remain valid. String type example:
 | |
|  *  |[<!-- language="C" -->
 | |
|  *  dest_value->data[0].v_pointer = g_strdup (src_value->data[0].v_pointer);
 | |
|  *  ]|
 | |
|  * @value_peek_pointer: If the value contents fit into a pointer, such as objects
 | |
|  *  or strings, return this pointer, so the caller can peek at
 | |
|  *  the current contents. To extend on our above string example:
 | |
|  *  |[<!-- language="C" -->
 | |
|  *  return value->data[0].v_pointer;
 | |
|  *  ]|
 | |
|  * @collect_format: A string format describing how to collect the contents of
 | |
|  *  this value bit-by-bit. Each character in the format represents
 | |
|  *  an argument to be collected, and the characters themselves indicate
 | |
|  *  the type of the argument. Currently supported arguments are:
 | |
|  *  - 'i' - Integers. passed as collect_values[].v_int.
 | |
|  *  - 'l' - Longs. passed as collect_values[].v_long.
 | |
|  *  - 'd' - Doubles. passed as collect_values[].v_double.
 | |
|  *  - 'p' - Pointers. passed as collect_values[].v_pointer.
 | |
|  *  It should be noted that for variable argument list construction,
 | |
|  *  ANSI C promotes every type smaller than an integer to an int, and
 | |
|  *  floats to doubles. So for collection of short int or char, 'i'
 | |
|  *  needs to be used, and for collection of floats 'd'.
 | |
|  * @collect_value: The collect_value() function is responsible for converting the
 | |
|  *  values collected from a variable argument list into contents
 | |
|  *  suitable for storage in a GValue. This function should setup
 | |
|  *  @value similar to value_init(); e.g. for a string value that
 | |
|  *  does not allow %NULL pointers, it needs to either spew an error,
 | |
|  *  or do an implicit conversion by storing an empty string.
 | |
|  *  The @value passed in to this function has a zero-filled data
 | |
|  *  array, so just like for value_init() it is guaranteed to not
 | |
|  *  contain any old contents that might need freeing.
 | |
|  *  @n_collect_values is exactly the string length of @collect_format,
 | |
|  *  and @collect_values is an array of unions #GTypeCValue with
 | |
|  *  length @n_collect_values, containing the collected values
 | |
|  *  according to @collect_format.
 | |
|  *  @collect_flags is an argument provided as a hint by the caller.
 | |
|  *  It may contain the flag %G_VALUE_NOCOPY_CONTENTS indicating,
 | |
|  *  that the collected value contents may be considered "static"
 | |
|  *  for the duration of the @value lifetime.
 | |
|  *  Thus an extra copy of the contents stored in @collect_values is
 | |
|  *  not required for assignment to @value.
 | |
|  *  For our above string example, we continue with:
 | |
|  *  |[<!-- language="C" -->
 | |
|  *  if (!collect_values[0].v_pointer)
 | |
|  *    value->data[0].v_pointer = g_strdup ("");
 | |
|  *  else if (collect_flags & G_VALUE_NOCOPY_CONTENTS)
 | |
|  *  {
 | |
|  *    value->data[0].v_pointer = collect_values[0].v_pointer;
 | |
|  *    // keep a flag for the value_free() implementation to not free this string
 | |
|  *    value->data[1].v_uint = G_VALUE_NOCOPY_CONTENTS;
 | |
|  *  }
 | |
|  *  else
 | |
|  *    value->data[0].v_pointer = g_strdup (collect_values[0].v_pointer);
 | |
|  *  return NULL;
 | |
|  *  ]|
 | |
|  *  It should be noted, that it is generally a bad idea to follow the
 | |
|  *  #G_VALUE_NOCOPY_CONTENTS hint for reference counted types. Due to
 | |
|  *  reentrancy requirements and reference count assertions performed
 | |
|  *  by the signal emission code, reference counts should always be
 | |
|  *  incremented for reference counted contents stored in the value->data
 | |
|  *  array.  To deviate from our string example for a moment, and taking
 | |
|  *  a look at an exemplary implementation for collect_value() of
 | |
|  *  #GObject:
 | |
|  *  |[<!-- language="C" -->
 | |
|  *  if (collect_values[0].v_pointer)
 | |
|  *  {
 | |
|  *    GObject *object = G_OBJECT (collect_values[0].v_pointer);
 | |
|  *    // never honour G_VALUE_NOCOPY_CONTENTS for ref-counted types
 | |
|  *    value->data[0].v_pointer = g_object_ref (object);
 | |
|  *    return NULL;
 | |
|  *  }
 | |
|  *  else
 | |
|  *    return g_strdup_printf ("Object passed as invalid NULL pointer");
 | |
|  *  }
 | |
|  *  ]|
 | |
|  *  The reference count for valid objects is always incremented,
 | |
|  *  regardless of @collect_flags. For invalid objects, the example
 | |
|  *  returns a newly allocated string without altering @value.
 | |
|  *  Upon success, collect_value() needs to return %NULL. If, however,
 | |
|  *  an error condition occurred, collect_value() may spew an
 | |
|  *  error by returning a newly allocated non-%NULL string, giving
 | |
|  *  a suitable description of the error condition.
 | |
|  *  The calling code makes no assumptions about the @value
 | |
|  *  contents being valid upon error returns, @value
 | |
|  *  is simply thrown away without further freeing. As such, it is
 | |
|  *  a good idea to not allocate #GValue contents, prior to returning
 | |
|  *  an error, however, collect_values() is not obliged to return
 | |
|  *  a correctly setup @value for error returns, simply because
 | |
|  *  any non-%NULL return is considered a fatal condition so further
 | |
|  *  program behaviour is undefined.
 | |
|  * @lcopy_format: Format description of the arguments to collect for @lcopy_value,
 | |
|  *  analogous to @collect_format. Usually, @lcopy_format string consists
 | |
|  *  only of 'p's to provide lcopy_value() with pointers to storage locations.
 | |
|  * @lcopy_value: This function is responsible for storing the @value contents into
 | |
|  *  arguments passed through a variable argument list which got
 | |
|  *  collected into @collect_values according to @lcopy_format.
 | |
|  *  @n_collect_values equals the string length of @lcopy_format,
 | |
|  *  and @collect_flags may contain %G_VALUE_NOCOPY_CONTENTS.
 | |
|  *  In contrast to collect_value(), lcopy_value() is obliged to
 | |
|  *  always properly support %G_VALUE_NOCOPY_CONTENTS.
 | |
|  *  Similar to collect_value() the function may prematurely abort
 | |
|  *  by returning a newly allocated string describing an error condition.
 | |
|  *  To complete the string example:
 | |
|  *  |[<!-- language="C" -->
 | |
|  *  gchar **string_p = collect_values[0].v_pointer;
 | |
|  *  if (!string_p)
 | |
|  *    return g_strdup_printf ("string location passed as NULL");
 | |
|  *  if (collect_flags & G_VALUE_NOCOPY_CONTENTS)
 | |
|  *    *string_p = value->data[0].v_pointer;
 | |
|  *  else
 | |
|  *    *string_p = g_strdup (value->data[0].v_pointer);
 | |
|  *  ]|
 | |
|  *  And an illustrative version of lcopy_value() for
 | |
|  *  reference-counted types:
 | |
|  *  |[<!-- language="C" -->
 | |
|  *  GObject **object_p = collect_values[0].v_pointer;
 | |
|  *  if (!object_p)
 | |
|  *    return g_strdup_printf ("object location passed as NULL");
 | |
|  *  if (!value->data[0].v_pointer)
 | |
|  *    *object_p = NULL;
 | |
|  *  else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) // always honour
 | |
|  *    *object_p = value->data[0].v_pointer;
 | |
|  *  else
 | |
|  *    *object_p = g_object_ref (value->data[0].v_pointer);
 | |
|  *  return NULL;
 | |
|  *  ]|
 | |
|  * 
 | |
|  * The #GTypeValueTable provides the functions required by the #GValue
 | |
|  * implementation, to serve as a container for values of a type.
 | |
|  */
 | |
| 
 | |
| struct _GTypeValueTable
 | |
| {
 | |
|   void     (*value_init)         (GValue       *value);
 | |
|   void     (*value_free)         (GValue       *value);
 | |
|   void     (*value_copy)         (const GValue *src_value,
 | |
| 				  GValue       *dest_value);
 | |
|   /* varargs functionality (optional) */
 | |
|   gpointer (*value_peek_pointer) (const GValue *value);
 | |
|   const gchar *collect_format;
 | |
|   gchar*   (*collect_value)      (GValue       *value,
 | |
| 				  guint         n_collect_values,
 | |
| 				  GTypeCValue  *collect_values,
 | |
| 				  guint		collect_flags);
 | |
|   const gchar *lcopy_format;
 | |
|   gchar*   (*lcopy_value)        (const GValue *value,
 | |
| 				  guint         n_collect_values,
 | |
| 				  GTypeCValue  *collect_values,
 | |
| 				  guint		collect_flags);
 | |
| };
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType g_type_register_static		(GType			     parent_type,
 | |
| 					 const gchar		    *type_name,
 | |
| 					 const GTypeInfo	    *info,
 | |
| 					 GTypeFlags		     flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType lg_type_register_static_simple     (GType                       parent_type,
 | |
| 					 const gchar                *type_name,
 | |
| 					 guint                       class_size,
 | |
| 					 GClassInitFunc              class_init,
 | |
| 					 guint                       instance_size,
 | |
| 					 GInstanceInitFunc           instance_init,
 | |
| 					 GTypeFlags	             flags);
 | |
|   
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType g_type_register_dynamic		(GType			     parent_type,
 | |
| 					 const gchar		    *type_name,
 | |
| 					 GTypePlugin		    *plugin,
 | |
| 					 GTypeFlags		     flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType g_type_register_fundamental	(GType			     type_id,
 | |
| 					 const gchar		    *type_name,
 | |
| 					 const GTypeInfo	    *info,
 | |
| 					 const GTypeFundamentalInfo *finfo,
 | |
| 					 GTypeFlags		     flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void  lg_type_add_interface_static	(GType			     instance_type,
 | |
| 					 GType			     interface_type,
 | |
| 					 const GInterfaceInfo	    *info);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void  g_type_add_interface_dynamic	(GType			     instance_type,
 | |
| 					 GType			     interface_type,
 | |
| 					 GTypePlugin		    *plugin);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void  g_type_interface_add_prerequisite (GType			     interface_type,
 | |
| 					 GType			     prerequisite_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType*g_type_interface_prerequisites    (GType                       interface_type,
 | |
| 					 guint                      *n_prerequisites);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_type_class_add_private       (gpointer                    g_class,
 | |
|                                          gsize                       private_size);
 | |
| GLIB_AVAILABLE_IN_2_38
 | |
| gint     g_type_add_instance_private    (GType                       class_type,
 | |
|                                          gsize                       private_size);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_type_instance_get_private    (GTypeInstance              *instance,
 | |
|                                          GType                       private_type);
 | |
| GLIB_AVAILABLE_IN_2_38
 | |
| void     g_type_class_adjust_private_offset (gpointer                g_class,
 | |
|                                              gint                   *private_size_or_offset);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void      g_type_add_class_private      (GType    		     class_type,
 | |
| 					 gsize    		     private_size);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer  g_type_class_get_private      (GTypeClass 		    *klass,
 | |
| 					 GType			     private_type);
 | |
| GLIB_AVAILABLE_IN_2_38
 | |
| gint      g_type_class_get_instance_private_offset (gpointer         g_class);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_34
 | |
| void      g_type_ensure                 (GType                       type);
 | |
| GLIB_AVAILABLE_IN_2_36
 | |
| guint     g_type_get_type_registration_serial (void);
 | |
| 
 | |
| 
 | |
| /* --- GType boilerplate --- */
 | |
| /**
 | |
|  * lG_DECLARE_FINAL_TYPE:
 | |
|  * @ModuleObjName: The name of the new type, in camel case (like GtkWidget)
 | |
|  * @module_obj_name: The name of the new type in lowercase, with words
 | |
|  *  separated by '_' (like 'gtk_widget')
 | |
|  * @MODULE: The name of the module, in all caps (like 'GTK')
 | |
|  * @OBJ_NAME: The bare name of the type, in all caps (like 'WIDGET')
 | |
|  * @ParentName: the name of the parent type, in camel case (like GtkWidget)
 | |
|  *
 | |
|  * A convenience macro for emitting the usual declarations in the header file for a type which is not (at the
 | |
|  * present time) intended to be subclassed.
 | |
|  *
 | |
|  * You might use it in a header as follows:
 | |
|  *
 | |
|  * |[
 | |
|  * #ifndef _myapp_window_h_
 | |
|  * #define _myapp_window_h_
 | |
|  *
 | |
|  * #include <gtk/gtk.h>
 | |
|  *
 | |
|  * #define MY_APP_TYPE_WINDOW my_app_window_get_type ()
 | |
|  * lG_DECLARE_FINAL_TYPE (MyAppWindow, my_app_window, MY_APP, WINDOW, GtkWindow)
 | |
|  *
 | |
|  * MyAppWindow *    my_app_window_new    (void);
 | |
|  *
 | |
|  * ...
 | |
|  *
 | |
|  * #endif
 | |
|  * ]|
 | |
|  *
 | |
|  * This results in the following things happening:
 | |
|  *
 | |
|  * - the usual my_app_window_get_type() function is declared with a return type of #GType
 | |
|  *
 | |
|  * - the MyAppWindow types is defined as a typedef of struct _MyAppWindow.  The struct itself is not
 | |
|  *   defined and should be defined from the .c file before G_DEFINE_TYPE() is used.
 | |
|  *
 | |
|  * - the MY_APP_WINDOW() cast is emitted as static inline function along with the MY_APP_IS_WINDOW() type
 | |
|  *   checking function
 | |
|  *
 | |
|  * - the MyAppWindowClass type is defined as a struct containing GtkWindowClass.  This is done for the
 | |
|  *   convenience of the person defining the type and should not be considered to be part of the ABI.  In
 | |
|  *   particular, without a firm declaration of the instance structure, it is not possible to subclass the type
 | |
|  *   and therefore the fact that the size of the class structure is exposed is not a concern and it can be
 | |
|  *   freely changed at any point in the future.
 | |
|  *
 | |
|  * - g_autoptr() support being added for your type, based on the type of your parent class
 | |
|  *
 | |
|  * You can only use this function if your parent type also supports g_autoptr().
 | |
|  *
 | |
|  * Because the type macro (MY_APP_TYPE_WINDOW in the above example) is not a callable, you must continue to
 | |
|  * manually define this as a macro for yourself.
 | |
|  *
 | |
|  * The declaration of the _get_type() function is the first thing emitted by the macro.  This allows this macro
 | |
|  * to be used in the usual way with export control and API versioning macros.
 | |
|  *
 | |
|  * If you want to declare your own class structure, use G_DECLARE_DERIVABLE_TYPE().
 | |
|  *
 | |
|  * If you are writing a library, it is important to note that it is possible to convert a type from using
 | |
|  * lG_DECLARE_FINAL_TYPE() to G_DECLARE_DERIVABLE_TYPE() without breaking API or ABI.  As a precaution, you
 | |
|  * should therefore use lG_DECLARE_FINAL_TYPE() until you are sure that it makes sense for your class to be
 | |
|  * subclassed.  Once a class structure has been exposed it is not possible to change its size or remove or
 | |
|  * reorder items without breaking the API and/or ABI.
 | |
|  *
 | |
|  * Since: 2.44
 | |
|  **/
 | |
| #define lG_DECLARE_FINAL_TYPE(ModuleObjName, module_obj_name, MODULE, OBJ_NAME, ParentName) \
 | |
|   GType module_obj_name##_get_type (void);                                                               \
 | |
|   lG_GNUC_BEGIN_IGNORE_DEPRECATIONS                                                                       \
 | |
|   typedef struct _##ModuleObjName ModuleObjName;                                                         \
 | |
|   typedef struct { ParentName##Class parent_class; } ModuleObjName##Class;                               \
 | |
|                                                                                                          \
 | |
|   l_GLIB_DEFINE_AUTOPTR_CHAINUP (ModuleObjName, ParentName)                                               \
 | |
|                                                                                                          \
 | |
|   static inline ModuleObjName * MODULE##_##OBJ_NAME (gpointer ptr) {                                     \
 | |
|     return lG_TYPE_CHECK_INSTANCE_CAST (ptr, module_obj_name##_get_type (), ModuleObjName); }             \
 | |
|   static inline gboolean MODULE##_IS_##OBJ_NAME (gpointer ptr) {                                         \
 | |
|     return lG_TYPE_CHECK_INSTANCE_TYPE (ptr, module_obj_name##_get_type ()); }                            \
 | |
|   lG_GNUC_END_IGNORE_DEPRECATIONS
 | |
| 
 | |
| /**
 | |
|  * G_DECLARE_DERIVABLE_TYPE:
 | |
|  * @ModuleObjName: The name of the new type, in camel case (like GtkWidget)
 | |
|  * @module_obj_name: The name of the new type in lowercase, with words
 | |
|  *  separated by '_' (like 'gtk_widget')
 | |
|  * @MODULE: The name of the module, in all caps (like 'GTK')
 | |
|  * @OBJ_NAME: The bare name of the type, in all caps (like 'WIDGET')
 | |
|  * @ParentName: the name of the parent type, in camel case (like GtkWidget)
 | |
|  *
 | |
|  * A convenience macro for emitting the usual declarations in the header file for a type which will is intended
 | |
|  * to be subclassed.
 | |
|  *
 | |
|  * You might use it in a header as follows:
 | |
|  *
 | |
|  * |[
 | |
|  * #ifndef _gtk_frobber_h_
 | |
|  * #define _gtk_frobber_h_
 | |
|  *
 | |
|  * #define GTK_TYPE_FROBBER gtk_frobber_get_type ()
 | |
|  * GDK_AVAILABLE_IN_3_12
 | |
|  * G_DECLARE_DERIVABLE_TYPE (GtkFrobber, gtk_frobber, GTK, FROBBER, GtkWidget)
 | |
|  *
 | |
|  * struct _GtkFrobberClass
 | |
|  * {
 | |
|  *   GtkWidgetClass parent_class;
 | |
|  *
 | |
|  *   void (* handle_frob)  (GtkFrobber *frobber,
 | |
|  *                          guint       n_frobs);
 | |
|  *
 | |
|  *   gpointer padding[12];
 | |
|  * };
 | |
|  *
 | |
|  * GtkWidget *    gtk_frobber_new   (void);
 | |
|  *
 | |
|  * ...
 | |
|  *
 | |
|  * #endif
 | |
|  * ]|
 | |
|  *
 | |
|  * This results in the following things happening:
 | |
|  *
 | |
|  * - the usual gtk_frobber_get_type() function is declared with a return type of #GType
 | |
|  *
 | |
|  * - the GtkFrobber struct is created with GtkWidget as the first and only item.  You are expected to use
 | |
|  *   a private structure from your .c file to store your instance variables.
 | |
|  *
 | |
|  * - the GtkFrobberClass type is defined as a typedef to struct _GtkFrobberClass, which is left undefined.
 | |
|  *   You should do this from the header file directly after you use the macro.
 | |
|  *
 | |
|  * - the GTK_FROBBER() and GTK_FROBBER_CLASS() casts are emitted as static inline functions along with
 | |
|  *   the GTK_IS_FROBBER() and GTK_IS_FROBBER_CLASS() type checking functions and GTK_FROBBER_GET_CLASS()
 | |
|  *   function.
 | |
|  *
 | |
|  * - g_autoptr() support being added for your type, based on the type of your parent class
 | |
|  *
 | |
|  * You can only use this function if your parent type also supports g_autoptr().
 | |
|  *
 | |
|  * Because the type macro (GTK_TYPE_FROBBER in the above example) is not a callable, you must continue to
 | |
|  * manually define this as a macro for yourself.
 | |
|  *
 | |
|  * The declaration of the _get_type() function is the first thing emitted by the macro.  This allows this macro
 | |
|  * to be used in the usual way with export control and API versioning macros.
 | |
|  *
 | |
|  * If you are writing a library, it is important to note that it is possible to convert a type from using
 | |
|  * lG_DECLARE_FINAL_TYPE() to G_DECLARE_DERIVABLE_TYPE() without breaking API or ABI.  As a precaution, you
 | |
|  * should therefore use lG_DECLARE_FINAL_TYPE() until you are sure that it makes sense for your class to be
 | |
|  * subclassed.  Once a class structure has been exposed it is not possible to change its size or remove or
 | |
|  * reorder items without breaking the API and/or ABI.  If you want to declare your own class structure, use
 | |
|  * G_DECLARE_DERIVABLE_TYPE().  If you want to declare a class without exposing the class or instance
 | |
|  * structures, use lG_DECLARE_FINAL_TYPE().
 | |
|  *
 | |
|  * If you must use G_DECLARE_DERIVABLE_TYPE() you should be sure to include some padding at the bottom of your
 | |
|  * class structure to leave space for the addition of future virtual functions.
 | |
|  *
 | |
|  * Since: 2.44
 | |
|  **/
 | |
| #define G_DECLARE_DERIVABLE_TYPE(ModuleObjName, module_obj_name, MODULE, OBJ_NAME, ParentName) \
 | |
|   GType module_obj_name##_get_type (void);                                                               \
 | |
|   lG_GNUC_BEGIN_IGNORE_DEPRECATIONS                                                                       \
 | |
|   typedef struct _##ModuleObjName ModuleObjName;                                                         \
 | |
|   typedef struct _##ModuleObjName##Class ModuleObjName##Class;                                           \
 | |
|   struct _##ModuleObjName { ParentName parent_instance; };                                               \
 | |
|                                                                                                          \
 | |
|   l_GLIB_DEFINE_AUTOPTR_CHAINUP (ModuleObjName, ParentName)                                               \
 | |
|                                                                                                          \
 | |
|   static inline ModuleObjName * MODULE##_##OBJ_NAME (gpointer ptr) {                                     \
 | |
|     return lG_TYPE_CHECK_INSTANCE_CAST (ptr, module_obj_name##_get_type (), ModuleObjName); }             \
 | |
|   static inline ModuleObjName##Class * MODULE##_##OBJ_NAME##_CLASS (gpointer ptr) {                      \
 | |
|     return G_TYPE_CHECK_CLASS_CAST (ptr, module_obj_name##_get_type (), ModuleObjName##Class); }         \
 | |
|   static inline gboolean MODULE##_IS_##OBJ_NAME (gpointer ptr) {                                         \
 | |
|     return lG_TYPE_CHECK_INSTANCE_TYPE (ptr, module_obj_name##_get_type ()); }                            \
 | |
|   static inline gboolean MODULE##_IS_##OBJ_NAME##_CLASS (gpointer ptr) {                                 \
 | |
|     return G_TYPE_CHECK_CLASS_TYPE (ptr, module_obj_name##_get_type ()); }                               \
 | |
|   static inline ModuleObjName##Class * MODULE##_##OBJ_NAME##_GET_CLASS (gpointer ptr) {                  \
 | |
|     return G_TYPE_INSTANCE_GET_CLASS (ptr, module_obj_name##_get_type (), ModuleObjName##Class); }       \
 | |
|   lG_GNUC_END_IGNORE_DEPRECATIONS
 | |
| 
 | |
| /**
 | |
|  * G_DECLARE_INTERFACE:
 | |
|  * @ModuleObjName: The name of the new type, in camel case (like GtkWidget)
 | |
|  * @module_obj_name: The name of the new type in lowercase, with words
 | |
|  *  separated by '_' (like 'gtk_widget')
 | |
|  * @MODULE: The name of the module, in all caps (like 'GTK')
 | |
|  * @OBJ_NAME: The bare name of the type, in all caps (like 'WIDGET')
 | |
|  * @PrerequisiteName: the name of the prerequisite type, in camel case (like GtkWidget)
 | |
|  *
 | |
|  * A convenience macro for emitting the usual declarations in the header file for a GInterface type.
 | |
|  *
 | |
|  * You might use it in a header as follows:
 | |
|  *
 | |
|  * |[
 | |
|  * #ifndef _my_model_h_
 | |
|  * #define _my_model_h_
 | |
|  *
 | |
|  * #define MY_TYPE_MODEL my_model_get_type ()
 | |
|  * GDK_AVAILABLE_IN_3_12
 | |
|  * G_DECLARE_INTERFACE (MyModel, my_model, MY, MODEL, GObject)
 | |
|  *
 | |
|  * struct _MyModelInterface
 | |
|  * {
 | |
|  *   GTypeInterface g_iface;
 | |
|  *
 | |
|  *   gpointer (* get_item)  (MyModel *model);
 | |
|  * };
 | |
|  *
 | |
|  * gpointer my_model_get_item (MyModel *model);
 | |
|  *
 | |
|  * ...
 | |
|  *
 | |
|  * #endif
 | |
|  * ]|
 | |
|  *
 | |
|  * This results in the following things happening:
 | |
|  *
 | |
|  * - the usual my_model_get_type() function is declared with a return type of #GType
 | |
|  *
 | |
|  * - the MyModelInterface type is defined as a typedef to struct _MyModelInterface,
 | |
|  *   which is left undefined. You should do this from the header file directly after
 | |
|  *   you use the macro.
 | |
|  *
 | |
|  * - the MY_MODEL() cast is emitted as static inline functions along with
 | |
|  *   the MY_IS_MODEL() type checking function and MY_MODEL_GET_IFACE() function.
 | |
|  *
 | |
|  * - g_autoptr() support being added for your type, based on your prerequisite type.
 | |
|  *
 | |
|  * You can only use this function if your prerequisite type also supports g_autoptr().
 | |
|  *
 | |
|  * Because the type macro (MY_TYPE_MODEL in the above example) is not a callable, you must continue to
 | |
|  * manually define this as a macro for yourself.
 | |
|  *
 | |
|  * The declaration of the _get_type() function is the first thing emitted by the macro.  This allows this macro
 | |
|  * to be used in the usual way with export control and API versioning macros.
 | |
|  *
 | |
|  * Since: 2.44
 | |
|  **/
 | |
| #define G_DECLARE_INTERFACE(ModuleObjName, module_obj_name, MODULE, OBJ_NAME, PrerequisiteName) \
 | |
|   GType module_obj_name##_get_type (void);                                                                 \
 | |
|   lG_GNUC_BEGIN_IGNORE_DEPRECATIONS                                                                         \
 | |
|   typedef struct _##ModuleObjName ModuleObjName;                                                           \
 | |
|   typedef struct _##ModuleObjName##Interface ModuleObjName##Interface;                                     \
 | |
|                                                                                                            \
 | |
|   l_GLIB_DEFINE_AUTOPTR_CHAINUP (ModuleObjName, PrerequisiteName)                                           \
 | |
|                                                                                                            \
 | |
|   static inline ModuleObjName * MODULE##_##OBJ_NAME (gpointer ptr) {                                       \
 | |
|     return lG_TYPE_CHECK_INSTANCE_CAST (ptr, module_obj_name##_get_type (), ModuleObjName); }               \
 | |
|   static inline gboolean MODULE##_IS_##OBJ_NAME (gpointer ptr) {                                           \
 | |
|     return lG_TYPE_CHECK_INSTANCE_TYPE (ptr, module_obj_name##_get_type ()); }                              \
 | |
|   static inline ModuleObjName##Interface * MODULE##_##OBJ_NAME##_GET_IFACE (gpointer ptr) {                \
 | |
|     return G_TYPE_INSTANCE_GET_INTERFACE (ptr, module_obj_name##_get_type (), ModuleObjName##Interface); } \
 | |
|   lG_GNUC_END_IGNORE_DEPRECATIONS
 | |
| 
 | |
| /**
 | |
|  * G_DEFINE_TYPE:
 | |
|  * @TN: The name of the new type, in Camel case.
 | |
|  * @t_n: The name of the new type, in lowercase, with words 
 | |
|  *  separated by '_'.
 | |
|  * @T_P: The #GType of the parent type.
 | |
|  * 
 | |
|  * A convenience macro for type implementations, which declares a class
 | |
|  * initialization function, an instance initialization function (see #GTypeInfo
 | |
|  * for information about these) and a static variable named `t_n_parent_class`
 | |
|  * pointing to the parent class. Furthermore, it defines  a *_get_type() function.
 | |
|  * See lG_DEFINE_TYPE_EXTENDED() for an example.
 | |
|  * 
 | |
|  * Since: 2.4
 | |
|  */
 | |
| #define G_DEFINE_TYPE(TN, t_n, T_P)			    lG_DEFINE_TYPE_EXTENDED (TN, t_n, T_P, 0, {})
 | |
| /**
 | |
|  * G_DEFINE_TYPE_WITH_CODE:
 | |
|  * @TN: The name of the new type, in Camel case.
 | |
|  * @t_n: The name of the new type in lowercase, with words separated by '_'.
 | |
|  * @T_P: The #GType of the parent type.
 | |
|  * @_C_: Custom code that gets inserted in the *_get_type() function.
 | |
|  * 
 | |
|  * A convenience macro for type implementations.  
 | |
|  * Similar to G_DEFINE_TYPE(), but allows you to insert custom code into the 
 | |
|  * *_get_type() function, e.g. interface implementations via lG_IMPLEMENT_INTERFACE().
 | |
|  * See lG_DEFINE_TYPE_EXTENDED() for an example.
 | |
|  * 
 | |
|  * Since: 2.4
 | |
|  */
 | |
| #define G_DEFINE_TYPE_WITH_CODE(TN, t_n, T_P, _C_)	    _G_DEFINE_TYPE_EXTENDED_BEGIN (TN, t_n, T_P, 0) {_C_;} _G_DEFINE_TYPE_EXTENDED_END()
 | |
| /**
 | |
|  * G_DEFINE_TYPE_WITH_PRIVATE:
 | |
|  * @TN: The name of the new type, in Camel case.
 | |
|  * @t_n: The name of the new type, in lowercase, with words 
 | |
|  *  separated by '_'.
 | |
|  * @T_P: The #GType of the parent type.
 | |
|  * 
 | |
|  * A convenience macro for type implementations, which declares a class
 | |
|  * initialization function, an instance initialization function (see #GTypeInfo
 | |
|  * for information about these), a static variable named `t_n_parent_class`
 | |
|  * pointing to the parent class, and adds private instance data to the type.
 | |
|  * Furthermore, it defines a *_get_type() function. See lG_DEFINE_TYPE_EXTENDED()
 | |
|  * for an example.
 | |
|  * 
 | |
|  * Note that private structs added with this macros must have a struct
 | |
|  * name of the form @TN Private.
 | |
|  *
 | |
|  * Since: 2.38
 | |
|  */
 | |
| #define G_DEFINE_TYPE_WITH_PRIVATE(TN, t_n, T_P)            lG_DEFINE_TYPE_EXTENDED (TN, t_n, T_P, 0, G_ADD_PRIVATE (TN))
 | |
| /**
 | |
|  * G_DEFINE_ABSTRACT_TYPE:
 | |
|  * @TN: The name of the new type, in Camel case.
 | |
|  * @t_n: The name of the new type, in lowercase, with words 
 | |
|  *  separated by '_'.
 | |
|  * @T_P: The #GType of the parent type.
 | |
|  * 
 | |
|  * A convenience macro for type implementations. 
 | |
|  * Similar to G_DEFINE_TYPE(), but defines an abstract type. 
 | |
|  * See lG_DEFINE_TYPE_EXTENDED() for an example.
 | |
|  * 
 | |
|  * Since: 2.4
 | |
|  */
 | |
| #define G_DEFINE_ABSTRACT_TYPE(TN, t_n, T_P)		    lG_DEFINE_TYPE_EXTENDED (TN, t_n, T_P, G_TYPE_FLAG_ABSTRACT, {})
 | |
| /**
 | |
|  * G_DEFINE_ABSTRACT_TYPE_WITH_CODE:
 | |
|  * @TN: The name of the new type, in Camel case.
 | |
|  * @t_n: The name of the new type, in lowercase, with words 
 | |
|  *  separated by '_'.
 | |
|  * @T_P: The #GType of the parent type.
 | |
|  * @_C_: Custom code that gets inserted in the @type_name_get_type() function.
 | |
|  * 
 | |
|  * A convenience macro for type implementations.
 | |
|  * Similar to G_DEFINE_TYPE_WITH_CODE(), but defines an abstract type and
 | |
|  * allows you to insert custom code into the *_get_type() function, e.g.
 | |
|  * interface implementations  via lG_IMPLEMENT_INTERFACE().
 | |
|  * See lG_DEFINE_TYPE_EXTENDED() for an example.
 | |
|  * 
 | |
|  * Since: 2.4
 | |
|  */
 | |
| #define G_DEFINE_ABSTRACT_TYPE_WITH_CODE(TN, t_n, T_P, _C_) _G_DEFINE_TYPE_EXTENDED_BEGIN (TN, t_n, T_P, G_TYPE_FLAG_ABSTRACT) {_C_;} _G_DEFINE_TYPE_EXTENDED_END()
 | |
| /**
 | |
|  * G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE:
 | |
|  * @TN: The name of the new type, in Camel case.
 | |
|  * @t_n: The name of the new type, in lowercase, with words 
 | |
|  *  separated by '_'.
 | |
|  * @T_P: The #GType of the parent type.
 | |
|  *
 | |
|  * Similar to G_DEFINE_TYPE_WITH_PRIVATE(), but defines an abstract type. 
 | |
|  * See lG_DEFINE_TYPE_EXTENDED() for an example.
 | |
|  * 
 | |
|  * Since: 2.38
 | |
|  */
 | |
| #define G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(TN, t_n, T_P)   lG_DEFINE_TYPE_EXTENDED (TN, t_n, T_P, G_TYPE_FLAG_ABSTRACT, G_ADD_PRIVATE (TN))
 | |
| /**
 | |
|  * lG_DEFINE_TYPE_EXTENDED:
 | |
|  * @TN: The name of the new type, in Camel case.
 | |
|  * @t_n: The name of the new type, in lowercase, with words
 | |
|  *    separated by '_'.
 | |
|  * @T_P: The #GType of the parent type.
 | |
|  * @_f_: #GTypeFlags to pass to g_type_register_static()
 | |
|  * @_C_: Custom code that gets inserted in the *_get_type() function.
 | |
|  *
 | |
|  * The most general convenience macro for type implementations, on which
 | |
|  * G_DEFINE_TYPE(), etc are based.
 | |
|  *
 | |
|  * |[<!-- language="C" -->
 | |
|  * lG_DEFINE_TYPE_EXTENDED (GtkGadget,
 | |
|  *                         gtk_gadget,
 | |
|  *                         GTK_TYPE_WIDGET,
 | |
|  *                         0,
 | |
|  *                         lG_IMPLEMENT_INTERFACE (TYPE_GIZMO,
 | |
|  *                                                gtk_gadget_gizmo_init));
 | |
|  * ]|
 | |
|  * expands to
 | |
|  * |[<!-- language="C" -->
 | |
|  * static void     gtk_gadget_init       (GtkGadget      *self);
 | |
|  * static void     gtk_gadget_class_init (GtkGadgetClass *klass);
 | |
|  * static gpointer gtk_gadget_parent_class = NULL;
 | |
|  * static void     gtk_gadget_class_intern_init (gpointer klass)
 | |
|  * {
 | |
|  *   gtk_gadget_parent_class = g_type_class_peek_parent (klass);
 | |
|  *   gtk_gadget_class_init ((GtkGadgetClass*) klass);
 | |
|  * }
 | |
|  *
 | |
|  * GType
 | |
|  * gtk_gadget_get_type (void)
 | |
|  * {
 | |
|  *   static volatile gsize g_define_type_id__volatile = 0;
 | |
|  *   if (lg_once_init_enter (&g_define_type_id__volatile))
 | |
|  *     {
 | |
|  *       GType g_define_type_id =
 | |
|  *         lg_type_register_static_simple (GTK_TYPE_WIDGET,
 | |
|  *                                        lg_intern_static_string ("GtkGadget"),
 | |
|  *                                        sizeof (GtkGadgetClass),
 | |
|  *                                        (GClassInitFunc) gtk_gadget_class_intern_init,
 | |
|  *                                        sizeof (GtkGadget),
 | |
|  *                                        (GInstanceInitFunc) gtk_gadget_init,
 | |
|  *                                        0);
 | |
|  *       {
 | |
|  *         const GInterfaceInfo g_implement_interface_info = {
 | |
|  *           (GInterfaceInitFunc) gtk_gadget_gizmo_init
 | |
|  *         };
 | |
|  *         lg_type_add_interface_static (g_define_type_id, TYPE_GIZMO, &g_implement_interface_info);
 | |
|  *       }
 | |
|  *       lg_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
 | |
|  *     }
 | |
|  *   return g_define_type_id__volatile;
 | |
|  * }
 | |
|  * ]|
 | |
|  * The only pieces which have to be manually provided are the definitions of
 | |
|  * the instance and class structure and the definitions of the instance and
 | |
|  * class init functions.
 | |
|  *
 | |
|  * Since: 2.4
 | |
|  */
 | |
| #define lG_DEFINE_TYPE_EXTENDED(TN, t_n, T_P, _f_, _C_)	    _G_DEFINE_TYPE_EXTENDED_BEGIN (TN, t_n, T_P, _f_) {_C_;} _G_DEFINE_TYPE_EXTENDED_END()
 | |
| 
 | |
| /**
 | |
|  * G_DEFINE_INTERFACE:
 | |
|  * @TN: The name of the new type, in Camel case.
 | |
|  * @t_n: The name of the new type, in lowercase, with words separated by '_'.
 | |
|  * @T_P: The #GType of the prerequisite type for the interface, or 0
 | |
|  * (%G_TYPE_INVALID) for no prerequisite type.
 | |
|  *
 | |
|  * A convenience macro for #GTypeInterface definitions, which declares
 | |
|  * a default vtable initialization function and defines a *_get_type()
 | |
|  * function.
 | |
|  *
 | |
|  * The macro expects the interface initialization function to have the
 | |
|  * name `t_n ## _default_init`, and the interface structure to have the
 | |
|  * name `TN ## Interface`.
 | |
|  *
 | |
|  * Since: 2.24
 | |
|  */
 | |
| #define G_DEFINE_INTERFACE(TN, t_n, T_P)		    G_DEFINE_INTERFACE_WITH_CODE(TN, t_n, T_P, ;)
 | |
| 
 | |
| /**
 | |
|  * G_DEFINE_INTERFACE_WITH_CODE:
 | |
|  * @TN: The name of the new type, in Camel case.
 | |
|  * @t_n: The name of the new type, in lowercase, with words separated by '_'.
 | |
|  * @T_P: The #GType of the prerequisite type for the interface, or 0
 | |
|  * (%G_TYPE_INVALID) for no prerequisite type.
 | |
|  * @_C_: Custom code that gets inserted in the *_get_type() function.
 | |
|  *
 | |
|  * A convenience macro for #GTypeInterface definitions. Similar to
 | |
|  * G_DEFINE_INTERFACE(), but allows you to insert custom code into the
 | |
|  * *_get_type() function, e.g. additional interface implementations
 | |
|  * via lG_IMPLEMENT_INTERFACE(), or additional prerequisite types. See
 | |
|  * lG_DEFINE_TYPE_EXTENDED() for a similar example using
 | |
|  * G_DEFINE_TYPE_WITH_CODE().
 | |
|  *
 | |
|  * Since: 2.24
 | |
|  */
 | |
| #define G_DEFINE_INTERFACE_WITH_CODE(TN, t_n, T_P, _C_)     _G_DEFINE_INTERFACE_EXTENDED_BEGIN(TN, t_n, T_P) {_C_;} _G_DEFINE_INTERFACE_EXTENDED_END()
 | |
| 
 | |
| /**
 | |
|  * lG_IMPLEMENT_INTERFACE:
 | |
|  * @TYPE_IFACE: The #GType of the interface to add
 | |
|  * @iface_init: The interface init function
 | |
|  *
 | |
|  * A convenience macro to ease interface addition in the `_C_` section
 | |
|  * of G_DEFINE_TYPE_WITH_CODE() or G_DEFINE_ABSTRACT_TYPE_WITH_CODE().
 | |
|  * See lG_DEFINE_TYPE_EXTENDED() for an example.
 | |
|  *
 | |
|  * Note that this macro can only be used together with the G_DEFINE_TYPE_*
 | |
|  * macros, since it depends on variable names from those macros.
 | |
|  *
 | |
|  * Since: 2.4
 | |
|  */
 | |
| #define lG_IMPLEMENT_INTERFACE(TYPE_IFACE, iface_init)       { \
 | |
|   const GInterfaceInfo g_implement_interface_info = { \
 | |
|     (GInterfaceInitFunc) iface_init, NULL, NULL \
 | |
|   }; \
 | |
|   lg_type_add_interface_static (g_define_type_id, TYPE_IFACE, &g_implement_interface_info); \
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * G_ADD_PRIVATE:
 | |
|  * @TypeName: the name of the type in CamelCase
 | |
|  *
 | |
|  * A convenience macro to ease adding private data to instances of a new type
 | |
|  * in the @_C_ section of G_DEFINE_TYPE_WITH_CODE() or
 | |
|  * G_DEFINE_ABSTRACT_TYPE_WITH_CODE().
 | |
|  *
 | |
|  * For instance:
 | |
|  *
 | |
|  * |[<!-- language="C" -->
 | |
|  *   typedef struct _MyObject MyObject;
 | |
|  *   typedef struct _MyObjectClass MyObjectClass;
 | |
|  *
 | |
|  *   typedef struct {
 | |
|  *     gint foo;
 | |
|  *     gint bar;
 | |
|  *   } MyObjectPrivate;
 | |
|  *
 | |
|  *   G_DEFINE_TYPE_WITH_CODE (MyObject, my_object, G_TYPE_OBJECT,
 | |
|  *                            G_ADD_PRIVATE (MyObject))
 | |
|  * ]|
 | |
|  *
 | |
|  * Will add MyObjectPrivate as the private data to any instance of the MyObject
 | |
|  * type.
 | |
|  *
 | |
|  * G_DEFINE_TYPE_* macros will automatically create a private function
 | |
|  * based on the arguments to this macro, which can be used to safely
 | |
|  * retrieve the private data from an instance of the type; for instance:
 | |
|  *
 | |
|  * |[<!-- language="C" -->
 | |
|  *   gint
 | |
|  *   my_object_get_foo (MyObject *obj)
 | |
|  *   {
 | |
|  *     MyObjectPrivate *priv = my_object_get_instance_private (obj);
 | |
|  *
 | |
|  *     g_return_val_if_fail (MY_IS_OBJECT (obj), 0);
 | |
|  *
 | |
|  *     return priv->foo;
 | |
|  *   }
 | |
|  *
 | |
|  *   void
 | |
|  *   my_object_set_bar (MyObject *obj,
 | |
|  *                      gint      bar)
 | |
|  *   {
 | |
|  *     MyObjectPrivate *priv = my_object_get_instance_private (obj);
 | |
|  *
 | |
|  *     g_return_if_fail (MY_IS_OBJECT (obj));
 | |
|  *
 | |
|  *     if (priv->bar != bar)
 | |
|  *       priv->bar = bar;
 | |
|  *   }
 | |
|  * ]|
 | |
|  *
 | |
|  * Note that this macro can only be used together with the G_DEFINE_TYPE_*
 | |
|  * macros, since it depends on variable names from those macros.
 | |
|  *
 | |
|  * Also note that private structs added with these macros must have a struct
 | |
|  * name of the form `TypeNamePrivate`.
 | |
|  *
 | |
|  * It is safe to call _get_instance_private on %NULL or invalid object since
 | |
|  * it's only adding an offset to the instance pointer. In that case the returned
 | |
|  * pointer must not be dereferenced.
 | |
|  *
 | |
|  * Since: 2.38
 | |
|  */
 | |
| #define G_ADD_PRIVATE(TypeName) { \
 | |
|   TypeName##_private_offset = \
 | |
|     g_type_add_instance_private (g_define_type_id, sizeof (TypeName##Private)); \
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * G_PRIVATE_OFFSET:
 | |
|  * @TypeName: the name of the type in CamelCase
 | |
|  * @field: the name of the field in the private data structure
 | |
|  *
 | |
|  * Evaluates to the offset of the @field inside the instance private data
 | |
|  * structure for @TypeName.
 | |
|  *
 | |
|  * Note that this macro can only be used together with the G_DEFINE_TYPE_*
 | |
|  * and G_ADD_PRIVATE() macros, since it depends on variable names from
 | |
|  * those macros.
 | |
|  *
 | |
|  * Since: 2.38
 | |
|  */
 | |
| #define G_PRIVATE_OFFSET(TypeName, field) \
 | |
|   (TypeName##_private_offset + (G_STRUCT_OFFSET (TypeName##Private, field)))
 | |
| 
 | |
| /**
 | |
|  * G_PRIVATE_FIELD_P:
 | |
|  * @TypeName: the name of the type in CamelCase
 | |
|  * @inst: the instance of @TypeName you wish to access
 | |
|  * @field_name: the name of the field in the private data structure
 | |
|  *
 | |
|  * Evaluates to a pointer to the @field_name inside the @inst private data
 | |
|  * structure for @TypeName.
 | |
|  *
 | |
|  * Note that this macro can only be used together with the G_DEFINE_TYPE_*
 | |
|  * and G_ADD_PRIVATE() macros, since it depends on variable names from
 | |
|  * those macros.
 | |
|  *
 | |
|  * Since: 2.38
 | |
|  */
 | |
| #define G_PRIVATE_FIELD_P(TypeName, inst, field_name) \
 | |
|   G_STRUCT_MEMBER_P (inst, G_PRIVATE_OFFSET (TypeName, field_name))
 | |
| 
 | |
| /**
 | |
|  * G_PRIVATE_FIELD:
 | |
|  * @TypeName: the name of the type in CamelCase
 | |
|  * @inst: the instance of @TypeName you wish to access
 | |
|  * @field_type: the type of the field in the private data structure
 | |
|  * @field_name: the name of the field in the private data structure
 | |
|  *
 | |
|  * Evaluates to the @field_name inside the @inst private data
 | |
|  * structure for @TypeName.
 | |
|  *
 | |
|  * Note that this macro can only be used together with the G_DEFINE_TYPE_*
 | |
|  * and G_ADD_PRIVATE() macros, since it depends on variable names from
 | |
|  * those macros.
 | |
|  *
 | |
|  * Since: 2.38
 | |
|  */
 | |
| #define G_PRIVATE_FIELD(TypeName, inst, field_type, field_name) \
 | |
|   G_STRUCT_MEMBER (field_type, inst, G_PRIVATE_OFFSET (TypeName, field_name))
 | |
| 
 | |
| /* we need to have this macro under conditional expansion, as it references
 | |
|  * a function that has been added in 2.38. see bug:
 | |
|  * https://bugzilla.gnome.org/show_bug.cgi?id=703191
 | |
|  */
 | |
| #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
 | |
| #define _G_DEFINE_TYPE_EXTENDED_CLASS_INIT(TypeName, type_name) \
 | |
| static void     type_name##_class_intern_init (gpointer klass) \
 | |
| { \
 | |
|   type_name##_parent_class = g_type_class_peek_parent (klass); \
 | |
|   if (TypeName##_private_offset != 0) \
 | |
|     g_type_class_adjust_private_offset (klass, &TypeName##_private_offset); \
 | |
|   type_name##_class_init ((TypeName##Class*) klass); \
 | |
| }
 | |
| 
 | |
| #else
 | |
| #define _G_DEFINE_TYPE_EXTENDED_CLASS_INIT(TypeName, type_name) \
 | |
| static void     type_name##_class_intern_init (gpointer klass) \
 | |
| { \
 | |
|   type_name##_parent_class = g_type_class_peek_parent (klass); \
 | |
|   type_name##_class_init ((TypeName##Class*) klass); \
 | |
| }
 | |
| #endif /* GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 */
 | |
| 
 | |
| #define _G_DEFINE_TYPE_EXTENDED_BEGIN(TypeName, type_name, TYPE_PARENT, flags) \
 | |
| \
 | |
| static void     type_name##_init              (TypeName        *self); \
 | |
| static void     type_name##_class_init        (TypeName##Class *klass); \
 | |
| static gpointer type_name##_parent_class = NULL; \
 | |
| static gint     TypeName##_private_offset; \
 | |
| \
 | |
| _G_DEFINE_TYPE_EXTENDED_CLASS_INIT(TypeName, type_name) \
 | |
| \
 | |
| G_GNUC_UNUSED \
 | |
| static inline gpointer \
 | |
| type_name##_get_instance_private (TypeName *self) \
 | |
| { \
 | |
|   return (G_STRUCT_MEMBER_P (self, TypeName##_private_offset)); \
 | |
| } \
 | |
| \
 | |
| GType \
 | |
| type_name##_get_type (void) \
 | |
| { \
 | |
|   static volatile gsize g_define_type_id__volatile = 0; \
 | |
|   if (lg_once_init_enter (&g_define_type_id__volatile))  \
 | |
|     { \
 | |
|       GType g_define_type_id = \
 | |
|         lg_type_register_static_simple (TYPE_PARENT, \
 | |
|                                        lg_intern_static_string (#TypeName), \
 | |
|                                        sizeof (TypeName##Class), \
 | |
|                                        (GClassInitFunc) type_name##_class_intern_init, \
 | |
|                                        sizeof (TypeName), \
 | |
|                                        (GInstanceInitFunc) type_name##_init, \
 | |
|                                        (GTypeFlags) flags); \
 | |
|       { /* custom code follows */
 | |
| #define _G_DEFINE_TYPE_EXTENDED_END()	\
 | |
|         /* following custom code */	\
 | |
|       }					\
 | |
|       lg_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \
 | |
|     }					\
 | |
|   return g_define_type_id__volatile;	\
 | |
| } /* closes type_name##_get_type() */
 | |
| 
 | |
| #define _G_DEFINE_INTERFACE_EXTENDED_BEGIN(TypeName, type_name, TYPE_PREREQ) \
 | |
| \
 | |
| static void     type_name##_default_init        (TypeName##Interface *klass); \
 | |
| \
 | |
| GType \
 | |
| type_name##_get_type (void) \
 | |
| { \
 | |
|   static volatile gsize g_define_type_id__volatile = 0; \
 | |
|   if (lg_once_init_enter (&g_define_type_id__volatile))  \
 | |
|     { \
 | |
|       GType g_define_type_id = \
 | |
|         lg_type_register_static_simple (G_TYPE_INTERFACE, \
 | |
|                                        lg_intern_static_string (#TypeName), \
 | |
|                                        sizeof (TypeName##Interface), \
 | |
|                                        (GClassInitFunc)type_name##_default_init, \
 | |
|                                        0, \
 | |
|                                        (GInstanceInitFunc)NULL, \
 | |
|                                        (GTypeFlags) 0); \
 | |
|       if (TYPE_PREREQ) \
 | |
|         g_type_interface_add_prerequisite (g_define_type_id, TYPE_PREREQ); \
 | |
|       { /* custom code follows */
 | |
| #define _G_DEFINE_INTERFACE_EXTENDED_END()	\
 | |
|         /* following custom code */		\
 | |
|       }						\
 | |
|       lg_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \
 | |
|     }						\
 | |
|   return g_define_type_id__volatile;			\
 | |
| } /* closes type_name##_get_type() */
 | |
| 
 | |
| /**
 | |
|  * G_DEFINE_BOXED_TYPE:
 | |
|  * @TypeName: The name of the new type, in Camel case
 | |
|  * @type_name: The name of the new type, in lowercase, with words
 | |
|  *  separated by '_'
 | |
|  * @copy_func: the #GBoxedCopyFunc for the new type
 | |
|  * @free_func: the #GBoxedFreeFunc for the new type
 | |
|  *
 | |
|  * A convenience macro for boxed type implementations, which defines a
 | |
|  * type_name_get_type() function registering the boxed type.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| #define G_DEFINE_BOXED_TYPE(TypeName, type_name, copy_func, free_func) G_DEFINE_BOXED_TYPE_WITH_CODE (TypeName, type_name, copy_func, free_func, {})
 | |
| /**
 | |
|  * G_DEFINE_BOXED_TYPE_WITH_CODE:
 | |
|  * @TypeName: The name of the new type, in Camel case
 | |
|  * @type_name: The name of the new type, in lowercase, with words
 | |
|  *  separated by '_'
 | |
|  * @copy_func: the #GBoxedCopyFunc for the new type
 | |
|  * @free_func: the #GBoxedFreeFunc for the new type
 | |
|  * @_C_: Custom code that gets inserted in the *_get_type() function
 | |
|  *
 | |
|  * A convenience macro for boxed type implementations.
 | |
|  * Similar to G_DEFINE_BOXED_TYPE(), but allows to insert custom code into the
 | |
|  * type_name_get_type() function, e.g. to register value transformations with
 | |
|  * g_value_register_transform_func(), for instance:
 | |
|  *
 | |
|  * |[<!-- language="C" -->
 | |
|  * G_DEFINE_BOXED_TYPE_WITH_CODE (GdkRectangle, gdk_rectangle,
 | |
|  *                                gdk_rectangle_copy,
 | |
|  *                                gdk_rectangle_free,
 | |
|  *                                register_rectangle_transform_funcs (g_define_type_id))
 | |
|  * ]|
 | |
|  *
 | |
|  * Similarly to the %G_DEFINE_TYPE family of macros, the #GType of the newly
 | |
|  * defined boxed type is exposed in the `g_define_type_id` variable.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| #define G_DEFINE_BOXED_TYPE_WITH_CODE(TypeName, type_name, copy_func, free_func, _C_) _G_DEFINE_BOXED_TYPE_BEGIN (TypeName, type_name, copy_func, free_func) {_C_;} _G_DEFINE_TYPE_EXTENDED_END()
 | |
| 
 | |
| /* Only use this in non-C++ on GCC >= 2.7, except for Darwin/ppc64.
 | |
|  * See https://bugzilla.gnome.org/show_bug.cgi?id=647145
 | |
|  */
 | |
| #if !defined (__cplusplus) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)) && !(defined (__APPLE__) && defined (__ppc64__))
 | |
| #define _G_DEFINE_BOXED_TYPE_BEGIN(TypeName, type_name, copy_func, free_func) \
 | |
| GType \
 | |
| type_name##_get_type (void) \
 | |
| { \
 | |
|   static volatile gsize g_define_type_id__volatile = 0; \
 | |
|   if (lg_once_init_enter (&g_define_type_id__volatile))  \
 | |
|     { \
 | |
|       GType (* _g_register_boxed) \
 | |
|         (const gchar *, \
 | |
|          union \
 | |
|            { \
 | |
|              TypeName * (*do_copy_type) (TypeName *); \
 | |
|              TypeName * (*do_const_copy_type) (const TypeName *); \
 | |
|              GBoxedCopyFunc do_copy_boxed; \
 | |
|            } __attribute__((__transparent_union__)), \
 | |
|          union \
 | |
|            { \
 | |
|              void (* do_free_type) (TypeName *); \
 | |
|              GBoxedFreeFunc do_free_boxed; \
 | |
|            } __attribute__((__transparent_union__)) \
 | |
|         ) = g_boxed_type_register_static; \
 | |
|       GType g_define_type_id = \
 | |
|         _g_register_boxed (lg_intern_static_string (#TypeName), copy_func, free_func); \
 | |
|       { /* custom code follows */
 | |
| #else
 | |
| #define _G_DEFINE_BOXED_TYPE_BEGIN(TypeName, type_name, copy_func, free_func) \
 | |
| GType \
 | |
| type_name##_get_type (void) \
 | |
| { \
 | |
|   static volatile gsize g_define_type_id__volatile = 0; \
 | |
|   if (lg_once_init_enter (&g_define_type_id__volatile))  \
 | |
|     { \
 | |
|       GType g_define_type_id = \
 | |
|         g_boxed_type_register_static (lg_intern_static_string (#TypeName), \
 | |
|                                       (GBoxedCopyFunc) copy_func, \
 | |
|                                       (GBoxedFreeFunc) free_func); \
 | |
|       { /* custom code follows */
 | |
| #endif /* __GNUC__ */
 | |
| 
 | |
| /**
 | |
|  * G_DEFINE_POINTER_TYPE:
 | |
|  * @TypeName: The name of the new type, in Camel case
 | |
|  * @type_name: The name of the new type, in lowercase, with words
 | |
|  *  separated by '_'
 | |
|  *
 | |
|  * A convenience macro for pointer type implementations, which defines a
 | |
|  * type_name_get_type() function registering the pointer type.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| #define G_DEFINE_POINTER_TYPE(TypeName, type_name) G_DEFINE_POINTER_TYPE_WITH_CODE (TypeName, type_name, {})
 | |
| /**
 | |
|  * G_DEFINE_POINTER_TYPE_WITH_CODE:
 | |
|  * @TypeName: The name of the new type, in Camel case
 | |
|  * @type_name: The name of the new type, in lowercase, with words
 | |
|  *  separated by '_'
 | |
|  * @_C_: Custom code that gets inserted in the *_get_type() function
 | |
|  *
 | |
|  * A convenience macro for pointer type implementations.
 | |
|  * Similar to G_DEFINE_POINTER_TYPE(), but allows to insert
 | |
|  * custom code into the type_name_get_type() function.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| #define G_DEFINE_POINTER_TYPE_WITH_CODE(TypeName, type_name, _C_) _G_DEFINE_POINTER_TYPE_BEGIN (TypeName, type_name) {_C_;} _G_DEFINE_TYPE_EXTENDED_END()
 | |
| 
 | |
| #define _G_DEFINE_POINTER_TYPE_BEGIN(TypeName, type_name) \
 | |
| GType \
 | |
| type_name##_get_type (void) \
 | |
| { \
 | |
|   static volatile gsize g_define_type_id__volatile = 0; \
 | |
|   if (lg_once_init_enter (&g_define_type_id__volatile))  \
 | |
|     { \
 | |
|       GType g_define_type_id = \
 | |
|         g_pointer_type_register_static (lg_intern_static_string (#TypeName)); \
 | |
|       { /* custom code follows */
 | |
| 
 | |
| /* --- protected (for fundamental type implementations) --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTypePlugin*	 g_type_get_plugin		(GType		     type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTypePlugin*	 g_type_interface_get_plugin	(GType		     instance_type,
 | |
| 						 GType               interface_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType		 g_type_fundamental_next	(void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType		 g_type_fundamental		(GType		     type_id);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTypeInstance*   g_type_create_instance         (GType               type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void             g_type_free_instance           (GTypeInstance      *instance);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		 g_type_add_class_cache_func    (gpointer	     cache_data,
 | |
| 						 GTypeClassCacheFunc cache_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		 g_type_remove_class_cache_func (gpointer	     cache_data,
 | |
| 						 GTypeClassCacheFunc cache_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void             g_type_class_unref_uncached    (gpointer            g_class);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void             g_type_add_interface_check     (gpointer	         check_data,
 | |
| 						 GTypeInterfaceCheckFunc check_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void             g_type_remove_interface_check  (gpointer	         check_data,
 | |
| 						 GTypeInterfaceCheckFunc check_func);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTypeValueTable* g_type_value_table_peek        (GType		     type);
 | |
| 
 | |
| 
 | |
| /*< private >*/
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	 g_type_check_instance          (GTypeInstance      *instance) G_GNUC_PURE;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTypeInstance*   lg_type_check_instance_cast     (GTypeInstance      *instance,
 | |
| 						 GType               iface_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean         g_type_check_instance_is_a	(GTypeInstance      *instance,
 | |
| 						 GType               iface_type) G_GNUC_PURE;
 | |
| GLIB_AVAILABLE_IN_2_42
 | |
| gboolean         g_type_check_instance_is_fundamentally_a (GTypeInstance *instance,
 | |
|                                                            GType          fundamental_type) G_GNUC_PURE;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GTypeClass*      g_type_check_class_cast        (GTypeClass         *g_class,
 | |
| 						 GType               is_a_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean         g_type_check_class_is_a        (GTypeClass         *g_class,
 | |
| 						 GType               is_a_type) G_GNUC_PURE;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	 g_type_check_is_value_type     (GType		     type) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	 g_type_check_value             (GValue		    *value) G_GNUC_PURE;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	 g_type_check_value_holds	(GValue		    *value,
 | |
| 						 GType		     type) G_GNUC_PURE;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean         g_type_test_flags              (GType               type,
 | |
| 						 guint               flags) G_GNUC_CONST;
 | |
| 
 | |
| 
 | |
| /* --- debugging functions --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *    g_type_name_from_instance      (GTypeInstance	*instance);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *    g_type_name_from_class         (GTypeClass	*g_class);
 | |
| 
 | |
| 
 | |
| /* --- implementation bits --- */
 | |
| #ifndef G_DISABLE_CAST_CHECKS
 | |
| #  define l_G_TYPE_CIC(ip, gt, ct) \
 | |
|     ((ct*) lg_type_check_instance_cast ((GTypeInstance*) ip, gt))
 | |
| #  define _G_TYPE_CCC(cp, gt, ct) \
 | |
|     ((ct*) g_type_check_class_cast ((GTypeClass*) cp, gt))
 | |
| #else /* G_DISABLE_CAST_CHECKS */
 | |
| #  define l_G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
 | |
| #  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
 | |
| #endif /* G_DISABLE_CAST_CHECKS */
 | |
| #define _G_TYPE_CHI(ip)			(g_type_check_instance ((GTypeInstance*) ip))
 | |
| #define _G_TYPE_CHV(vl)			(g_type_check_value ((GValue*) vl))
 | |
| #define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
 | |
| #define _G_TYPE_IGI(ip, gt, ct)         ((ct*) g_type_interface_peek (((GTypeInstance*) ip)->g_class, gt))
 | |
| #define _G_TYPE_CIFT(ip, ft)            (g_type_check_instance_is_fundamentally_a ((GTypeInstance*) ip, ft))
 | |
| #ifdef	__GNUC__
 | |
| #  define l_G_TYPE_CIT(ip, gt)             (lG_GNUC_EXTENSION ({ \
 | |
|   GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
 | |
|   if (!__inst) \
 | |
|     __r = FALSE; \
 | |
|   else if (__inst->g_class && __inst->g_class->g_type == __t) \
 | |
|     __r = TRUE; \
 | |
|   else \
 | |
|     __r = g_type_check_instance_is_a (__inst, __t); \
 | |
|   __r; \
 | |
| }))
 | |
| #  define _G_TYPE_CCT(cp, gt)             (lG_GNUC_EXTENSION ({ \
 | |
|   GTypeClass *__class = (GTypeClass*) cp; GType __t = gt; gboolean __r; \
 | |
|   if (!__class) \
 | |
|     __r = FALSE; \
 | |
|   else if (__class->g_type == __t) \
 | |
|     __r = TRUE; \
 | |
|   else \
 | |
|     __r = g_type_check_class_is_a (__class, __t); \
 | |
|   __r; \
 | |
| }))
 | |
| #  define _G_TYPE_CVH(vl, gt)             (lG_GNUC_EXTENSION ({ \
 | |
|   GValue *__val = (GValue*) vl; GType __t = gt; gboolean __r; \
 | |
|   if (!__val) \
 | |
|     __r = FALSE; \
 | |
|   else if (__val->g_type == __t)		\
 | |
|     __r = TRUE; \
 | |
|   else \
 | |
|     __r = g_type_check_value_holds (__val, __t); \
 | |
|   __r; \
 | |
| }))
 | |
| #else  /* !__GNUC__ */
 | |
| #  define l_G_TYPE_CIT(ip, gt)             (g_type_check_instance_is_a ((GTypeInstance*) ip, gt))
 | |
| #  define _G_TYPE_CCT(cp, gt)             (g_type_check_class_is_a ((GTypeClass*) cp, gt))
 | |
| #  define _G_TYPE_CVH(vl, gt)             (g_type_check_value_holds ((GValue*) vl, gt))
 | |
| #endif /* !__GNUC__ */
 | |
| /**
 | |
|  * G_TYPE_FLAG_RESERVED_ID_BIT:
 | |
|  * 
 | |
|  * A bit in the type number that's supposed to be left untouched.
 | |
|  */
 | |
| #define	G_TYPE_FLAG_RESERVED_ID_BIT	((GType) (1 << 0))
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_TYPE_H__ */
 | |
| /* GObject - GLib Type, Object, Parameter and Signal Library
 | |
|  * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General
 | |
|  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  * gvalue.h: generic GValue functions
 | |
|  */
 | |
| #ifndef __G_VALUE_H__
 | |
| #define __G_VALUE_H__
 | |
| 
 | |
| #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
 | |
| #error "Only <glib-object.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* --- type macros --- */
 | |
| /**
 | |
|  * G_TYPE_IS_VALUE:
 | |
|  * @type: A #GType value.
 | |
|  * 
 | |
|  * Checks whether the passed in type ID can be used for g_value_init().
 | |
|  * That is, this macro checks whether this type provides an implementation
 | |
|  * of the #GTypeValueTable functions required for a type to create a #GValue of.
 | |
|  * 
 | |
|  * Returns: Whether @type is suitable as a #GValue type.
 | |
|  */
 | |
| #define	G_TYPE_IS_VALUE(type)		(g_type_check_is_value_type (type))
 | |
| /**
 | |
|  * G_IS_VALUE:
 | |
|  * @value: A #GValue structure.
 | |
|  * 
 | |
|  * Checks if @value is a valid and initialized #GValue structure.
 | |
|  *
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define	G_IS_VALUE(value)		(G_TYPE_CHECK_VALUE (value))
 | |
| /**
 | |
|  * G_VALUE_TYPE:
 | |
|  * @value: A #GValue structure.
 | |
|  *
 | |
|  * Get the type identifier of @value.
 | |
|  *
 | |
|  * Returns: the #GType.
 | |
|  */
 | |
| #define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
 | |
| /**
 | |
|  * G_VALUE_TYPE_NAME:
 | |
|  * @value: A #GValue structure.
 | |
|  *
 | |
|  * Gets the type name of @value.
 | |
|  *
 | |
|  * Returns: the type name.
 | |
|  */
 | |
| #define	G_VALUE_TYPE_NAME(value)	(g_type_name (G_VALUE_TYPE (value)))
 | |
| /**
 | |
|  * G_VALUE_HOLDS:
 | |
|  * @value: A #GValue structure.
 | |
|  * @type: A #GType value.
 | |
|  *
 | |
|  * Checks if @value holds (or contains) a value of @type.
 | |
|  * This macro will also check for @value != %NULL and issue a
 | |
|  * warning if the check fails.
 | |
|  *
 | |
|  * Returns: %TRUE if @value holds the @type.
 | |
|  */
 | |
| #define G_VALUE_HOLDS(value,type)	(G_TYPE_CHECK_VALUE_TYPE ((value), (type)))
 | |
| 
 | |
| 
 | |
| /* --- typedefs & structures --- */
 | |
| /**
 | |
|  * GValueTransform:
 | |
|  * @src_value: Source value.
 | |
|  * @dest_value: Target value.
 | |
|  * 
 | |
|  * The type of value transformation functions which can be registered with
 | |
|  * g_value_register_transform_func().
 | |
|  */
 | |
| typedef void (*GValueTransform) (const GValue *src_value,
 | |
| 				 GValue       *dest_value);
 | |
| /**
 | |
|  * GValue:
 | |
|  * 
 | |
|  * An opaque structure used to hold different types of values.
 | |
|  * The data within the structure has protected scope: it is accessible only
 | |
|  * to functions within a #GTypeValueTable structure, or implementations of
 | |
|  * the g_value_*() API. That is, code portions which implement new fundamental
 | |
|  * types.
 | |
|  * #GValue users cannot make any assumptions about how data is stored
 | |
|  * within the 2 element @data union, and the @g_type member should
 | |
|  * only be accessed through the G_VALUE_TYPE() macro.
 | |
|  */
 | |
| struct _GValue
 | |
| {
 | |
|   /*< private >*/
 | |
|   GType		g_type;
 | |
| 
 | |
|   /* public for GTypeValueTable methods */
 | |
|   union {
 | |
|     gint	v_int;
 | |
|     guint	v_uint;
 | |
|     glong	v_long;
 | |
|     gulong	v_ulong;
 | |
|     gint64      v_int64;
 | |
|     guint64     v_uint64;
 | |
|     gfloat	v_float;
 | |
|     gdouble	v_double;
 | |
|     gpointer	v_pointer;
 | |
|   } data[2];
 | |
| };
 | |
| 
 | |
| 
 | |
| /* --- prototypes --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GValue*         g_value_init	   	(GValue       *value,
 | |
| 					 GType         g_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_value_copy    	(const GValue *src_value,
 | |
| 					 GValue       *dest_value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GValue*         g_value_reset   	(GValue       *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_value_unset   	(GValue       *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		g_value_set_instance	(GValue	      *value,
 | |
| 					 gpointer      instance);
 | |
| GLIB_AVAILABLE_IN_2_42
 | |
| void            g_value_init_from_instance   (GValue       *value,
 | |
|                                               gpointer      instance);
 | |
| 
 | |
| 
 | |
| /* --- private --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	g_value_fits_pointer	(const GValue *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer	g_value_peek_pointer	(const GValue *value);
 | |
| 
 | |
| 
 | |
| /* --- implementation details --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_value_type_compatible	(GType		 src_type,
 | |
| 					 GType		 dest_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_value_type_transformable	(GType           src_type,
 | |
| 					 GType           dest_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_value_transform		(const GValue   *src_value,
 | |
| 					 GValue         *dest_value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	g_value_register_transform_func	(GType		 src_type,
 | |
| 					 GType		 dest_type,
 | |
| 					 GValueTransform transform_func);
 | |
| 
 | |
| /**
 | |
|  * G_VALUE_NOCOPY_CONTENTS:
 | |
|  *
 | |
|  * If passed to G_VALUE_COLLECT(), allocated data won't be copied
 | |
|  * but used verbatim. This does not affect ref-counted types like
 | |
|  * objects.
 | |
|  */
 | |
| #define G_VALUE_NOCOPY_CONTENTS (1 << 27)
 | |
| 
 | |
| /**
 | |
|  * G_VALUE_INIT:
 | |
|  *
 | |
|  * A #GValue must be initialized before it can be used. This macro can
 | |
|  * be used as initializer instead of an explicit `{ 0 }` when declaring
 | |
|  * a variable, but it cannot be assigned to a variable.
 | |
|  *
 | |
|  * |[
 | |
|  *   GValue value = G_VALUE_INIT;
 | |
|  * ]|
 | |
|  *
 | |
|  * Since: 2.30
 | |
|  */
 | |
| #define G_VALUE_INIT  { 0, { { 0 } } }
 | |
| 
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_VALUE_H__ */
 | |
| /* GObject - GLib Type, Object, Parameter and Signal Library
 | |
|  * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General
 | |
|  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  * gparam.h: GParamSpec base class implementation
 | |
|  */
 | |
| #ifndef __G_PARAM_H__
 | |
| #define __G_PARAM_H__
 | |
| 
 | |
| #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
 | |
| #error "Only <glib-object.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* --- standard type macros --- */
 | |
| /**
 | |
|  * G_TYPE_IS_PARAM:
 | |
|  * @type: a #GType ID
 | |
|  * 
 | |
|  * Checks whether @type "is a" %G_TYPE_PARAM.
 | |
|  */
 | |
| #define G_TYPE_IS_PARAM(type)		(G_TYPE_FUNDAMENTAL (type) == G_TYPE_PARAM)
 | |
| /**
 | |
|  * G_PARAM_SPEC:
 | |
|  * @pspec: a valid #GParamSpec
 | |
|  * 
 | |
|  * Casts a derived #GParamSpec object (e.g. of type #GParamSpecInt) into
 | |
|  * a #GParamSpec object.
 | |
|  */
 | |
| #define G_PARAM_SPEC(pspec)		(lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM, GParamSpec))
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC:
 | |
|  * @pspec: a #GParamSpec
 | |
|  * 
 | |
|  * Checks whether @pspec "is a" valid #GParamSpec structure of type %G_TYPE_PARAM
 | |
|  * or derived.
 | |
|  */
 | |
| #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_42
 | |
| #define G_IS_PARAM_SPEC(pspec)		(G_TYPE_CHECK_INSTANCE_FUNDAMENTAL_TYPE ((pspec), G_TYPE_PARAM))
 | |
| #else
 | |
| #define G_IS_PARAM_SPEC(pspec)		(lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM))
 | |
| #endif
 | |
| /**
 | |
|  * G_PARAM_SPEC_CLASS:
 | |
|  * @pclass: a valid #GParamSpecClass
 | |
|  * 
 | |
|  * Casts a derived #GParamSpecClass structure into a #GParamSpecClass structure.
 | |
|  */
 | |
| #define G_PARAM_SPEC_CLASS(pclass)      (G_TYPE_CHECK_CLASS_CAST ((pclass), G_TYPE_PARAM, GParamSpecClass))
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_CLASS:
 | |
|  * @pclass: a #GParamSpecClass
 | |
|  * 
 | |
|  * Checks whether @pclass "is a" valid #GParamSpecClass structure of type 
 | |
|  * %G_TYPE_PARAM or derived.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_CLASS(pclass)   (G_TYPE_CHECK_CLASS_TYPE ((pclass), G_TYPE_PARAM))
 | |
| /**
 | |
|  * G_PARAM_SPEC_GET_CLASS:
 | |
|  * @pspec: a valid #GParamSpec
 | |
|  * 
 | |
|  * Retrieves the #GParamSpecClass of a #GParamSpec.
 | |
|  */
 | |
| #define G_PARAM_SPEC_GET_CLASS(pspec)	(G_TYPE_INSTANCE_GET_CLASS ((pspec), G_TYPE_PARAM, GParamSpecClass))
 | |
| 
 | |
| 
 | |
| /* --- convenience macros --- */
 | |
| /**
 | |
|  * G_PARAM_SPEC_TYPE:
 | |
|  * @pspec: a valid #GParamSpec
 | |
|  * 
 | |
|  * Retrieves the #GType of this @pspec.
 | |
|  */
 | |
| #define G_PARAM_SPEC_TYPE(pspec)	(G_TYPE_FROM_INSTANCE (pspec))
 | |
| /**
 | |
|  * G_PARAM_SPEC_TYPE_NAME:
 | |
|  * @pspec: a valid #GParamSpec
 | |
|  * 
 | |
|  * Retrieves the #GType name of this @pspec.
 | |
|  */
 | |
| #define G_PARAM_SPEC_TYPE_NAME(pspec)	(g_type_name (G_PARAM_SPEC_TYPE (pspec)))
 | |
| /**
 | |
|  * G_PARAM_SPEC_VALUE_TYPE:
 | |
|  * @pspec: a valid #GParamSpec
 | |
|  * 
 | |
|  * Retrieves the #GType to initialize a #GValue for this parameter.
 | |
|  */
 | |
| #define	G_PARAM_SPEC_VALUE_TYPE(pspec)	(G_PARAM_SPEC (pspec)->value_type)
 | |
| /**
 | |
|  * G_VALUE_HOLDS_PARAM:
 | |
|  * @value: a valid #GValue structure
 | |
|  * 
 | |
|  * Checks whether the given #GValue can hold values derived from type %G_TYPE_PARAM.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_PARAM(value)	(G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_PARAM))
 | |
|        
 | |
| 
 | |
| /* --- flags --- */
 | |
| /**
 | |
|  * GParamFlags:
 | |
|  * @G_PARAM_READABLE: the parameter is readable
 | |
|  * @G_PARAM_WRITABLE: the parameter is writable
 | |
|  * @G_PARAM_READWRITE: alias for %G_PARAM_READABLE | %G_PARAM_WRITABLE
 | |
|  * @G_PARAM_CONSTRUCT: the parameter will be set upon object construction
 | |
|  * @G_PARAM_CONSTRUCT_ONLY: the parameter can only be set upon object construction
 | |
|  * @G_PARAM_LAX_VALIDATION: upon parameter conversion (see g_param_value_convert())
 | |
|  *  strict validation is not required
 | |
|  * @G_PARAM_STATIC_NAME: the string used as name when constructing the 
 | |
|  *  parameter is guaranteed to remain valid and
 | |
|  *  unmodified for the lifetime of the parameter. 
 | |
|  *  Since 2.8
 | |
|  * @G_PARAM_STATIC_NICK: the string used as nick when constructing the
 | |
|  *  parameter is guaranteed to remain valid and
 | |
|  *  unmmodified for the lifetime of the parameter.
 | |
|  *  Since 2.8
 | |
|  * @G_PARAM_STATIC_BLURB: the string used as blurb when constructing the 
 | |
|  *  parameter is guaranteed to remain valid and 
 | |
|  *  unmodified for the lifetime of the parameter. 
 | |
|  *  Since 2.8
 | |
|  * @G_PARAM_EXPLICIT_NOTIFY: calls to g_object_set_property() for this
 | |
|  *   property will not automatically result in a "notify" signal being
 | |
|  *   emitted: the implementation must call g_object_notify() themselves
 | |
|  *   in case the property actually changes.  Since: 2.42.
 | |
|  * @G_PARAM_PRIVATE: internal
 | |
|  * @G_PARAM_DEPRECATED: the parameter is deprecated and will be removed
 | |
|  *  in a future version. A warning will be generated if it is used
 | |
|  *  while running with G_ENABLE_DIAGNOSTIC=1.
 | |
|  *  Since 2.26
 | |
|  * 
 | |
|  * Through the #GParamFlags flag values, certain aspects of parameters
 | |
|  * can be configured. See also #G_PARAM_STATIC_STRINGS.
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_PARAM_READABLE            = 1 << 0,
 | |
|   G_PARAM_WRITABLE            = 1 << 1,
 | |
|   G_PARAM_READWRITE           = (G_PARAM_READABLE | G_PARAM_WRITABLE),
 | |
|   G_PARAM_CONSTRUCT	      = 1 << 2,
 | |
|   G_PARAM_CONSTRUCT_ONLY      = 1 << 3,
 | |
|   G_PARAM_LAX_VALIDATION      = 1 << 4,
 | |
|   G_PARAM_STATIC_NAME	      = 1 << 5,
 | |
| #ifndef G_DISABLE_DEPRECATED
 | |
|   G_PARAM_PRIVATE	      = G_PARAM_STATIC_NAME,
 | |
| #endif
 | |
|   G_PARAM_STATIC_NICK	      = 1 << 6,
 | |
|   G_PARAM_STATIC_BLURB	      = 1 << 7,
 | |
|   /* User defined flags go here */
 | |
|   G_PARAM_EXPLICIT_NOTIFY     = 1 << 30,
 | |
|   /* Avoid warning with -Wpedantic for gcc6 */
 | |
|   G_PARAM_DEPRECATED          = (gint)(1u << 31)
 | |
| } GParamFlags;
 | |
| 
 | |
| /**
 | |
|  * G_PARAM_STATIC_STRINGS:
 | |
|  * 
 | |
|  * #GParamFlags value alias for %G_PARAM_STATIC_NAME | %G_PARAM_STATIC_NICK | %G_PARAM_STATIC_BLURB.
 | |
|  * 
 | |
|  * Since 2.13.0
 | |
|  */
 | |
| #define	G_PARAM_STATIC_STRINGS (G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)
 | |
| /* bits in the range 0xffffff00 are reserved for 3rd party usage */
 | |
| /**
 | |
|  * G_PARAM_MASK:
 | |
|  * 
 | |
|  * Mask containing the bits of #GParamSpec.flags which are reserved for GLib.
 | |
|  */
 | |
| #define	G_PARAM_MASK		(0x000000ff)
 | |
| /**
 | |
|  * G_PARAM_USER_SHIFT:
 | |
|  * 
 | |
|  * Minimum shift count to be used for user defined flags, to be stored in
 | |
|  * #GParamSpec.flags. The maximum allowed is 10.
 | |
|  */
 | |
| #define	G_PARAM_USER_SHIFT	(8)
 | |
| 
 | |
| /* --- typedefs & structures --- */
 | |
| typedef struct _GParamSpec      GParamSpec;
 | |
| typedef struct _GParamSpecClass GParamSpecClass;
 | |
| typedef struct _GParameter	GParameter;
 | |
| typedef struct _GParamSpecPool  GParamSpecPool;
 | |
| /**
 | |
|  * GParamSpec: (ref-func g_param_spec_ref_sink) (unref-func g_param_spec_uref) (set-value-func g_value_set_param) (get-value-func g_value_get_param)
 | |
|  * @g_type_instance: private #GTypeInstance portion
 | |
|  * @name: name of this parameter: always an interned string
 | |
|  * @flags: #GParamFlags flags for this parameter
 | |
|  * @value_type: the #GValue type for this parameter
 | |
|  * @owner_type: #GType type that uses (introduces) this parameter
 | |
|  * 
 | |
|  * All other fields of the GParamSpec struct are private and
 | |
|  * should not be used directly.
 | |
|  */
 | |
| struct _GParamSpec
 | |
| {
 | |
|   GTypeInstance  g_type_instance;
 | |
| 
 | |
|   const gchar   *name;          /* interned string */
 | |
|   GParamFlags    flags;
 | |
|   GType		 value_type;
 | |
|   GType		 owner_type;	/* class or interface using this property */
 | |
| 
 | |
|   /*< private >*/
 | |
|   gchar         *_nick;
 | |
|   gchar         *_blurb;
 | |
|   GData		*qdata;
 | |
|   guint          ref_count;
 | |
|   guint		 param_id;	/* sort-criteria */
 | |
| };
 | |
| /**
 | |
|  * GParamSpecClass:
 | |
|  * @g_type_class: the parent class
 | |
|  * @value_type: the #GValue type for this parameter
 | |
|  * @finalize: The instance finalization function (optional), should chain 
 | |
|  *  up to the finalize method of the parent class.
 | |
|  * @value_set_default: Resets a @value to the default value for this type
 | |
|  *  (recommended, the default is g_value_reset()), see 
 | |
|  *  g_param_value_set_default().
 | |
|  * @value_validate: Ensures that the contents of @value comply with the 
 | |
|  *  specifications set out by this type (optional), see 
 | |
|  *  g_param_value_validate().
 | |
|  * @values_cmp: Compares @value1 with @value2 according to this type
 | |
|  *  (recommended, the default is memcmp()), see g_param_values_cmp().
 | |
|  * 
 | |
|  * The class structure for the GParamSpec type.
 | |
|  * Normally, GParamSpec classes are filled by
 | |
|  * g_param_type_register_static().
 | |
|  */
 | |
| struct _GParamSpecClass
 | |
| {
 | |
|   GTypeClass      g_type_class;
 | |
| 
 | |
|   GType		  value_type;
 | |
| 
 | |
|   void	        (*finalize)		(GParamSpec   *pspec);
 | |
| 
 | |
|   /* GParam methods */
 | |
|   void          (*value_set_default)    (GParamSpec   *pspec,
 | |
| 					 GValue       *value);
 | |
|   gboolean      (*value_validate)       (GParamSpec   *pspec,
 | |
| 					 GValue       *value);
 | |
|   gint          (*values_cmp)           (GParamSpec   *pspec,
 | |
| 					 const GValue *value1,
 | |
| 					 const GValue *value2);
 | |
|   /*< private >*/
 | |
|   gpointer	  dummy[4];
 | |
| };
 | |
| /**
 | |
|  * GParameter:
 | |
|  * @name: the parameter name
 | |
|  * @value: the parameter value
 | |
|  * 
 | |
|  * The GParameter struct is an auxiliary structure used
 | |
|  * to hand parameter name/value pairs to g_object_newv().
 | |
|  */
 | |
| struct _GParameter /* auxiliary structure for _setv() variants */
 | |
| {
 | |
|   const gchar *name;
 | |
|   GValue       value;
 | |
| };
 | |
| 
 | |
| 
 | |
| /* --- prototypes --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_ref		(GParamSpec    *pspec);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		g_param_spec_unref		(GParamSpec    *pspec);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		g_param_spec_sink		(GParamSpec    *pspec);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_ref_sink   	(GParamSpec    *pspec);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer        g_param_spec_get_qdata		(GParamSpec    *pspec,
 | |
| 						 GQuark         quark);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_param_spec_set_qdata		(GParamSpec    *pspec,
 | |
| 						 GQuark         quark,
 | |
| 						 gpointer       data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_param_spec_set_qdata_full	(GParamSpec    *pspec,
 | |
| 						 GQuark         quark,
 | |
| 						 gpointer       data,
 | |
| 						 GDestroyNotify destroy);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer        g_param_spec_steal_qdata	(GParamSpec    *pspec,
 | |
| 						 GQuark         quark);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*     g_param_spec_get_redirect_target (GParamSpec   *pspec);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		g_param_value_set_default	(GParamSpec    *pspec,
 | |
| 						 GValue	       *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	g_param_value_defaults		(GParamSpec    *pspec,
 | |
| 						 GValue	       *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	g_param_value_validate		(GParamSpec    *pspec,
 | |
| 						 GValue	       *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	g_param_value_convert		(GParamSpec    *pspec,
 | |
| 						 const GValue  *src_value,
 | |
| 						 GValue	       *dest_value,
 | |
| 						 gboolean	strict_validation);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint		g_param_values_cmp		(GParamSpec    *pspec,
 | |
| 						 const GValue  *value1,
 | |
| 						 const GValue  *value2);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *   g_param_spec_get_name           (GParamSpec    *pspec);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *   g_param_spec_get_nick           (GParamSpec    *pspec);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *   g_param_spec_get_blurb          (GParamSpec    *pspec);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_value_set_param               (GValue	       *value,
 | |
| 						 GParamSpec    *param);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*     g_value_get_param               (const GValue  *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*     g_value_dup_param               (const GValue  *value);
 | |
| 
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void           g_value_take_param               (GValue        *value,
 | |
| 					         GParamSpec    *param);
 | |
| GLIB_DEPRECATED_FOR(g_value_take_param)
 | |
| void           g_value_set_param_take_ownership (GValue        *value,
 | |
|                                                  GParamSpec    *param);
 | |
| GLIB_AVAILABLE_IN_2_36
 | |
| const GValue *  g_param_spec_get_default_value  (GParamSpec    *pspec);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_46
 | |
| GQuark          g_param_spec_get_name_quark     (GParamSpec    *pspec);
 | |
| 
 | |
| /* --- convenience functions --- */
 | |
| typedef struct _GParamSpecTypeInfo GParamSpecTypeInfo;
 | |
| /**
 | |
|  * GParamSpecTypeInfo:
 | |
|  * @instance_size: Size of the instance (object) structure.
 | |
|  * @n_preallocs: Prior to GLib 2.10, it specified the number of pre-allocated (cached) instances to reserve memory for (0 indicates no caching). Since GLib 2.10, it is ignored, since instances are allocated with the [slice allocator][glib-Memory-Slices] now.
 | |
|  * @instance_init: Location of the instance initialization function (optional).
 | |
|  * @value_type: The #GType of values conforming to this #GParamSpec
 | |
|  * @finalize: The instance finalization function (optional).
 | |
|  * @value_set_default: Resets a @value to the default value for @pspec 
 | |
|  *  (recommended, the default is g_value_reset()), see 
 | |
|  *  g_param_value_set_default().
 | |
|  * @value_validate: Ensures that the contents of @value comply with the 
 | |
|  *  specifications set out by @pspec (optional), see 
 | |
|  *  g_param_value_validate().
 | |
|  * @values_cmp: Compares @value1 with @value2 according to @pspec 
 | |
|  *  (recommended, the default is memcmp()), see g_param_values_cmp().
 | |
|  * 
 | |
|  * This structure is used to provide the type system with the information
 | |
|  * required to initialize and destruct (finalize) a parameter's class and
 | |
|  * instances thereof.
 | |
|  * The initialized structure is passed to the g_param_type_register_static() 
 | |
|  * The type system will perform a deep copy of this structure, so its memory 
 | |
|  * does not need to be persistent across invocation of 
 | |
|  * g_param_type_register_static().
 | |
|  */
 | |
| struct _GParamSpecTypeInfo
 | |
| {
 | |
|   /* type system portion */
 | |
|   guint16         instance_size;                               /* obligatory */
 | |
|   guint16         n_preallocs;                                 /* optional */
 | |
|   void		(*instance_init)	(GParamSpec   *pspec); /* optional */
 | |
| 
 | |
|   /* class portion */
 | |
|   GType           value_type;				       /* obligatory */
 | |
|   void          (*finalize)             (GParamSpec   *pspec); /* optional */
 | |
|   void          (*value_set_default)    (GParamSpec   *pspec,  /* recommended */
 | |
| 					 GValue       *value);
 | |
|   gboolean      (*value_validate)       (GParamSpec   *pspec,  /* optional */
 | |
| 					 GValue       *value);
 | |
|   gint          (*values_cmp)           (GParamSpec   *pspec,  /* recommended */
 | |
| 					 const GValue *value1,
 | |
| 					 const GValue *value2);
 | |
| };
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType	g_param_type_register_static	(const gchar		  *name,
 | |
| 					 const GParamSpecTypeInfo *pspec_info);
 | |
| 
 | |
| /* For registering builting types */
 | |
| GType  _g_param_type_register_static_constant (const gchar              *name,
 | |
| 					       const GParamSpecTypeInfo *pspec_info,
 | |
| 					       GType                     opt_type);
 | |
| 
 | |
| 
 | |
| /* --- protected --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer	g_param_spec_internal		(GType	        param_type,
 | |
| 						 const gchar   *name,
 | |
| 						 const gchar   *nick,
 | |
| 						 const gchar   *blurb,
 | |
| 						 GParamFlags    flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpecPool* g_param_spec_pool_new		(gboolean	type_prefixing);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		g_param_spec_pool_insert	(GParamSpecPool	*pool,
 | |
| 						 GParamSpec	*pspec,
 | |
| 						 GType		 owner_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		g_param_spec_pool_remove	(GParamSpecPool	*pool,
 | |
| 						 GParamSpec	*pspec);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_pool_lookup	(GParamSpecPool	*pool,
 | |
| 						 const gchar	*param_name,
 | |
| 						 GType		 owner_type,
 | |
| 						 gboolean	 walk_ancestors);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GList*		g_param_spec_pool_list_owned	(GParamSpecPool	*pool,
 | |
| 						 GType		 owner_type);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec**	g_param_spec_pool_list		(GParamSpecPool	*pool,
 | |
| 						 GType		 owner_type,
 | |
| 						 guint		*n_pspecs_p);
 | |
| 
 | |
| 
 | |
| /* contracts:
 | |
|  *
 | |
|  * gboolean value_validate (GParamSpec *pspec,
 | |
|  *                          GValue     *value):
 | |
|  *	modify value contents in the least destructive way, so
 | |
|  *	that it complies with pspec's requirements (i.e.
 | |
|  *	according to minimum/maximum ranges etc...). return
 | |
|  *	whether modification was necessary.
 | |
|  *
 | |
|  * gint values_cmp (GParamSpec   *pspec,
 | |
|  *                  const GValue *value1,
 | |
|  *                  const GValue *value2):
 | |
|  *	return value1 - value2, i.e. (-1) if value1 < value2,
 | |
|  *	(+1) if value1 > value2, and (0) otherwise (equality)
 | |
|  */
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_PARAM_H__ */
 | |
| /* GObject - GLib Type, Object, Parameter and Signal Library
 | |
|  * Copyright (C) 2000-2001 Red Hat, Inc.
 | |
|  * Copyright (C) 2005 Imendio AB
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General
 | |
|  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| #ifndef __G_CLOSURE_H__
 | |
| #define __G_CLOSURE_H__
 | |
| 
 | |
| #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
 | |
| #error "Only <glib-object.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* --- defines --- */
 | |
| /**
 | |
|  * G_CLOSURE_NEEDS_MARSHAL:
 | |
|  * @closure: a #GClosure
 | |
|  * 
 | |
|  * Check if the closure still needs a marshaller. See g_closure_set_marshal().
 | |
|  *
 | |
|  * Returns: %TRUE if a #GClosureMarshal marshaller has not yet been set on 
 | |
|  * @closure.
 | |
|  */
 | |
| #define	G_CLOSURE_NEEDS_MARSHAL(closure) (((GClosure*) (closure))->marshal == NULL)
 | |
| /**
 | |
|  * G_CLOSURE_N_NOTIFIERS:
 | |
|  * @cl: a #GClosure
 | |
|  * 
 | |
|  * Get the total number of notifiers connected with the closure @cl. 
 | |
|  * The count includes the meta marshaller, the finalize and invalidate notifiers 
 | |
|  * and the marshal guards. Note that each guard counts as two notifiers. 
 | |
|  * See g_closure_set_meta_marshal(), g_closure_add_finalize_notifier(),
 | |
|  * g_closure_add_invalidate_notifier() and g_closure_add_marshal_guards().
 | |
|  *
 | |
|  * Returns: number of notifiers
 | |
|  */
 | |
| #define	G_CLOSURE_N_NOTIFIERS(cl)	 (((cl)->n_guards << 1L) + \
 | |
|                                           (cl)->n_fnotifiers + (cl)->n_inotifiers)
 | |
| /**
 | |
|  * G_CCLOSURE_SWAP_DATA:
 | |
|  * @cclosure: a #GCClosure
 | |
|  * 
 | |
|  * Checks whether the user data of the #GCClosure should be passed as the
 | |
|  * first parameter to the callback. See g_cclosure_new_swap().
 | |
|  *
 | |
|  * Returns: %TRUE if data has to be swapped.
 | |
|  */
 | |
| #define	G_CCLOSURE_SWAP_DATA(cclosure)	 (((GClosure*) (cclosure))->derivative_flag)
 | |
| /**
 | |
|  * G_CALLBACK:
 | |
|  * @f: a function pointer.
 | |
|  * 
 | |
|  * Cast a function pointer to a #GCallback.
 | |
|  */
 | |
| #define	G_CALLBACK(f)			 ((GCallback) (f))
 | |
| 
 | |
| 
 | |
| /* -- typedefs --- */
 | |
| typedef struct _GClosure		 GClosure;
 | |
| typedef struct _GClosureNotifyData	 GClosureNotifyData;
 | |
| 
 | |
| /**
 | |
|  * GCallback:
 | |
|  * 
 | |
|  * The type used for callback functions in structure definitions and function 
 | |
|  * signatures. This doesn't mean that all callback functions must take no 
 | |
|  * parameters and return void. The required signature of a callback function 
 | |
|  * is determined by the context in which is used (e.g. the signal to which it 
 | |
|  * is connected). Use G_CALLBACK() to cast the callback function to a #GCallback. 
 | |
|  */
 | |
| typedef void  (*GCallback)              (void);
 | |
| /**
 | |
|  * GClosureNotify:
 | |
|  * @data: data specified when registering the notification callback
 | |
|  * @closure: the #GClosure on which the notification is emitted
 | |
|  * 
 | |
|  * The type used for the various notification callbacks which can be registered
 | |
|  * on closures.
 | |
|  */
 | |
| typedef void  (*GClosureNotify)		(gpointer	 data,
 | |
| 					 GClosure	*closure);
 | |
| /**
 | |
|  * GClosureMarshal:
 | |
|  * @closure: the #GClosure to which the marshaller belongs
 | |
|  * @return_value: (nullable): a #GValue to store the return
 | |
|  *  value. May be %NULL if the callback of @closure doesn't return a
 | |
|  *  value.
 | |
|  * @n_param_values: the length of the @param_values array
 | |
|  * @param_values: (array length=n_param_values): an array of
 | |
|  *  #GValues holding the arguments on which to invoke the
 | |
|  *  callback of @closure
 | |
|  * @invocation_hint: (nullable): the invocation hint given as the
 | |
|  *  last argument to g_closure_invoke()
 | |
|  * @marshal_data: (nullable): additional data specified when
 | |
|  *  registering the marshaller, see g_closure_set_marshal() and
 | |
|  *  g_closure_set_meta_marshal()
 | |
|  * 
 | |
|  * The type used for marshaller functions.
 | |
|  */
 | |
| typedef void  (*GClosureMarshal)	(GClosure	*closure,
 | |
| 					 GValue         *return_value,
 | |
| 					 guint           n_param_values,
 | |
| 					 const GValue   *param_values,
 | |
| 					 gpointer        invocation_hint,
 | |
| 					 gpointer	 marshal_data);
 | |
| 
 | |
| /**
 | |
|  * GVaClosureMarshal:
 | |
|  * @closure: the #GClosure to which the marshaller belongs
 | |
|  * @return_value: (nullable): a #GValue to store the return
 | |
|  *  value. May be %NULL if the callback of @closure doesn't return a
 | |
|  *  value.
 | |
|  * @instance: (type GObject.TypeInstance): the instance on which the closure is
 | |
|  *  invoked.
 | |
|  * @args: va_list of arguments to be passed to the closure.
 | |
|  * @marshal_data: (nullable): additional data specified when
 | |
|  *  registering the marshaller, see g_closure_set_marshal() and
 | |
|  *  g_closure_set_meta_marshal()
 | |
|  * @n_params: the length of the @param_types array
 | |
|  * @param_types: (array length=n_params): the #GType of each argument from
 | |
|  *  @args.
 | |
|  *
 | |
|  * This is the signature of va_list marshaller functions, an optional
 | |
|  * marshaller that can be used in some situations to avoid
 | |
|  * marshalling the signal argument into GValues.
 | |
|  */
 | |
| typedef void (* GVaClosureMarshal) (GClosure *closure,
 | |
| 				    GValue   *return_value,
 | |
| 				    gpointer  instance,
 | |
| 				    va_list   args,
 | |
| 				    gpointer  marshal_data,
 | |
| 				    int       n_params,
 | |
| 				    GType    *param_types);
 | |
| 
 | |
| /**
 | |
|  * GCClosure:
 | |
|  * @closure: the #GClosure
 | |
|  * @callback: the callback function
 | |
|  * 
 | |
|  * A #GCClosure is a specialization of #GClosure for C function callbacks.
 | |
|  */
 | |
| typedef struct _GCClosure		 GCClosure;
 | |
| 
 | |
| 
 | |
| /* --- structures --- */
 | |
| struct _GClosureNotifyData
 | |
| {
 | |
|   gpointer       data;
 | |
|   GClosureNotify notify;
 | |
| };
 | |
| /**
 | |
|  * GClosure:
 | |
|  * @in_marshal: Indicates whether the closure is currently being invoked with 
 | |
|  *  g_closure_invoke()
 | |
|  * @is_invalid: Indicates whether the closure has been invalidated by 
 | |
|  *  g_closure_invalidate()
 | |
|  * 
 | |
|  * A #GClosure represents a callback supplied by the programmer.
 | |
|  */
 | |
| struct _GClosure
 | |
| {
 | |
|   /*< private >*/
 | |
|   volatile      	guint	 ref_count : 15;
 | |
|   /* meta_marshal is not used anymore but must be zero for historical reasons
 | |
|      as it was exposed in the G_CLOSURE_N_NOTIFIERS macro */
 | |
|   volatile       	guint	 meta_marshal_nouse : 1;
 | |
|   volatile       	guint	 n_guards : 1;
 | |
|   volatile       	guint	 n_fnotifiers : 2;	/* finalization notifiers */
 | |
|   volatile       	guint	 n_inotifiers : 8;	/* invalidation notifiers */
 | |
|   volatile       	guint	 in_inotify : 1;
 | |
|   volatile       	guint	 floating : 1;
 | |
|   /*< protected >*/
 | |
|   volatile         	guint	 derivative_flag : 1;
 | |
|   /*< public >*/
 | |
|   volatile       	guint	 in_marshal : 1;
 | |
|   volatile       	guint	 is_invalid : 1;
 | |
| 
 | |
|   /*< private >*/	void   (*marshal)  (GClosure       *closure,
 | |
| 					    GValue /*out*/ *return_value,
 | |
| 					    guint           n_param_values,
 | |
| 					    const GValue   *param_values,
 | |
| 					    gpointer        invocation_hint,
 | |
| 					    gpointer	    marshal_data);
 | |
|   /*< protected >*/	gpointer data;
 | |
| 
 | |
|   /*< private >*/	GClosureNotifyData *notifiers;
 | |
| 
 | |
|   /* invariants/constrains:
 | |
|    * - ->marshal and ->data are _invalid_ as soon as ->is_invalid==TRUE
 | |
|    * - invocation of all inotifiers occours prior to fnotifiers
 | |
|    * - order of inotifiers is random
 | |
|    *   inotifiers may _not_ free/invalidate parameter values (e.g. ->data)
 | |
|    * - order of fnotifiers is random
 | |
|    * - each notifier may only be removed before or during its invocation
 | |
|    * - reference counting may only happen prior to fnotify invocation
 | |
|    *   (in that sense, fnotifiers are really finalization handlers)
 | |
|    */
 | |
| };
 | |
| /* closure for C function calls, callback() is the user function
 | |
|  */
 | |
| struct _GCClosure
 | |
| {
 | |
|   GClosure	closure;
 | |
|   gpointer	callback;
 | |
| };
 | |
| 
 | |
| 
 | |
| /* --- prototypes --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GClosure* g_cclosure_new			(GCallback	callback_func,
 | |
| 						 gpointer	user_data,
 | |
| 						 GClosureNotify destroy_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GClosure* g_cclosure_new_swap			(GCallback	callback_func,
 | |
| 						 gpointer	user_data,
 | |
| 						 GClosureNotify destroy_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GClosure* g_signal_type_cclosure_new		(GType          itype,
 | |
| 						 guint          struct_offset);
 | |
| 
 | |
| 
 | |
| /* --- prototypes --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GClosure* g_closure_ref				(GClosure	*closure);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	  g_closure_sink			(GClosure	*closure);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	  g_closure_unref			(GClosure	*closure);
 | |
| /* intimidating */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GClosure* g_closure_new_simple			(guint		 sizeof_closure,
 | |
| 						 gpointer	 data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	  g_closure_add_finalize_notifier	(GClosure       *closure,
 | |
| 						 gpointer	 notify_data,
 | |
| 						 GClosureNotify	 notify_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	  g_closure_remove_finalize_notifier	(GClosure       *closure,
 | |
| 						 gpointer	 notify_data,
 | |
| 						 GClosureNotify	 notify_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	  g_closure_add_invalidate_notifier	(GClosure       *closure,
 | |
| 						 gpointer	 notify_data,
 | |
| 						 GClosureNotify	 notify_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	  g_closure_remove_invalidate_notifier	(GClosure       *closure,
 | |
| 						 gpointer	 notify_data,
 | |
| 						 GClosureNotify	 notify_func);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	  g_closure_add_marshal_guards		(GClosure	*closure,
 | |
| 						 gpointer        pre_marshal_data,
 | |
| 						 GClosureNotify	 pre_marshal_notify,
 | |
| 						 gpointer        post_marshal_data,
 | |
| 						 GClosureNotify	 post_marshal_notify);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	  g_closure_set_marshal			(GClosure	*closure,
 | |
| 						 GClosureMarshal marshal);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	  g_closure_set_meta_marshal		(GClosure       *closure,
 | |
| 						 gpointer	 marshal_data,
 | |
| 						 GClosureMarshal meta_marshal);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	  g_closure_invalidate			(GClosure	*closure);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	  g_closure_invoke			(GClosure 	*closure,
 | |
| 						 GValue	/*out*/	*return_value,
 | |
| 						 guint		 n_param_values,
 | |
| 						 const GValue	*param_values,
 | |
| 						 gpointer	 invocation_hint);
 | |
| 
 | |
| /* FIXME:
 | |
|    OK:  data_object::destroy		-> closure_invalidate();
 | |
|    MIS:	closure_invalidate()		-> disconnect(closure);
 | |
|    MIS:	disconnect(closure)		-> (unlink) closure_unref();
 | |
|    OK:	closure_finalize()		-> g_free (data_string);
 | |
| 
 | |
|    random remarks:
 | |
|    - need marshaller repo with decent aliasing to base types
 | |
|    - provide marshaller collection, virtually covering anything out there
 | |
| */
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_generic (GClosure     *closure,
 | |
|                                  GValue       *return_gvalue,
 | |
|                                  guint         n_param_values,
 | |
|                                  const GValue *param_values,
 | |
|                                  gpointer      invocation_hint,
 | |
|                                  gpointer      marshal_data);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_generic_va (GClosure *closure,
 | |
| 				    GValue   *return_value,
 | |
| 				    gpointer  instance,
 | |
| 				    va_list   args_list,
 | |
| 				    gpointer  marshal_data,
 | |
| 				    int       n_params,
 | |
| 				    GType    *param_types);
 | |
| 
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_CLOSURE_H__ */
 | |
| /* GObject - GLib Type, Object, Parameter and Signal Library
 | |
|  * Copyright (C) 2000-2001 Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General
 | |
|  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| #ifndef __G_SIGNAL_H__
 | |
| #define __G_SIGNAL_H__
 | |
| 
 | |
| #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
 | |
| #error "Only <glib-object.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| /* Note: This file is no longer generated.  See the comment in gmarshal.list */
 | |
| #ifndef __G_MARSHAL_H__
 | |
| #define __G_MARSHAL_H__
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* VOID:VOID (./gmarshal.list:6) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__VOID (GClosure     *closure,
 | |
|                                     GValue       *return_value,
 | |
|                                     guint         n_param_values,
 | |
|                                     const GValue *param_values,
 | |
|                                     gpointer      invocation_hint,
 | |
|                                     gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__VOIDv (GClosure *closure,
 | |
|                                      GValue   *return_value,
 | |
|                                      gpointer  instance,
 | |
|                                      va_list   args,
 | |
|                                      gpointer  marshal_data,
 | |
|                                      int       n_params,
 | |
|                                      GType    *param_types);
 | |
| 
 | |
| /* VOID:BOOLEAN (./gmarshal.list:7) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__BOOLEAN (GClosure     *closure,
 | |
|                                        GValue       *return_value,
 | |
|                                        guint         n_param_values,
 | |
|                                        const GValue *param_values,
 | |
|                                        gpointer      invocation_hint,
 | |
|                                        gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__BOOLEANv (GClosure *closure,
 | |
|                                         GValue   *return_value,
 | |
|                                         gpointer  instance,
 | |
|                                         va_list   args,
 | |
|                                         gpointer  marshal_data,
 | |
|                                         int       n_params,
 | |
|                                         GType    *param_types);
 | |
| 
 | |
| /* VOID:CHAR (./gmarshal.list:8) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__CHAR (GClosure     *closure,
 | |
|                                     GValue       *return_value,
 | |
|                                     guint         n_param_values,
 | |
|                                     const GValue *param_values,
 | |
|                                     gpointer      invocation_hint,
 | |
|                                     gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__CHARv (GClosure *closure,
 | |
|                                      GValue   *return_value,
 | |
|                                      gpointer  instance,
 | |
|                                      va_list   args,
 | |
|                                      gpointer  marshal_data,
 | |
|                                      int       n_params,
 | |
|                                      GType    *param_types);
 | |
| 
 | |
| /* VOID:UCHAR (./gmarshal.list:9) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__UCHAR (GClosure     *closure,
 | |
|                                      GValue       *return_value,
 | |
|                                      guint         n_param_values,
 | |
|                                      const GValue *param_values,
 | |
|                                      gpointer      invocation_hint,
 | |
|                                      gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__UCHARv (GClosure *closure,
 | |
|                                       GValue   *return_value,
 | |
|                                       gpointer  instance,
 | |
|                                       va_list   args,
 | |
|                                       gpointer  marshal_data,
 | |
|                                       int       n_params,
 | |
|                                       GType    *param_types);
 | |
| 
 | |
| /* VOID:INT (./gmarshal.list:10) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__INT (GClosure     *closure,
 | |
|                                    GValue       *return_value,
 | |
|                                    guint         n_param_values,
 | |
|                                    const GValue *param_values,
 | |
|                                    gpointer      invocation_hint,
 | |
|                                    gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__INTv (GClosure *closure,
 | |
|                                     GValue   *return_value,
 | |
|                                     gpointer  instance,
 | |
|                                     va_list   args,
 | |
|                                     gpointer  marshal_data,
 | |
|                                     int       n_params,
 | |
|                                     GType    *param_types);
 | |
| 
 | |
| /* VOID:UINT (./gmarshal.list:11) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__UINT (GClosure     *closure,
 | |
|                                     GValue       *return_value,
 | |
|                                     guint         n_param_values,
 | |
|                                     const GValue *param_values,
 | |
|                                     gpointer      invocation_hint,
 | |
|                                     gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__UINTv (GClosure *closure,
 | |
|                                      GValue   *return_value,
 | |
|                                      gpointer  instance,
 | |
|                                      va_list   args,
 | |
|                                      gpointer  marshal_data,
 | |
|                                      int       n_params,
 | |
|                                      GType    *param_types);
 | |
| 
 | |
| /* VOID:LONG (./gmarshal.list:12) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__LONG (GClosure     *closure,
 | |
|                                     GValue       *return_value,
 | |
|                                     guint         n_param_values,
 | |
|                                     const GValue *param_values,
 | |
|                                     gpointer      invocation_hint,
 | |
|                                     gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__LONGv (GClosure *closure,
 | |
|                                      GValue   *return_value,
 | |
|                                      gpointer  instance,
 | |
|                                      va_list   args,
 | |
|                                      gpointer  marshal_data,
 | |
|                                      int       n_params,
 | |
|                                      GType    *param_types);
 | |
| 
 | |
| /* VOID:ULONG (./gmarshal.list:13) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__ULONG (GClosure     *closure,
 | |
|                                      GValue       *return_value,
 | |
|                                      guint         n_param_values,
 | |
|                                      const GValue *param_values,
 | |
|                                      gpointer      invocation_hint,
 | |
|                                      gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__ULONGv (GClosure *closure,
 | |
|                                       GValue   *return_value,
 | |
|                                       gpointer  instance,
 | |
|                                       va_list   args,
 | |
|                                       gpointer  marshal_data,
 | |
|                                       int       n_params,
 | |
|                                       GType    *param_types);
 | |
| 
 | |
| /* VOID:ENUM (./gmarshal.list:14) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__ENUM (GClosure     *closure,
 | |
|                                     GValue       *return_value,
 | |
|                                     guint         n_param_values,
 | |
|                                     const GValue *param_values,
 | |
|                                     gpointer      invocation_hint,
 | |
|                                     gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__ENUMv (GClosure *closure,
 | |
|                                      GValue   *return_value,
 | |
|                                      gpointer  instance,
 | |
|                                      va_list   args,
 | |
|                                      gpointer  marshal_data,
 | |
|                                      int       n_params,
 | |
|                                      GType    *param_types);
 | |
| 
 | |
| /* VOID:FLAGS (./gmarshal.list:15) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__FLAGS (GClosure     *closure,
 | |
|                                      GValue       *return_value,
 | |
|                                      guint         n_param_values,
 | |
|                                      const GValue *param_values,
 | |
|                                      gpointer      invocation_hint,
 | |
|                                      gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__FLAGSv (GClosure *closure,
 | |
|                                       GValue   *return_value,
 | |
|                                       gpointer  instance,
 | |
|                                       va_list   args,
 | |
|                                       gpointer  marshal_data,
 | |
|                                       int       n_params,
 | |
|                                       GType    *param_types);
 | |
| 
 | |
| /* VOID:FLOAT (./gmarshal.list:16) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__FLOAT (GClosure     *closure,
 | |
|                                      GValue       *return_value,
 | |
|                                      guint         n_param_values,
 | |
|                                      const GValue *param_values,
 | |
|                                      gpointer      invocation_hint,
 | |
|                                      gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__FLOATv (GClosure *closure,
 | |
|                                       GValue   *return_value,
 | |
|                                       gpointer  instance,
 | |
|                                       va_list   args,
 | |
|                                       gpointer  marshal_data,
 | |
|                                       int       n_params,
 | |
|                                       GType    *param_types);
 | |
| 
 | |
| /* VOID:DOUBLE (./gmarshal.list:17) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__DOUBLE (GClosure     *closure,
 | |
|                                       GValue       *return_value,
 | |
|                                       guint         n_param_values,
 | |
|                                       const GValue *param_values,
 | |
|                                       gpointer      invocation_hint,
 | |
|                                       gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__DOUBLEv (GClosure *closure,
 | |
|                                        GValue   *return_value,
 | |
|                                        gpointer  instance,
 | |
|                                        va_list   args,
 | |
|                                        gpointer  marshal_data,
 | |
|                                        int       n_params,
 | |
|                                        GType    *param_types);
 | |
| 
 | |
| /* VOID:STRING (./gmarshal.list:18) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__STRING (GClosure     *closure,
 | |
|                                       GValue       *return_value,
 | |
|                                       guint         n_param_values,
 | |
|                                       const GValue *param_values,
 | |
|                                       gpointer      invocation_hint,
 | |
|                                       gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__STRINGv (GClosure *closure,
 | |
|                                        GValue   *return_value,
 | |
|                                        gpointer  instance,
 | |
|                                        va_list   args,
 | |
|                                        gpointer  marshal_data,
 | |
|                                        int       n_params,
 | |
|                                        GType    *param_types);
 | |
| 
 | |
| /* VOID:PARAM (./gmarshal.list:19) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__PARAM (GClosure     *closure,
 | |
|                                      GValue       *return_value,
 | |
|                                      guint         n_param_values,
 | |
|                                      const GValue *param_values,
 | |
|                                      gpointer      invocation_hint,
 | |
|                                      gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__PARAMv (GClosure *closure,
 | |
|                                       GValue   *return_value,
 | |
|                                       gpointer  instance,
 | |
|                                       va_list   args,
 | |
|                                       gpointer  marshal_data,
 | |
|                                       int       n_params,
 | |
|                                       GType    *param_types);
 | |
| 
 | |
| /* VOID:BOXED (./gmarshal.list:20) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__BOXED (GClosure     *closure,
 | |
|                                      GValue       *return_value,
 | |
|                                      guint         n_param_values,
 | |
|                                      const GValue *param_values,
 | |
|                                      gpointer      invocation_hint,
 | |
|                                      gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__BOXEDv (GClosure *closure,
 | |
|                                       GValue   *return_value,
 | |
|                                       gpointer  instance,
 | |
|                                       va_list   args,
 | |
|                                       gpointer  marshal_data,
 | |
|                                       int       n_params,
 | |
|                                       GType    *param_types);
 | |
| 
 | |
| /* VOID:POINTER (./gmarshal.list:21) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__POINTER (GClosure     *closure,
 | |
|                                        GValue       *return_value,
 | |
|                                        guint         n_param_values,
 | |
|                                        const GValue *param_values,
 | |
|                                        gpointer      invocation_hint,
 | |
|                                        gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__POINTERv (GClosure *closure,
 | |
|                                         GValue   *return_value,
 | |
|                                         gpointer  instance,
 | |
|                                         va_list   args,
 | |
|                                         gpointer  marshal_data,
 | |
|                                         int       n_params,
 | |
|                                         GType    *param_types);
 | |
| 
 | |
| /* VOID:OBJECT (./gmarshal.list:22) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__OBJECT (GClosure     *closure,
 | |
|                                       GValue       *return_value,
 | |
|                                       guint         n_param_values,
 | |
|                                       const GValue *param_values,
 | |
|                                       gpointer      invocation_hint,
 | |
|                                       gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__OBJECTv (GClosure *closure,
 | |
|                                        GValue   *return_value,
 | |
|                                        gpointer  instance,
 | |
|                                        va_list   args,
 | |
|                                        gpointer  marshal_data,
 | |
|                                        int       n_params,
 | |
|                                        GType    *param_types);
 | |
| 
 | |
| /* VOID:VARIANT (./gmarshal.list:23) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__VARIANT (GClosure     *closure,
 | |
|                                        GValue       *return_value,
 | |
|                                        guint         n_param_values,
 | |
|                                        const GValue *param_values,
 | |
|                                        gpointer      invocation_hint,
 | |
|                                        gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__VARIANTv (GClosure *closure,
 | |
|                                         GValue   *return_value,
 | |
|                                         gpointer  instance,
 | |
|                                         va_list   args,
 | |
|                                         gpointer  marshal_data,
 | |
|                                         int       n_params,
 | |
|                                         GType    *param_types);
 | |
| 
 | |
| /* VOID:UINT,POINTER (./gmarshal.list:26) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__UINT_POINTER (GClosure     *closure,
 | |
|                                             GValue       *return_value,
 | |
|                                             guint         n_param_values,
 | |
|                                             const GValue *param_values,
 | |
|                                             gpointer      invocation_hint,
 | |
|                                             gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_VOID__UINT_POINTERv (GClosure *closure,
 | |
|                                              GValue   *return_value,
 | |
|                                              gpointer  instance,
 | |
|                                              va_list   args,
 | |
|                                              gpointer  marshal_data,
 | |
|                                              int       n_params,
 | |
|                                              GType    *param_types);
 | |
| 
 | |
| /* BOOL:FLAGS (./gmarshal.list:27) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_BOOLEAN__FLAGS (GClosure     *closure,
 | |
|                                         GValue       *return_value,
 | |
|                                         guint         n_param_values,
 | |
|                                         const GValue *param_values,
 | |
|                                         gpointer      invocation_hint,
 | |
|                                         gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_BOOLEAN__FLAGSv (GClosure *closure,
 | |
|                                          GValue   *return_value,
 | |
|                                          gpointer  instance,
 | |
|                                          va_list   args,
 | |
|                                          gpointer  marshal_data,
 | |
|                                          int       n_params,
 | |
|                                          GType    *param_types);
 | |
| #define g_cclosure_marshal_BOOL__FLAGS	g_cclosure_marshal_BOOLEAN__FLAGS
 | |
| 
 | |
| /* STRING:OBJECT,POINTER (./gmarshal.list:28) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_STRING__OBJECT_POINTER (GClosure     *closure,
 | |
|                                                 GValue       *return_value,
 | |
|                                                 guint         n_param_values,
 | |
|                                                 const GValue *param_values,
 | |
|                                                 gpointer      invocation_hint,
 | |
|                                                 gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_STRING__OBJECT_POINTERv (GClosure *closure,
 | |
|                                                  GValue   *return_value,
 | |
|                                                  gpointer  instance,
 | |
|                                                  va_list   args,
 | |
|                                                  gpointer  marshal_data,
 | |
|                                                  int       n_params,
 | |
|                                                  GType    *param_types);
 | |
| 
 | |
| /* BOOL:BOXED,BOXED (./gmarshal.list:29) */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_BOOLEAN__BOXED_BOXED (GClosure     *closure,
 | |
|                                               GValue       *return_value,
 | |
|                                               guint         n_param_values,
 | |
|                                               const GValue *param_values,
 | |
|                                               gpointer      invocation_hint,
 | |
|                                               gpointer      marshal_data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_cclosure_marshal_BOOLEAN__BOXED_BOXEDv (GClosure *closure,
 | |
|                                                GValue   *return_value,
 | |
|                                                gpointer  instance,
 | |
|                                                va_list   args,
 | |
|                                                gpointer  marshal_data,
 | |
|                                                int       n_params,
 | |
|                                                GType    *param_types);
 | |
| #define g_cclosure_marshal_BOOL__BOXED_BOXED	g_cclosure_marshal_BOOLEAN__BOXED_BOXED
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_MARSHAL_H__ */
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* --- typedefs --- */
 | |
| typedef struct _GSignalQuery		 GSignalQuery;
 | |
| typedef struct _GSignalInvocationHint	 GSignalInvocationHint;
 | |
| /**
 | |
|  * GSignalCMarshaller:
 | |
|  * 
 | |
|  * This is the signature of marshaller functions, required to marshall
 | |
|  * arrays of parameter values to signal emissions into C language callback
 | |
|  * invocations. It is merely an alias to #GClosureMarshal since the #GClosure
 | |
|  * mechanism takes over responsibility of actual function invocation for the
 | |
|  * signal system.
 | |
|  */
 | |
| typedef GClosureMarshal			 GSignalCMarshaller;
 | |
| /**
 | |
|  * GSignalCVaMarshaller:
 | |
|  * 
 | |
|  * This is the signature of va_list marshaller functions, an optional
 | |
|  * marshaller that can be used in some situations to avoid
 | |
|  * marshalling the signal argument into GValues.
 | |
|  */
 | |
| typedef GVaClosureMarshal		 GSignalCVaMarshaller;
 | |
| /**
 | |
|  * GSignalEmissionHook:
 | |
|  * @ihint: Signal invocation hint, see #GSignalInvocationHint.
 | |
|  * @n_param_values: the number of parameters to the function, including
 | |
|  *  the instance on which the signal was emitted.
 | |
|  * @param_values: (array length=n_param_values): the instance on which
 | |
|  *  the signal was emitted, followed by the parameters of the emission.
 | |
|  * @data: user data associated with the hook.
 | |
|  * 
 | |
|  * A simple function pointer to get invoked when the signal is emitted. This 
 | |
|  * allows you to tie a hook to the signal type, so that it will trap all 
 | |
|  * emissions of that signal, from any object.
 | |
|  * 
 | |
|  * You may not attach these to signals created with the #G_SIGNAL_NO_HOOKS flag.
 | |
|  * 
 | |
|  * Returns: whether it wants to stay connected. If it returns %FALSE, the signal 
 | |
|  *  hook is disconnected (and destroyed).
 | |
|  */
 | |
| typedef gboolean (*GSignalEmissionHook) (GSignalInvocationHint *ihint,
 | |
| 					 guint			n_param_values,
 | |
| 					 const GValue	       *param_values,
 | |
| 					 gpointer		data);
 | |
| /**
 | |
|  * GSignalAccumulator:
 | |
|  * @ihint: Signal invocation hint, see #GSignalInvocationHint.
 | |
|  * @return_accu: Accumulator to collect callback return values in, this
 | |
|  *  is the return value of the current signal emission.
 | |
|  * @handler_return: A #GValue holding the return value of the signal handler.
 | |
|  * @data: Callback data that was specified when creating the signal.
 | |
|  * 
 | |
|  * The signal accumulator is a special callback function that can be used
 | |
|  * to collect return values of the various callbacks that are called
 | |
|  * during a signal emission. The signal accumulator is specified at signal
 | |
|  * creation time, if it is left %NULL, no accumulation of callback return
 | |
|  * values is performed. The return value of signal emissions is then the
 | |
|  * value returned by the last callback.
 | |
|  * 
 | |
|  * Returns: The accumulator function returns whether the signal emission
 | |
|  *  should be aborted. Returning %FALSE means to abort the
 | |
|  *  current emission and %TRUE is returned for continuation.
 | |
|  */
 | |
| typedef gboolean (*GSignalAccumulator)	(GSignalInvocationHint *ihint,
 | |
| 					 GValue		       *return_accu,
 | |
| 					 const GValue	       *handler_return,
 | |
| 					 gpointer               data);
 | |
| 
 | |
| 
 | |
| /* --- run, match and connect types --- */
 | |
| /**
 | |
|  * GSignalFlags:
 | |
|  * @G_SIGNAL_RUN_FIRST: Invoke the object method handler in the first emission stage.
 | |
|  * @G_SIGNAL_RUN_LAST: Invoke the object method handler in the third emission stage.
 | |
|  * @G_SIGNAL_RUN_CLEANUP: Invoke the object method handler in the last emission stage.
 | |
|  * @G_SIGNAL_NO_RECURSE: Signals being emitted for an object while currently being in
 | |
|  *  emission for this very object will not be emitted recursively,
 | |
|  *  but instead cause the first emission to be restarted.
 | |
|  * @G_SIGNAL_DETAILED: This signal supports "::detail" appendices to the signal name
 | |
|  *  upon handler connections and emissions.
 | |
|  * @G_SIGNAL_ACTION: Action signals are signals that may freely be emitted on alive
 | |
|  *  objects from user code via g_signal_emit() and friends, without
 | |
|  *  the need of being embedded into extra code that performs pre or
 | |
|  *  post emission adjustments on the object. They can also be thought
 | |
|  *  of as object methods which can be called generically by 
 | |
|  *  third-party code.
 | |
|  * @G_SIGNAL_NO_HOOKS: No emissions hooks are supported for this signal.
 | |
|  * @G_SIGNAL_MUST_COLLECT: Varargs signal emission will always collect the
 | |
|  *   arguments, even if there are no signal handlers connected.  Since 2.30.
 | |
|  * @G_SIGNAL_DEPRECATED: The signal is deprecated and will be removed
 | |
|  *   in a future version. A warning will be generated if it is connected while
 | |
|  *   running with G_ENABLE_DIAGNOSTIC=1.  Since 2.32.
 | |
|  * 
 | |
|  * The signal flags are used to specify a signal's behaviour, the overall
 | |
|  * signal description outlines how especially the RUN flags control the
 | |
|  * stages of a signal emission.
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_SIGNAL_RUN_FIRST	= 1 << 0,
 | |
|   G_SIGNAL_RUN_LAST	= 1 << 1,
 | |
|   G_SIGNAL_RUN_CLEANUP	= 1 << 2,
 | |
|   G_SIGNAL_NO_RECURSE	= 1 << 3,
 | |
|   G_SIGNAL_DETAILED	= 1 << 4,
 | |
|   G_SIGNAL_ACTION	= 1 << 5,
 | |
|   G_SIGNAL_NO_HOOKS	= 1 << 6,
 | |
|   G_SIGNAL_MUST_COLLECT = 1 << 7,
 | |
|   G_SIGNAL_DEPRECATED   = 1 << 8
 | |
| } GSignalFlags;
 | |
| /**
 | |
|  * G_SIGNAL_FLAGS_MASK:
 | |
|  * 
 | |
|  * A mask for all #GSignalFlags bits.
 | |
|  */
 | |
| #define G_SIGNAL_FLAGS_MASK  0x1ff
 | |
| /**
 | |
|  * GConnectFlags:
 | |
|  * @G_CONNECT_AFTER: whether the handler should be called before or after the 
 | |
|  *  default handler of the signal.
 | |
|  * @G_CONNECT_SWAPPED: whether the instance and data should be swapped when
 | |
|  *  calling the handler; see g_signal_connect_swapped() for an example.
 | |
|  * 
 | |
|  * The connection flags are used to specify the behaviour of a signal's 
 | |
|  * connection.
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_CONNECT_AFTER	= 1 << 0,
 | |
|   G_CONNECT_SWAPPED	= 1 << 1
 | |
| } GConnectFlags;
 | |
| /**
 | |
|  * GSignalMatchType:
 | |
|  * @G_SIGNAL_MATCH_ID: The signal id must be equal.
 | |
|  * @G_SIGNAL_MATCH_DETAIL: The signal detail be equal.
 | |
|  * @G_SIGNAL_MATCH_CLOSURE: The closure must be the same.
 | |
|  * @G_SIGNAL_MATCH_FUNC: The C closure callback must be the same.
 | |
|  * @G_SIGNAL_MATCH_DATA: The closure data must be the same.
 | |
|  * @G_SIGNAL_MATCH_UNBLOCKED: Only unblocked signals may matched.
 | |
|  * 
 | |
|  * The match types specify what g_signal_handlers_block_matched(),
 | |
|  * g_signal_handlers_unblock_matched() and g_signal_handlers_disconnect_matched()
 | |
|  * match signals by.
 | |
|  */
 | |
| typedef enum
 | |
| {
 | |
|   G_SIGNAL_MATCH_ID	   = 1 << 0,
 | |
|   G_SIGNAL_MATCH_DETAIL	   = 1 << 1,
 | |
|   G_SIGNAL_MATCH_CLOSURE   = 1 << 2,
 | |
|   G_SIGNAL_MATCH_FUNC	   = 1 << 3,
 | |
|   G_SIGNAL_MATCH_DATA	   = 1 << 4,
 | |
|   G_SIGNAL_MATCH_UNBLOCKED = 1 << 5
 | |
| } GSignalMatchType;
 | |
| /**
 | |
|  * G_SIGNAL_MATCH_MASK:
 | |
|  * 
 | |
|  * A mask for all #GSignalMatchType bits.
 | |
|  */
 | |
| #define G_SIGNAL_MATCH_MASK  0x3f
 | |
| /**
 | |
|  * G_SIGNAL_TYPE_STATIC_SCOPE:
 | |
|  * 
 | |
|  * This macro flags signal argument types for which the signal system may 
 | |
|  * assume that instances thereof remain persistent across all signal emissions
 | |
|  * they are used in. This is only useful for non ref-counted, value-copy types.
 | |
|  * 
 | |
|  * To flag a signal argument in this way, add `| G_SIGNAL_TYPE_STATIC_SCOPE`
 | |
|  * to the corresponding argument of g_signal_new().
 | |
|  * |[
 | |
|  * g_signal_new ("size_request",
 | |
|  *   G_TYPE_FROM_CLASS (gobject_class),
 | |
|  * 	 G_SIGNAL_RUN_FIRST,
 | |
|  * 	 G_STRUCT_OFFSET (GtkWidgetClass, size_request),
 | |
|  * 	 NULL, NULL,
 | |
|  * 	 _gtk_marshal_VOID__BOXED,
 | |
|  * 	 G_TYPE_NONE, 1,
 | |
|  * 	 GTK_TYPE_REQUISITION | G_SIGNAL_TYPE_STATIC_SCOPE);
 | |
|  * ]|
 | |
|  */
 | |
| #define	G_SIGNAL_TYPE_STATIC_SCOPE (G_TYPE_FLAG_RESERVED_ID_BIT)
 | |
| 
 | |
| 
 | |
| /* --- signal information --- */
 | |
| /**
 | |
|  * GSignalInvocationHint:
 | |
|  * @signal_id: The signal id of the signal invoking the callback
 | |
|  * @detail: The detail passed on for this emission
 | |
|  * @run_type: The stage the signal emission is currently in, this
 | |
|  *  field will contain one of %G_SIGNAL_RUN_FIRST,
 | |
|  *  %G_SIGNAL_RUN_LAST or %G_SIGNAL_RUN_CLEANUP.
 | |
|  * 
 | |
|  * The #GSignalInvocationHint structure is used to pass on additional information
 | |
|  * to callbacks during a signal emission.
 | |
|  */
 | |
| struct _GSignalInvocationHint
 | |
| {
 | |
|   guint		signal_id;
 | |
|   GQuark	detail;
 | |
|   GSignalFlags	run_type;
 | |
| };
 | |
| /**
 | |
|  * GSignalQuery:
 | |
|  * @signal_id: The signal id of the signal being queried, or 0 if the
 | |
|  *  signal to be queried was unknown.
 | |
|  * @signal_name: The signal name.
 | |
|  * @itype: The interface/instance type that this signal can be emitted for.
 | |
|  * @signal_flags: The signal flags as passed in to g_signal_new().
 | |
|  * @return_type: The return type for user callbacks.
 | |
|  * @n_params: The number of parameters that user callbacks take.
 | |
|  * @param_types: (array length=n_params): The individual parameter types for
 | |
|  *  user callbacks, note that the effective callback signature is:
 | |
|  *  |[<!-- language="C" -->
 | |
|  *  @return_type callback (#gpointer     data1,
 | |
|  *  [param_types param_names,]
 | |
|  *  gpointer     data2);
 | |
|  *  ]|
 | |
|  * 
 | |
|  * A structure holding in-depth information for a specific signal. It is
 | |
|  * filled in by the g_signal_query() function.
 | |
|  */
 | |
| struct _GSignalQuery
 | |
| {
 | |
|   guint		signal_id;
 | |
|   const gchar  *signal_name;
 | |
|   GType		itype;
 | |
|   GSignalFlags	signal_flags;
 | |
|   GType		return_type; /* mangled with G_SIGNAL_TYPE_STATIC_SCOPE flag */
 | |
|   guint		n_params;
 | |
|   const GType  *param_types; /* mangled with G_SIGNAL_TYPE_STATIC_SCOPE flag */
 | |
| };
 | |
| 
 | |
| 
 | |
| /* --- signals --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint                 g_signal_newv         (const gchar        *signal_name,
 | |
| 					     GType               itype,
 | |
| 					     GSignalFlags        signal_flags,
 | |
| 					     GClosure           *class_closure,
 | |
| 					     GSignalAccumulator	 accumulator,
 | |
| 					     gpointer		 accu_data,
 | |
| 					     GSignalCMarshaller  c_marshaller,
 | |
| 					     GType               return_type,
 | |
| 					     guint               n_params,
 | |
| 					     GType              *param_types);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint                 g_signal_new_valist   (const gchar        *signal_name,
 | |
| 					     GType               itype,
 | |
| 					     GSignalFlags        signal_flags,
 | |
| 					     GClosure           *class_closure,
 | |
| 					     GSignalAccumulator	 accumulator,
 | |
| 					     gpointer		 accu_data,
 | |
| 					     GSignalCMarshaller  c_marshaller,
 | |
| 					     GType               return_type,
 | |
| 					     guint               n_params,
 | |
| 					     va_list             args);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint                 g_signal_new          (const gchar        *signal_name,
 | |
| 					     GType               itype,
 | |
| 					     GSignalFlags        signal_flags,
 | |
| 					     guint               class_offset,
 | |
| 					     GSignalAccumulator	 accumulator,
 | |
| 					     gpointer		 accu_data,
 | |
| 					     GSignalCMarshaller  c_marshaller,
 | |
| 					     GType               return_type,
 | |
| 					     guint               n_params,
 | |
| 					     ...);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint            g_signal_new_class_handler (const gchar        *signal_name,
 | |
|                                              GType               itype,
 | |
|                                              GSignalFlags        signal_flags,
 | |
|                                              GCallback           class_handler,
 | |
|                                              GSignalAccumulator  accumulator,
 | |
|                                              gpointer            accu_data,
 | |
|                                              GSignalCMarshaller  c_marshaller,
 | |
|                                              GType               return_type,
 | |
|                                              guint               n_params,
 | |
|                                              ...);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void             g_signal_set_va_marshaller (guint              signal_id,
 | |
| 					     GType              instance_type,
 | |
| 					     GSignalCVaMarshaller va_marshaller);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_signal_emitv        (const GValue       *instance_and_params,
 | |
| 					     guint               signal_id,
 | |
| 					     GQuark              detail,
 | |
| 					     GValue             *return_value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_signal_emit_valist  (gpointer            instance,
 | |
| 					     guint               signal_id,
 | |
| 					     GQuark              detail,
 | |
| 					     va_list             var_args);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_signal_emit         (gpointer            instance,
 | |
| 					     guint               signal_id,
 | |
| 					     GQuark              detail,
 | |
| 					     ...);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_signal_emit_by_name (gpointer            instance,
 | |
| 					     const gchar        *detailed_signal,
 | |
| 					     ...);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint                 g_signal_lookup       (const gchar        *name,
 | |
| 					     GType               itype);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_signal_name         (guint               signal_id);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void                  g_signal_query        (guint               signal_id,
 | |
| 					     GSignalQuery       *query);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint*                g_signal_list_ids     (GType               itype,
 | |
| 					     guint              *n_ids);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	      g_signal_parse_name   (const gchar	*detailed_signal,
 | |
| 					     GType		 itype,
 | |
| 					     guint		*signal_id_p,
 | |
| 					     GQuark		*detail_p,
 | |
| 					     gboolean		 force_detail_quark);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GSignalInvocationHint* g_signal_get_invocation_hint (gpointer    instance);
 | |
| 
 | |
| 
 | |
| /* --- signal emissions --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	g_signal_stop_emission		    (gpointer		  instance,
 | |
| 					     guint		  signal_id,
 | |
| 					     GQuark		  detail);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	g_signal_stop_emission_by_name	    (gpointer		  instance,
 | |
| 					     const gchar	 *detailed_signal);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gulong	g_signal_add_emission_hook	    (guint		  signal_id,
 | |
| 					     GQuark		  detail,
 | |
| 					     GSignalEmissionHook  hook_func,
 | |
| 					     gpointer	       	  hook_data,
 | |
| 					     GDestroyNotify	  data_destroy);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	g_signal_remove_emission_hook	    (guint		  signal_id,
 | |
| 					     gulong		  hook_id);
 | |
| 
 | |
| 
 | |
| /* --- signal handlers --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_signal_has_handler_pending	      (gpointer		  instance,
 | |
| 					       guint		  signal_id,
 | |
| 					       GQuark		  detail,
 | |
| 					       gboolean		  may_be_blocked);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gulong	 g_signal_connect_closure_by_id	      (gpointer		  instance,
 | |
| 					       guint		  signal_id,
 | |
| 					       GQuark		  detail,
 | |
| 					       GClosure		 *closure,
 | |
| 					       gboolean		  after);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gulong	 g_signal_connect_closure	      (gpointer		  instance,
 | |
| 					       const gchar       *detailed_signal,
 | |
| 					       GClosure		 *closure,
 | |
| 					       gboolean		  after);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gulong	 g_signal_connect_data		      (gpointer		  instance,
 | |
| 					       const gchar	 *detailed_signal,
 | |
| 					       GCallback	  c_handler,
 | |
| 					       gpointer		  data,
 | |
| 					       GClosureNotify	  destroy_data,
 | |
| 					       GConnectFlags	  connect_flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_signal_handler_block		      (gpointer		  instance,
 | |
| 					       gulong		  handler_id);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_signal_handler_unblock	      (gpointer		  instance,
 | |
| 					       gulong		  handler_id);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_signal_handler_disconnect	      (gpointer		  instance,
 | |
| 					       gulong		  handler_id);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_signal_handler_is_connected	      (gpointer		  instance,
 | |
| 					       gulong		  handler_id);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gulong	 g_signal_handler_find		      (gpointer		  instance,
 | |
| 					       GSignalMatchType	  mask,
 | |
| 					       guint		  signal_id,
 | |
| 					       GQuark		  detail,
 | |
| 					       GClosure		 *closure,
 | |
| 					       gpointer		  func,
 | |
| 					       gpointer		  data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint	 g_signal_handlers_block_matched      (gpointer		  instance,
 | |
| 					       GSignalMatchType	  mask,
 | |
| 					       guint		  signal_id,
 | |
| 					       GQuark		  detail,
 | |
| 					       GClosure		 *closure,
 | |
| 					       gpointer		  func,
 | |
| 					       gpointer		  data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint	 g_signal_handlers_unblock_matched    (gpointer		  instance,
 | |
| 					       GSignalMatchType	  mask,
 | |
| 					       guint		  signal_id,
 | |
| 					       GQuark		  detail,
 | |
| 					       GClosure		 *closure,
 | |
| 					       gpointer		  func,
 | |
| 					       gpointer		  data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint	 g_signal_handlers_disconnect_matched (gpointer		  instance,
 | |
| 					       GSignalMatchType	  mask,
 | |
| 					       guint		  signal_id,
 | |
| 					       GQuark		  detail,
 | |
| 					       GClosure		 *closure,
 | |
| 					       gpointer		  func,
 | |
| 					       gpointer		  data);
 | |
| 
 | |
| 
 | |
| /* --- overriding and chaining --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_signal_override_class_closure       (guint              signal_id,
 | |
|                                                GType              instance_type,
 | |
|                                                GClosure          *class_closure);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_signal_override_class_handler       (const gchar       *signal_name,
 | |
|                                                GType              instance_type,
 | |
|                                                GCallback          class_handler);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_signal_chain_from_overridden        (const GValue      *instance_and_params,
 | |
|                                                GValue            *return_value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void   g_signal_chain_from_overridden_handler (gpointer           instance,
 | |
|                                                ...);
 | |
| 
 | |
| 
 | |
| /* --- convenience --- */
 | |
| /**
 | |
|  * g_signal_connect:
 | |
|  * @instance: the instance to connect to.
 | |
|  * @detailed_signal: a string of the form "signal-name::detail".
 | |
|  * @c_handler: the #GCallback to connect.
 | |
|  * @data: data to pass to @c_handler calls.
 | |
|  * 
 | |
|  * Connects a #GCallback function to a signal for a particular object.
 | |
|  * 
 | |
|  * The handler will be called before the default handler of the signal.
 | |
|  *
 | |
|  * See [memory management of signal handlers][signal-memory-management] for
 | |
|  * details on how to handle the return value and memory management of @data.
 | |
|  * 
 | |
|  * Returns: the handler ID, of type #gulong (always greater than 0 for successful connections)
 | |
|  */
 | |
| #define g_signal_connect(instance, detailed_signal, c_handler, data) \
 | |
|     g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
 | |
| /**
 | |
|  * g_signal_connect_after:
 | |
|  * @instance: the instance to connect to.
 | |
|  * @detailed_signal: a string of the form "signal-name::detail".
 | |
|  * @c_handler: the #GCallback to connect.
 | |
|  * @data: data to pass to @c_handler calls.
 | |
|  * 
 | |
|  * Connects a #GCallback function to a signal for a particular object.
 | |
|  * 
 | |
|  * The handler will be called after the default handler of the signal.
 | |
|  * 
 | |
|  * Returns: the handler ID, of type #gulong (always greater than 0 for successful connections)
 | |
|  */
 | |
| #define g_signal_connect_after(instance, detailed_signal, c_handler, data) \
 | |
|     g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, G_CONNECT_AFTER)
 | |
| /**
 | |
|  * g_signal_connect_swapped:
 | |
|  * @instance: the instance to connect to.
 | |
|  * @detailed_signal: a string of the form "signal-name::detail".
 | |
|  * @c_handler: the #GCallback to connect.
 | |
|  * @data: data to pass to @c_handler calls.
 | |
|  * 
 | |
|  * Connects a #GCallback function to a signal for a particular object.
 | |
|  * 
 | |
|  * The instance on which the signal is emitted and @data will be swapped when 
 | |
|  * calling the handler. This is useful when calling pre-existing functions to
 | |
|  * operate purely on the @data, rather than the @instance: swapping the
 | |
|  * parameters avoids the need to write a wrapper function.
 | |
|  *
 | |
|  * For example, this allows the shorter code:
 | |
|  * |[<!-- language="C" -->
 | |
|  * g_signal_connect_swapped (button, "clicked",
 | |
|  *                           (GCallback) gtk_widget_hide, other_widget);
 | |
|  * ]|
 | |
|  *
 | |
|  * Rather than the cumbersome:
 | |
|  * |[<!-- language="C" -->
 | |
|  * static void
 | |
|  * button_clicked_cb (GtkButton *button, GtkWidget *other_widget)
 | |
|  * {
 | |
|  *     gtk_widget_hide (other_widget);
 | |
|  * }
 | |
|  *
 | |
|  * ...
 | |
|  *
 | |
|  * g_signal_connect (button, "clicked",
 | |
|  *                   (GCallback) button_clicked_cb, other_widget);
 | |
|  * ]|
 | |
|  * 
 | |
|  * Returns: the handler ID, of type #gulong (always greater than 0 for successful connections)
 | |
|  */
 | |
| #define g_signal_connect_swapped(instance, detailed_signal, c_handler, data) \
 | |
|     g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, G_CONNECT_SWAPPED)
 | |
| /**
 | |
|  * g_signal_handlers_disconnect_by_func:
 | |
|  * @instance: The instance to remove handlers from.
 | |
|  * @func: The C closure callback of the handlers (useless for non-C closures).
 | |
|  * @data: The closure data of the handlers' closures.
 | |
|  * 
 | |
|  * Disconnects all handlers on an instance that match @func and @data.
 | |
|  * 
 | |
|  * Returns: The number of handlers that matched.
 | |
|  */
 | |
| #define	g_signal_handlers_disconnect_by_func(instance, func, data)						\
 | |
|     g_signal_handlers_disconnect_matched ((instance),								\
 | |
| 					  (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA),	\
 | |
| 					  0, 0, NULL, (func), (data))
 | |
| 
 | |
| /**
 | |
|  * g_signal_handlers_disconnect_by_data:
 | |
|  * @instance: The instance to remove handlers from
 | |
|  * @data: the closure data of the handlers' closures
 | |
|  *
 | |
|  * Disconnects all handlers on an instance that match @data.
 | |
|  *
 | |
|  * Returns: The number of handlers that matched.
 | |
|  *
 | |
|  * Since: 2.32
 | |
|  */
 | |
| #define g_signal_handlers_disconnect_by_data(instance, data) \
 | |
|   g_signal_handlers_disconnect_matched ((instance), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, (data))
 | |
| 
 | |
| /**
 | |
|  * g_signal_handlers_block_by_func:
 | |
|  * @instance: The instance to block handlers from.
 | |
|  * @func: The C closure callback of the handlers (useless for non-C closures).
 | |
|  * @data: The closure data of the handlers' closures.
 | |
|  * 
 | |
|  * Blocks all handlers on an instance that match @func and @data.
 | |
|  * 
 | |
|  * Returns: The number of handlers that matched.
 | |
|  */
 | |
| #define	g_signal_handlers_block_by_func(instance, func, data)							\
 | |
|     g_signal_handlers_block_matched      ((instance),								\
 | |
| 				          (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA),	\
 | |
| 				          0, 0, NULL, (func), (data))
 | |
| /**
 | |
|  * g_signal_handlers_unblock_by_func:
 | |
|  * @instance: The instance to unblock handlers from.
 | |
|  * @func: The C closure callback of the handlers (useless for non-C closures).
 | |
|  * @data: The closure data of the handlers' closures.
 | |
|  * 
 | |
|  * Unblocks all handlers on an instance that match @func and @data.
 | |
|  * 
 | |
|  * Returns: The number of handlers that matched.
 | |
|  */
 | |
| #define	g_signal_handlers_unblock_by_func(instance, func, data)							\
 | |
|     g_signal_handlers_unblock_matched    ((instance),								\
 | |
| 				          (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA),	\
 | |
| 				          0, 0, NULL, (func), (data))
 | |
| 
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_signal_accumulator_true_handled (GSignalInvocationHint *ihint,
 | |
| 					    GValue                *return_accu,
 | |
| 					    const GValue          *handler_return,
 | |
| 					    gpointer               dummy);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_signal_accumulator_first_wins   (GSignalInvocationHint *ihint,
 | |
|                                             GValue                *return_accu,
 | |
|                                             const GValue          *handler_return,
 | |
|                                             gpointer               dummy);
 | |
| 
 | |
| /*< private >*/
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	 g_signal_handlers_destroy	      (gpointer		  instance);
 | |
| void	 _g_signals_destroy		      (GType		  itype);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_SIGNAL_H__ */
 | |
| /* GObject - GLib Type, Object, Parameter and Signal Library
 | |
|  * Copyright (C) 2000-2001 Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General
 | |
|  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| #ifndef __G_BOXED_H__
 | |
| #define __G_BOXED_H__
 | |
| 
 | |
| #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
 | |
| #error "Only <glib-object.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| #ifndef __GI_SCANNER__
 | |
| /* GObject - GLib Type, Object, Parameter and Signal Library
 | |
|  * Copyright (C) 2000-2001 Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General
 | |
|  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| #ifndef __GLIB_TYPES_H__
 | |
| #define __GLIB_TYPES_H__
 | |
| 
 | |
| #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION) && !defined(GLIB_COMPILATION)
 | |
| #error "Only <glib-object.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* A hack necesssary to preprocess this file with g-ir-scanner */
 | |
| #ifdef __GI_SCANNER__
 | |
| typedef gsize GType;
 | |
| #endif
 | |
| 
 | |
| /* --- GLib boxed types --- */
 | |
| /**
 | |
|  * G_TYPE_DATE:
 | |
|  *
 | |
|  * The #GType for #GDate.
 | |
|  */
 | |
| #define G_TYPE_DATE (g_date_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_STRV:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a %NULL-terminated array of strings.
 | |
|  *
 | |
|  * The code fragments in the following example show the use of a property of
 | |
|  * type #G_TYPE_STRV with g_object_class_install_property(), g_object_set()
 | |
|  * and g_object_get().
 | |
|  *
 | |
|  * |[
 | |
|  * g_object_class_install_property (object_class,
 | |
|  *                                  PROP_AUTHORS,
 | |
|  *                                  g_param_spec_boxed ("authors",
 | |
|  *                                                      _("Authors"),
 | |
|  *                                                      _("List of authors"),
 | |
|  *                                                      G_TYPE_STRV,
 | |
|  *                                                      G_PARAM_READWRITE));
 | |
|  *
 | |
|  * gchar *authors[] = { "Owen", "Tim", NULL };
 | |
|  * g_object_set (obj, "authors", authors, NULL);
 | |
|  *
 | |
|  * gchar *writers[];
 | |
|  * g_object_get (obj, "authors", &writers, NULL);
 | |
|  * /* do something with writers */
 | |
|  * g_strfreev (writers);
 | |
|  * ]|
 | |
|  *
 | |
|  * Since: 2.4
 | |
|  */
 | |
| #define G_TYPE_STRV (g_strv_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_GSTRING:
 | |
|  *
 | |
|  * The #GType for #GString.
 | |
|  */
 | |
| #define G_TYPE_GSTRING (g_gstring_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_HASH_TABLE:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GHashTable reference.
 | |
|  *
 | |
|  * Since: 2.10
 | |
|  */
 | |
| #define G_TYPE_HASH_TABLE (g_hash_table_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_REGEX:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GRegex reference.
 | |
|  *
 | |
|  * Since: 2.14
 | |
|  */
 | |
| #define G_TYPE_REGEX (g_regex_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_MATCH_INFO:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GMatchInfo reference.
 | |
|  *
 | |
|  * Since: 2.30
 | |
|  */
 | |
| #define G_TYPE_MATCH_INFO (g_match_info_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_ARRAY:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GArray reference.
 | |
|  *
 | |
|  * Since: 2.22
 | |
|  */
 | |
| #define G_TYPE_ARRAY (g_array_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_BYTE_ARRAY:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GByteArray reference.
 | |
|  *
 | |
|  * Since: 2.22
 | |
|  */
 | |
| #define G_TYPE_BYTE_ARRAY (g_byte_array_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PTR_ARRAY:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GPtrArray reference.
 | |
|  *
 | |
|  * Since: 2.22
 | |
|  */
 | |
| #define G_TYPE_PTR_ARRAY (g_ptr_array_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_BYTES:
 | |
|  *
 | |
|  * The #GType for #GBytes.
 | |
|  *
 | |
|  * Since: 2.32
 | |
|  */
 | |
| #define G_TYPE_BYTES (g_bytes_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_VARIANT_TYPE:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GVariantType.
 | |
|  *
 | |
|  * Since: 2.24
 | |
|  */
 | |
| #define G_TYPE_VARIANT_TYPE (g_variant_type_get_gtype ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_ERROR:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GError.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| #define G_TYPE_ERROR (g_error_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_DATE_TIME:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GDateTime.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| #define G_TYPE_DATE_TIME (g_date_time_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_TIME_ZONE:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GTimeZone.
 | |
|  *
 | |
|  * Since: 2.34
 | |
|  */
 | |
| #define G_TYPE_TIME_ZONE (g_time_zone_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_IO_CHANNEL:
 | |
|  *
 | |
|  * The #GType for #GIOChannel.
 | |
|  */
 | |
| #define G_TYPE_IO_CHANNEL (g_io_channel_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_IO_CONDITION:
 | |
|  *
 | |
|  * The #GType for #GIOCondition.
 | |
|  */
 | |
| #define G_TYPE_IO_CONDITION (g_io_condition_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_VARIANT_BUILDER:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GVariantBuilder.
 | |
|  *
 | |
|  * Since: 2.30
 | |
|  */
 | |
| #define G_TYPE_VARIANT_BUILDER (g_variant_builder_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_VARIANT_DICT:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GVariantDict.
 | |
|  *
 | |
|  * Since: 2.40
 | |
|  */
 | |
| #define G_TYPE_VARIANT_DICT (g_variant_dict_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_MAIN_LOOP:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GMainLoop.
 | |
|  *
 | |
|  * Since: 2.30
 | |
|  */
 | |
| #define G_TYPE_MAIN_LOOP (g_main_loop_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_MAIN_CONTEXT:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GMainContext.
 | |
|  *
 | |
|  * Since: 2.30
 | |
|  */
 | |
| #define G_TYPE_MAIN_CONTEXT (g_main_context_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_SOURCE:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GSource.
 | |
|  *
 | |
|  * Since: 2.30
 | |
|  */
 | |
| #define G_TYPE_SOURCE (g_source_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_POLLFD:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GPollFD.
 | |
|  *
 | |
|  * Since: 2.36
 | |
|  */
 | |
| #define G_TYPE_POLLFD (g_pollfd_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_MARKUP_PARSE_CONTEXT:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GMarkupParseContext.
 | |
|  *
 | |
|  * Since: 2.36
 | |
|  */
 | |
| #define G_TYPE_MARKUP_PARSE_CONTEXT (g_markup_parse_context_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_KEY_FILE:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GKeyFile.
 | |
|  *
 | |
|  * Since: 2.32
 | |
|  */
 | |
| #define G_TYPE_KEY_FILE (g_key_file_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_MAPPED_FILE:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GMappedFile.
 | |
|  *
 | |
|  * Since: 2.40
 | |
|  */
 | |
| #define G_TYPE_MAPPED_FILE (g_mapped_file_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_THREAD:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GThread.
 | |
|  *
 | |
|  * Since: 2.36
 | |
|  */
 | |
| #define G_TYPE_THREAD (g_thread_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_CHECKSUM:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GChecksum.
 | |
|  *
 | |
|  * Since: 2.36
 | |
|  */
 | |
| #define G_TYPE_CHECKSUM (g_checksum_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_OPTION_GROUP:
 | |
|  *
 | |
|  * The #GType for a boxed type holding a #GOptionGroup.
 | |
|  *
 | |
|  * Since: 2.44
 | |
|  */
 | |
| #define G_TYPE_OPTION_GROUP (g_option_group_get_type ())
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_date_get_type            (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_strv_get_type            (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_gstring_get_type         (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_hash_table_get_type      (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_array_get_type           (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_byte_array_get_type      (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_ptr_array_get_type       (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_bytes_get_type           (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_variant_type_get_gtype   (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_regex_get_type           (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| GType   g_match_info_get_type      (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_error_get_type           (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_date_time_get_type       (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_time_zone_get_type       (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_io_channel_get_type      (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_io_condition_get_type    (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_variant_builder_get_type (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| GType   g_variant_dict_get_type    (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_key_file_get_type        (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| GType   g_main_loop_get_type       (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| GType   g_main_context_get_type    (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_2_30
 | |
| GType   g_source_get_type          (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_2_36
 | |
| GType   g_pollfd_get_type          (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_2_36
 | |
| GType   g_thread_get_type          (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_2_36
 | |
| GType   g_checksum_get_type        (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_2_36
 | |
| GType   g_markup_parse_context_get_type (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_2_40
 | |
| GType   g_mapped_file_get_type (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_2_44
 | |
| GType   g_option_group_get_type    (void) G_GNUC_CONST;
 | |
| 
 | |
| GLIB_DEPRECATED_FOR('G_TYPE_VARIANT')
 | |
| GType   g_variant_get_gtype        (void) G_GNUC_CONST;
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif  /* __GLIB_TYPES_H__ */
 | |
| #endif
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* --- type macros --- */
 | |
| #define G_TYPE_IS_BOXED(type)      (G_TYPE_FUNDAMENTAL (type) == G_TYPE_BOXED)
 | |
| /**
 | |
|  * G_VALUE_HOLDS_BOXED:
 | |
|  * @value: a valid #GValue structure
 | |
|  *
 | |
|  * Checks whether the given #GValue can hold values derived
 | |
|  * from type %G_TYPE_BOXED.
 | |
|  *
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_BOXED(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_BOXED))
 | |
| 
 | |
| 
 | |
| /* --- typedefs --- */
 | |
| /**
 | |
|  * GBoxedCopyFunc:
 | |
|  * @boxed: (not nullable): The boxed structure to be copied.
 | |
|  *
 | |
|  * This function is provided by the user and should produce a copy
 | |
|  * of the passed in boxed structure.
 | |
|  *
 | |
|  * Returns: (not nullable): The newly created copy of the boxed structure.
 | |
|  */
 | |
| typedef gpointer (*GBoxedCopyFunc) (gpointer boxed);
 | |
| 
 | |
| /**
 | |
|  * GBoxedFreeFunc:
 | |
|  * @boxed: (not nullable): The boxed structure to be freed.
 | |
|  *
 | |
|  * This function is provided by the user and should free the boxed
 | |
|  * structure passed.
 | |
|  */
 | |
| typedef void (*GBoxedFreeFunc) (gpointer boxed);
 | |
| 
 | |
| 
 | |
| /* --- prototypes --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_boxed_copy                     (GType boxed_type,
 | |
|                                            gconstpointer  src_boxed);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_boxed_free                     (GType          boxed_type,
 | |
|                                            gpointer       boxed);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_value_set_boxed                (GValue        *value,
 | |
|                                            gconstpointer  v_boxed);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_value_set_static_boxed         (GValue        *value,
 | |
|                                            gconstpointer  v_boxed);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_value_take_boxed               (GValue        *value,
 | |
|                                            gconstpointer  v_boxed);
 | |
| GLIB_DEPRECATED_FOR(g_value_take_boxed)
 | |
| void     g_value_set_boxed_take_ownership (GValue        *value,
 | |
|                                            gconstpointer  v_boxed);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_value_get_boxed                (const GValue  *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_value_dup_boxed                (const GValue  *value);
 | |
| 
 | |
| 
 | |
| /* --- convenience --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType    g_boxed_type_register_static     (const gchar   *name,
 | |
|                                            GBoxedCopyFunc boxed_copy,
 | |
|                                            GBoxedFreeFunc boxed_free);
 | |
| 
 | |
| /* --- GObject boxed types --- */
 | |
| /**
 | |
|  * G_TYPE_CLOSURE:
 | |
|  *
 | |
|  * The #GType for #GClosure.
 | |
|  */
 | |
| #define G_TYPE_CLOSURE (g_closure_get_type ())
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_VALUE:
 | |
|  *
 | |
|  * The type ID of the "GValue" type which is a boxed type,
 | |
|  * used to pass around pointers to GValues.
 | |
|  */
 | |
| #define G_TYPE_VALUE (g_value_get_type ())
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_closure_get_type         (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType   g_value_get_type           (void) G_GNUC_CONST;
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif  /* __G_BOXED_H__ */
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* --- type macros --- */
 | |
| /**
 | |
|  * G_TYPE_IS_OBJECT:
 | |
|  * @type: Type id to check
 | |
|  * 
 | |
|  * Check if the passed in type id is a %G_TYPE_OBJECT or derived from it.
 | |
|  * 
 | |
|  * Returns: %FALSE or %TRUE, indicating whether @type is a %G_TYPE_OBJECT.
 | |
|  */
 | |
| #define G_TYPE_IS_OBJECT(type)      (G_TYPE_FUNDAMENTAL (type) == G_TYPE_OBJECT)
 | |
| /**
 | |
|  * G_OBJECT:
 | |
|  * @object: Object which is subject to casting.
 | |
|  * 
 | |
|  * Casts a #GObject or derived pointer into a (GObject*) pointer.
 | |
|  * Depending on the current debugging level, this function may invoke
 | |
|  * certain runtime checks to identify invalid casts.
 | |
|  */
 | |
| #define G_OBJECT(object)            (lG_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
 | |
| /**
 | |
|  * G_OBJECT_CLASS:
 | |
|  * @class: a valid #GObjectClass
 | |
|  * 
 | |
|  * Casts a derived #GObjectClass structure into a #GObjectClass structure.
 | |
|  */
 | |
| #define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
 | |
| /**
 | |
|  * G_IS_OBJECT:
 | |
|  * @object: Instance to check for being a %G_TYPE_OBJECT.
 | |
|  * 
 | |
|  * Checks whether a valid #GTypeInstance pointer is of type %G_TYPE_OBJECT.
 | |
|  */
 | |
| #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_42
 | |
| #define G_IS_OBJECT(object)         (G_TYPE_CHECK_INSTANCE_FUNDAMENTAL_TYPE ((object), G_TYPE_OBJECT))
 | |
| #else
 | |
| #define G_IS_OBJECT(object)         (lG_TYPE_CHECK_INSTANCE_TYPE ((object), G_TYPE_OBJECT))
 | |
| #endif
 | |
| /**
 | |
|  * G_IS_OBJECT_CLASS:
 | |
|  * @class: a #GObjectClass
 | |
|  * 
 | |
|  * Checks whether @class "is a" valid #GObjectClass structure of type
 | |
|  * %G_TYPE_OBJECT or derived.
 | |
|  */
 | |
| #define G_IS_OBJECT_CLASS(class)    (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_OBJECT))
 | |
| /**
 | |
|  * G_OBJECT_GET_CLASS:
 | |
|  * @object: a #GObject instance.
 | |
|  * 
 | |
|  * Get the class structure associated to a #GObject instance.
 | |
|  *
 | |
|  * Returns: pointer to object class structure.
 | |
|  */
 | |
| #define G_OBJECT_GET_CLASS(object)  (G_TYPE_INSTANCE_GET_CLASS ((object), G_TYPE_OBJECT, GObjectClass))
 | |
| /**
 | |
|  * G_OBJECT_TYPE:
 | |
|  * @object: Object to return the type id for.
 | |
|  * 
 | |
|  * Get the type id of an object.
 | |
|  * 
 | |
|  * Returns: Type id of @object.
 | |
|  */
 | |
| #define G_OBJECT_TYPE(object)       (G_TYPE_FROM_INSTANCE (object))
 | |
| /**
 | |
|  * G_OBJECT_TYPE_NAME:
 | |
|  * @object: Object to return the type name for.
 | |
|  * 
 | |
|  * Get the name of an object's type.
 | |
|  * 
 | |
|  * Returns: Type name of @object. The string is owned by the type system and 
 | |
|  *  should not be freed.
 | |
|  */
 | |
| #define G_OBJECT_TYPE_NAME(object)  (g_type_name (G_OBJECT_TYPE (object)))
 | |
| /**
 | |
|  * G_OBJECT_CLASS_TYPE:
 | |
|  * @class: a valid #GObjectClass
 | |
|  * 
 | |
|  * Get the type id of a class structure.
 | |
|  * 
 | |
|  * Returns: Type id of @class.
 | |
|  */
 | |
| #define G_OBJECT_CLASS_TYPE(class)  (G_TYPE_FROM_CLASS (class))
 | |
| /**
 | |
|  * G_OBJECT_CLASS_NAME:
 | |
|  * @class: a valid #GObjectClass
 | |
|  * 
 | |
|  * Return the name of a class structure's type.
 | |
|  * 
 | |
|  * Returns: Type name of @class. The string is owned by the type system and 
 | |
|  *  should not be freed.
 | |
|  */
 | |
| #define G_OBJECT_CLASS_NAME(class)  (g_type_name (G_OBJECT_CLASS_TYPE (class)))
 | |
| /**
 | |
|  * G_VALUE_HOLDS_OBJECT:
 | |
|  * @value: a valid #GValue structure
 | |
|  * 
 | |
|  * Checks whether the given #GValue can hold values derived from type %G_TYPE_OBJECT.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_OBJECT(value) (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_OBJECT))
 | |
| 
 | |
| /* --- type macros --- */
 | |
| /**
 | |
|  * G_TYPE_INITIALLY_UNOWNED:
 | |
|  * 
 | |
|  * The type for #GInitiallyUnowned.
 | |
|  */
 | |
| #define G_TYPE_INITIALLY_UNOWNED	      (g_initially_unowned_get_type())
 | |
| /**
 | |
|  * G_INITIALLY_UNOWNED:
 | |
|  * @object: Object which is subject to casting.
 | |
|  * 
 | |
|  * Casts a #GInitiallyUnowned or derived pointer into a (GInitiallyUnowned*) 
 | |
|  * pointer. Depending on the current debugging level, this function may invoke
 | |
|  * certain runtime checks to identify invalid casts.
 | |
|  */
 | |
| #define G_INITIALLY_UNOWNED(object)           (lG_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_INITIALLY_UNOWNED, GInitiallyUnowned))
 | |
| /**
 | |
|  * G_INITIALLY_UNOWNED_CLASS:
 | |
|  * @class: a valid #GInitiallyUnownedClass
 | |
|  * 
 | |
|  * Casts a derived #GInitiallyUnownedClass structure into a
 | |
|  * #GInitiallyUnownedClass structure.
 | |
|  */
 | |
| #define G_INITIALLY_UNOWNED_CLASS(class)      (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_INITIALLY_UNOWNED, GInitiallyUnownedClass))
 | |
| /**
 | |
|  * G_IS_INITIALLY_UNOWNED:
 | |
|  * @object: Instance to check for being a %G_TYPE_INITIALLY_UNOWNED.
 | |
|  * 
 | |
|  * Checks whether a valid #GTypeInstance pointer is of type %G_TYPE_INITIALLY_UNOWNED.
 | |
|  */
 | |
| #define G_IS_INITIALLY_UNOWNED(object)        (lG_TYPE_CHECK_INSTANCE_TYPE ((object), G_TYPE_INITIALLY_UNOWNED))
 | |
| /**
 | |
|  * G_IS_INITIALLY_UNOWNED_CLASS:
 | |
|  * @class: a #GInitiallyUnownedClass
 | |
|  * 
 | |
|  * Checks whether @class "is a" valid #GInitiallyUnownedClass structure of type
 | |
|  * %G_TYPE_INITIALLY_UNOWNED or derived.
 | |
|  */
 | |
| #define G_IS_INITIALLY_UNOWNED_CLASS(class)   (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_INITIALLY_UNOWNED))
 | |
| /**
 | |
|  * G_INITIALLY_UNOWNED_GET_CLASS:
 | |
|  * @object: a #GInitiallyUnowned instance.
 | |
|  * 
 | |
|  * Get the class structure associated to a #GInitiallyUnowned instance.
 | |
|  *
 | |
|  * Returns: pointer to object class structure.
 | |
|  */
 | |
| #define G_INITIALLY_UNOWNED_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), G_TYPE_INITIALLY_UNOWNED, GInitiallyUnownedClass))
 | |
| /* GInitiallyUnowned ia a GObject with initially floating reference count */
 | |
| 
 | |
| 
 | |
| /* --- typedefs & structures --- */
 | |
| typedef struct _GObject                  GObject;
 | |
| typedef struct _GObjectClass             GObjectClass;
 | |
| typedef struct _GObject                  GInitiallyUnowned;
 | |
| typedef struct _GObjectClass             GInitiallyUnownedClass;
 | |
| typedef struct _GObjectConstructParam    GObjectConstructParam;
 | |
| /**
 | |
|  * GObjectGetPropertyFunc:
 | |
|  * @object: a #GObject
 | |
|  * @property_id: the numeric id under which the property was registered with
 | |
|  *  g_object_class_install_property().
 | |
|  * @value: a #GValue to return the property value in
 | |
|  * @pspec: the #GParamSpec describing the property
 | |
|  * 
 | |
|  * The type of the @get_property function of #GObjectClass. 
 | |
|  */
 | |
| typedef void (*GObjectGetPropertyFunc)  (GObject      *object,
 | |
|                                          guint         property_id,
 | |
|                                          GValue       *value,
 | |
|                                          GParamSpec   *pspec);
 | |
| /**
 | |
|  * GObjectSetPropertyFunc:
 | |
|  * @object: a #GObject
 | |
|  * @property_id: the numeric id under which the property was registered with
 | |
|  *  g_object_class_install_property().
 | |
|  * @value: the new value for the property
 | |
|  * @pspec: the #GParamSpec describing the property
 | |
|  * 
 | |
|  * The type of the @set_property function of #GObjectClass. 
 | |
|  */
 | |
| typedef void (*GObjectSetPropertyFunc)  (GObject      *object,
 | |
|                                          guint         property_id,
 | |
|                                          const GValue *value,
 | |
|                                          GParamSpec   *pspec);
 | |
| /**
 | |
|  * GObjectFinalizeFunc:
 | |
|  * @object: the #GObject being finalized
 | |
|  * 
 | |
|  * The type of the @finalize function of #GObjectClass.
 | |
|  */
 | |
| typedef void (*GObjectFinalizeFunc)     (GObject      *object);
 | |
| /**
 | |
|  * GWeakNotify:
 | |
|  * @data: data that was provided when the weak reference was established
 | |
|  * @where_the_object_was: the object being finalized
 | |
|  * 
 | |
|  * A #GWeakNotify function can be added to an object as a callback that gets
 | |
|  * triggered when the object is finalized. Since the object is already being
 | |
|  * finalized when the #GWeakNotify is called, there's not much you could do 
 | |
|  * with the object, apart from e.g. using its address as hash-index or the like. 
 | |
|  */
 | |
| typedef void (*GWeakNotify)		(gpointer      data,
 | |
| 					 GObject      *where_the_object_was);
 | |
| /**
 | |
|  * GObject:
 | |
|  * 
 | |
|  * All the fields in the GObject structure are private 
 | |
|  * to the #GObject implementation and should never be accessed directly.
 | |
|  */
 | |
| struct  _GObject
 | |
| {
 | |
|   GTypeInstance  g_type_instance;
 | |
|   
 | |
|   /*< private >*/
 | |
|   volatile guint ref_count;
 | |
|   GData         *qdata;
 | |
| };
 | |
| /**
 | |
|  * GObjectClass:
 | |
|  * @g_type_class: the parent class
 | |
|  * @constructor: the @constructor function is called by lg_object_new () to 
 | |
|  *  complete the object initialization after all the construction properties are
 | |
|  *  set. The first thing a @constructor implementation must do is chain up to the
 | |
|  *  @constructor of the parent class. Overriding @constructor should be rarely 
 | |
|  *  needed, e.g. to handle construct properties, or to implement singletons.
 | |
|  * @set_property: the generic setter for all properties of this type. Should be
 | |
|  *  overridden for every type with properties. If implementations of
 | |
|  *  @set_property don't emit property change notification explicitly, this will
 | |
|  *  be done implicitly by the type system. However, if the notify signal is
 | |
|  *  emitted explicitly, the type system will not emit it a second time.
 | |
|  * @get_property: the generic getter for all properties of this type. Should be
 | |
|  *  overridden for every type with properties.
 | |
|  * @dispose: the @dispose function is supposed to drop all references to other 
 | |
|  *  objects, but keep the instance otherwise intact, so that client method 
 | |
|  *  invocations still work. It may be run multiple times (due to reference 
 | |
|  *  loops). Before returning, @dispose should chain up to the @dispose method 
 | |
|  *  of the parent class.
 | |
|  * @finalize: instance finalization function, should finish the finalization of 
 | |
|  *  the instance begun in @dispose and chain up to the @finalize method of the 
 | |
|  *  parent class.
 | |
|  * @dispatch_properties_changed: emits property change notification for a bunch
 | |
|  *  of properties. Overriding @dispatch_properties_changed should be rarely 
 | |
|  *  needed.
 | |
|  * @notify: the class closure for the notify signal
 | |
|  * @constructed: the @constructed function is called by lg_object_new() as the
 | |
|  *  final step of the object creation process.  At the point of the call, all
 | |
|  *  construction properties have been set on the object.  The purpose of this
 | |
|  *  call is to allow for object initialisation steps that can only be performed
 | |
|  *  after construction properties have been set.  @constructed implementors
 | |
|  *  should chain up to the @constructed call of their parent class to allow it
 | |
|  *  to complete its initialisation.
 | |
|  * 
 | |
|  * The class structure for the GObject type.
 | |
|  * 
 | |
|  * <example>
 | |
|  * <title>Implementing singletons using a constructor</title>
 | |
|  * <programlisting>
 | |
|  * static MySingleton *the_singleton = NULL;
 | |
|  * 
 | |
|  * static GObject*
 | |
|  * my_singleton_constructor (GType                  type,
 | |
|  *                           guint                  n_construct_params,
 | |
|  *                           GObjectConstructParam *construct_params)
 | |
|  * {
 | |
|  *   GObject *object;
 | |
|  *   
 | |
|  *   if (!the_singleton)
 | |
|  *     {
 | |
|  *       object = G_OBJECT_CLASS (parent_class)->constructor (type,
 | |
|  *                                                            n_construct_params,
 | |
|  *                                                            construct_params);
 | |
|  *       the_singleton = MY_SINGLETON (object);
 | |
|  *     }
 | |
|  *   else
 | |
|  *     object = g_object_ref (G_OBJECT (the_singleton));
 | |
|  * 
 | |
|  *   return object;
 | |
|  * }
 | |
|  * </programlisting></example>
 | |
|  */
 | |
| struct  _GObjectClass
 | |
| {
 | |
|   GTypeClass   g_type_class;
 | |
| 
 | |
|   /*< private >*/
 | |
|   GSList      *construct_properties;
 | |
| 
 | |
|   /*< public >*/
 | |
|   /* seldom overidden */
 | |
|   GObject*   (*constructor)     (GType                  type,
 | |
|                                  guint                  n_construct_properties,
 | |
|                                  GObjectConstructParam *construct_properties);
 | |
|   /* overridable methods */
 | |
|   void       (*set_property)		(GObject        *object,
 | |
|                                          guint           property_id,
 | |
|                                          const GValue   *value,
 | |
|                                          GParamSpec     *pspec);
 | |
|   void       (*get_property)		(GObject        *object,
 | |
|                                          guint           property_id,
 | |
|                                          GValue         *value,
 | |
|                                          GParamSpec     *pspec);
 | |
|   void       (*dispose)			(GObject        *object);
 | |
|   void       (*finalize)		(GObject        *object);
 | |
|   /* seldom overidden */
 | |
|   void       (*dispatch_properties_changed) (GObject      *object,
 | |
| 					     guint	   n_pspecs,
 | |
| 					     GParamSpec  **pspecs);
 | |
|   /* signals */
 | |
|   void	     (*notify)			(GObject	*object,
 | |
| 					 GParamSpec	*pspec);
 | |
| 
 | |
|   /* called when done constructing */
 | |
|   void	     (*constructed)		(GObject	*object);
 | |
| 
 | |
|   /*< private >*/
 | |
|   gsize		flags;
 | |
| 
 | |
|   /* padding */
 | |
|   gpointer	pdummy[6];
 | |
| };
 | |
| /**
 | |
|  * GObjectConstructParam:
 | |
|  * @pspec: the #GParamSpec of the construct parameter
 | |
|  * @value: the value to set the parameter to
 | |
|  * 
 | |
|  * The GObjectConstructParam struct is an auxiliary 
 | |
|  * structure used to hand #GParamSpec/#GValue pairs to the @constructor of
 | |
|  * a #GObjectClass.
 | |
|  */
 | |
| struct _GObjectConstructParam
 | |
| {
 | |
|   GParamSpec *pspec;
 | |
|   GValue     *value;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * GInitiallyUnowned:
 | |
|  * 
 | |
|  * All the fields in the GInitiallyUnowned structure 
 | |
|  * are private to the #GInitiallyUnowned implementation and should never be 
 | |
|  * accessed directly.
 | |
|  */
 | |
| /**
 | |
|  * GInitiallyUnownedClass:
 | |
|  * 
 | |
|  * The class structure for the GInitiallyUnowned type.
 | |
|  */
 | |
| 
 | |
| 
 | |
| /* --- prototypes --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType       g_initially_unowned_get_type      (void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_class_install_property   (GObjectClass   *oclass,
 | |
| 					       guint           property_id,
 | |
| 					       GParamSpec     *pspec);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec* g_object_class_find_property      (GObjectClass   *oclass,
 | |
| 					       const gchar    *property_name);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec**g_object_class_list_properties    (GObjectClass   *oclass,
 | |
| 					       guint	      *n_properties);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_class_override_property  (GObjectClass   *oclass,
 | |
| 					       guint           property_id,
 | |
| 					       const gchar    *name);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_class_install_properties (GObjectClass   *oclass,
 | |
|                                                guint           n_pspecs,
 | |
|                                                GParamSpec    **pspecs);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_interface_install_property (gpointer     g_iface,
 | |
| 						 GParamSpec  *pspec);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec* g_object_interface_find_property    (gpointer     g_iface,
 | |
| 						 const gchar *property_name);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec**g_object_interface_list_properties  (gpointer     g_iface,
 | |
| 						 guint       *n_properties_p);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType       g_object_get_type                 (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer    lg_object_new                      (GType           object_type,
 | |
| 					       const gchar    *first_property_name,
 | |
| 					       ...);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer    g_object_newv		      (GType           object_type,
 | |
| 					       guint	       n_parameters,
 | |
| 					       GParameter     *parameters);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GObject*    g_object_new_valist               (GType           object_type,
 | |
| 					       const gchar    *first_property_name,
 | |
| 					       va_list         var_args);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	    g_object_set                      (gpointer	       object,
 | |
| 					       const gchar    *first_property_name,
 | |
| 					       ...) G_GNUC_NULL_TERMINATED;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_get                      (gpointer        object,
 | |
| 					       const gchar    *first_property_name,
 | |
| 					       ...) G_GNUC_NULL_TERMINATED;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer    g_object_connect                  (gpointer	       object,
 | |
| 					       const gchar    *signal_spec,
 | |
| 					       ...) G_GNUC_NULL_TERMINATED;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	    g_object_disconnect               (gpointer	       object,
 | |
| 					       const gchar    *signal_spec,
 | |
| 					       ...) G_GNUC_NULL_TERMINATED;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_set_valist               (GObject        *object,
 | |
| 					       const gchar    *first_property_name,
 | |
| 					       va_list         var_args);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_get_valist               (GObject        *object,
 | |
| 					       const gchar    *first_property_name,
 | |
| 					       va_list         var_args);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_set_property             (GObject        *object,
 | |
| 					       const gchar    *property_name,
 | |
| 					       const GValue   *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_get_property             (GObject        *object,
 | |
| 					       const gchar    *property_name,
 | |
| 					       GValue         *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_freeze_notify            (GObject        *object);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_notify                   (GObject        *object,
 | |
| 					       const gchar    *property_name);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_notify_by_pspec          (GObject        *object,
 | |
| 					       GParamSpec     *pspec);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_thaw_notify              (GObject        *object);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean    g_object_is_floating    	      (gpointer        object);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer    g_object_ref_sink       	      (gpointer	       object);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer    g_object_ref                      (gpointer        object);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_unref                    (gpointer        object);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	    g_object_weak_ref		      (GObject	      *object,
 | |
| 					       GWeakNotify     notify,
 | |
| 					       gpointer	       data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	    g_object_weak_unref		      (GObject	      *object,
 | |
| 					       GWeakNotify     notify,
 | |
| 					       gpointer	       data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_add_weak_pointer         (GObject        *object, 
 | |
|                                                gpointer       *weak_pointer_location);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_remove_weak_pointer      (GObject        *object, 
 | |
|                                                gpointer       *weak_pointer_location);
 | |
| 
 | |
| /**
 | |
|  * GToggleNotify:
 | |
|  * @data: Callback data passed to g_object_add_toggle_ref()
 | |
|  * @object: The object on which g_object_add_toggle_ref() was called.
 | |
|  * @is_last_ref: %TRUE if the toggle reference is now the
 | |
|  *  last reference to the object. %FALSE if the toggle
 | |
|  *  reference was the last reference and there are now other
 | |
|  *  references.
 | |
|  * 
 | |
|  * A callback function used for notification when the state
 | |
|  * of a toggle reference changes. See g_object_add_toggle_ref().
 | |
|  */
 | |
| typedef void (*GToggleNotify) (gpointer      data,
 | |
| 			       GObject      *object,
 | |
| 			       gboolean      is_last_ref);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_object_add_toggle_ref    (GObject       *object,
 | |
| 				 GToggleNotify  notify,
 | |
| 				 gpointer       data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_object_remove_toggle_ref (GObject       *object,
 | |
| 				 GToggleNotify  notify,
 | |
| 				 gpointer       data);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer    g_object_get_qdata                (GObject        *object,
 | |
| 					       GQuark          quark);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_set_qdata                (GObject        *object,
 | |
| 					       GQuark          quark,
 | |
| 					       gpointer        data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_set_qdata_full           (GObject        *object,
 | |
| 					       GQuark          quark,
 | |
| 					       gpointer        data,
 | |
| 					       GDestroyNotify  destroy);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer    g_object_steal_qdata              (GObject        *object,
 | |
| 					       GQuark          quark);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_34
 | |
| gpointer    g_object_dup_qdata                (GObject        *object,
 | |
|                                                GQuark          quark,
 | |
|                                                GDuplicateFunc  dup_func,
 | |
| 					       gpointer         user_data);
 | |
| GLIB_AVAILABLE_IN_2_34
 | |
| gboolean    g_object_replace_qdata            (GObject        *object,
 | |
|                                                GQuark          quark,
 | |
|                                                gpointer        oldval,
 | |
|                                                gpointer        newval,
 | |
|                                                GDestroyNotify  destroy,
 | |
| 					       GDestroyNotify *old_destroy);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer    g_object_get_data                 (GObject        *object,
 | |
| 					       const gchar    *key);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_set_data                 (GObject        *object,
 | |
| 					       const gchar    *key,
 | |
| 					       gpointer        data);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_set_data_full            (GObject        *object,
 | |
| 					       const gchar    *key,
 | |
| 					       gpointer        data,
 | |
| 					       GDestroyNotify  destroy);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer    g_object_steal_data               (GObject        *object,
 | |
| 					       const gchar    *key);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_34
 | |
| gpointer    g_object_dup_data                 (GObject        *object,
 | |
|                                                const gchar    *key,
 | |
|                                                GDuplicateFunc  dup_func,
 | |
| 					       gpointer         user_data);
 | |
| GLIB_AVAILABLE_IN_2_34
 | |
| gboolean    g_object_replace_data             (GObject        *object,
 | |
|                                                const gchar    *key,
 | |
|                                                gpointer        oldval,
 | |
|                                                gpointer        newval,
 | |
|                                                GDestroyNotify  destroy,
 | |
| 					       GDestroyNotify *old_destroy);
 | |
| 
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_watch_closure            (GObject        *object,
 | |
| 					       GClosure       *closure);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GClosure*   g_cclosure_new_object             (GCallback       callback_func,
 | |
| 					       GObject	      *object);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GClosure*   g_cclosure_new_object_swap        (GCallback       callback_func,
 | |
| 					       GObject	      *object);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GClosure*   g_closure_new_object              (guint           sizeof_closure,
 | |
| 					       GObject        *object);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_value_set_object                (GValue         *value,
 | |
| 					       gpointer        v_object);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer    g_value_get_object                (const GValue   *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer    g_value_dup_object                (const GValue   *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gulong	    g_signal_connect_object           (gpointer	       instance,
 | |
| 					       const gchar    *detailed_signal,
 | |
| 					       GCallback       c_handler,
 | |
| 					       gpointer	       gobject,
 | |
| 					       GConnectFlags   connect_flags);
 | |
| 
 | |
| /*< protected >*/
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_force_floating           (GObject        *object);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_object_run_dispose	      (GObject	      *object);
 | |
| 
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void        g_value_take_object               (GValue         *value,
 | |
| 					       gpointer        v_object);
 | |
| GLIB_DEPRECATED_FOR(g_value_take_object)
 | |
| void        g_value_set_object_take_ownership (GValue         *value,
 | |
|                                                gpointer        v_object);
 | |
| 
 | |
| GLIB_DEPRECATED
 | |
| gsize	    g_object_compat_control	      (gsize	       what,
 | |
| 					       gpointer	       data);
 | |
| 
 | |
| /* --- implementation macros --- */
 | |
| #define G_OBJECT_WARN_INVALID_PSPEC(object, pname, property_id, pspec) \
 | |
| G_STMT_START { \
 | |
|   GObject *_glib__object = (GObject*) (object); \
 | |
|   GParamSpec *_glib__pspec = (GParamSpec*) (pspec); \
 | |
|   guint _glib__property_id = (property_id); \
 | |
|   g_warning ("%s:%d: invalid %s id %u for \"%s\" of type '%s' in '%s'", \
 | |
|              __FILE__, __LINE__, \
 | |
|              (pname), \
 | |
|              _glib__property_id, \
 | |
|              _glib__pspec->name, \
 | |
|              g_type_name (G_PARAM_SPEC_TYPE (_glib__pspec)), \
 | |
|              G_OBJECT_TYPE_NAME (_glib__object)); \
 | |
| } G_STMT_END
 | |
| /**
 | |
|  * G_OBJECT_WARN_INVALID_PROPERTY_ID:
 | |
|  * @object: the #GObject on which set_property() or get_property() was called
 | |
|  * @property_id: the numeric id of the property
 | |
|  * @pspec: the #GParamSpec of the property
 | |
|  * 
 | |
|  * This macro should be used to emit a standard warning about unexpected 
 | |
|  * properties in set_property() and get_property() implementations.
 | |
|  */
 | |
| #define G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec) \
 | |
|     G_OBJECT_WARN_INVALID_PSPEC ((object), "property", (property_id), (pspec))
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void    g_clear_object (volatile GObject **object_ptr);
 | |
| #define g_clear_object(object_ptr) g_clear_pointer ((object_ptr), g_object_unref)
 | |
| 
 | |
| /**
 | |
|  * g_set_object: (skip)
 | |
|  * @object_ptr: a pointer to a #GObject reference
 | |
|  * @new_object: (nullable) (transfer none): a pointer to the new #GObject to
 | |
|  *   assign to it, or %NULL to clear the pointer
 | |
|  *
 | |
|  * Updates a #GObject pointer to refer to @new_object. It increments the
 | |
|  * reference count of @new_object (if non-%NULL), decrements the reference
 | |
|  * count of the current value of @object_ptr (if non-%NULL), and assigns
 | |
|  * @new_object to @object_ptr. The assignment is not atomic.
 | |
|  *
 | |
|  * @object_ptr must not be %NULL.
 | |
|  *
 | |
|  * A macro is also included that allows this function to be used without
 | |
|  * pointer casts. The function itself is static inline, so its address may vary
 | |
|  * between compilation units.
 | |
|  *
 | |
|  * One convenient usage of this function is in implementing property setters:
 | |
|  * |[
 | |
|  *   void
 | |
|  *   foo_set_bar (Foo *foo,
 | |
|  *                Bar *new_bar)
 | |
|  *   {
 | |
|  *     g_return_if_fail (IS_FOO (foo));
 | |
|  *     g_return_if_fail (new_bar == NULL || IS_BAR (new_bar));
 | |
|  *
 | |
|  *     if (g_set_object (&foo->bar, new_bar))
 | |
|  *       g_object_notify (foo, "bar");
 | |
|  *   }
 | |
|  * ]|
 | |
|  *
 | |
|  * Returns: %TRUE if the value of @object_ptr changed, %FALSE otherwise
 | |
|  *
 | |
|  * Since: 2.44
 | |
|  */
 | |
| static inline gboolean
 | |
| (g_set_object) (GObject **object_ptr,
 | |
|                 GObject  *new_object)
 | |
| {
 | |
|   GObject *old_object = *object_ptr;
 | |
| 
 | |
|   /* rely on g_object_[un]ref() to check the pointers are actually GObjects;
 | |
|    * elide a (object_ptr != NULL) check because most of the time we will be
 | |
|    * operating on struct members with a constant offset, so a NULL check would
 | |
|    * not catch bugs
 | |
|    */
 | |
| 
 | |
|   if (old_object == new_object)
 | |
|     return FALSE;
 | |
| 
 | |
|   if (new_object != NULL)
 | |
|     g_object_ref (new_object);
 | |
| 
 | |
|   *object_ptr = new_object;
 | |
| 
 | |
|   if (old_object != NULL)
 | |
|     g_object_unref (old_object);
 | |
| 
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| #define g_set_object(object_ptr, new_object) \
 | |
|  (/* Check types match. */ \
 | |
|   0 ? *(object_ptr) = (new_object), FALSE : \
 | |
|   (g_set_object) ((GObject **) (object_ptr), (GObject *) (new_object)) \
 | |
|  )
 | |
| 
 | |
| typedef struct {
 | |
|     /*<private>*/
 | |
|     union { gpointer p; } priv;
 | |
| } GWeakRef;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_weak_ref_init       (GWeakRef *weak_ref,
 | |
|                                 gpointer  object);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_weak_ref_clear      (GWeakRef *weak_ref);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer g_weak_ref_get        (GWeakRef *weak_ref);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_weak_ref_set        (GWeakRef *weak_ref,
 | |
|                                 gpointer  object);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_OBJECT_H__ */
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| #define G_TYPE_BINDING_FLAGS    (g_binding_flags_get_type ())
 | |
| 
 | |
| #define G_TYPE_BINDING          (g_binding_get_type ())
 | |
| #define G_BINDING(obj)          (lG_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_BINDING, GBinding))
 | |
| #define G_IS_BINDING(obj)       (lG_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_BINDING))
 | |
| 
 | |
| /**
 | |
|  * GBinding:
 | |
|  *
 | |
|  * GBinding is an opaque structure whose members
 | |
|  * cannot be accessed directly.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| typedef struct _GBinding        GBinding;
 | |
| 
 | |
| /**
 | |
|  * GBindingTransformFunc:
 | |
|  * @binding: a #GBinding
 | |
|  * @from_value: the #GValue containing the value to transform
 | |
|  * @to_value: the #GValue in which to store the transformed value
 | |
|  * @user_data: data passed to the transform function
 | |
|  *
 | |
|  * A function to be called to transform @from_value to @to_value. If
 | |
|  * this is the @transform_to function of a binding, then @from_value
 | |
|  * is the @source_property on the @source object, and @to_value is the
 | |
|  * @target_property on the @target object. If this is the
 | |
|  * @transform_from function of a %G_BINDING_BIDIRECTIONAL binding,
 | |
|  * then those roles are reversed.
 | |
|  *
 | |
|  * Returns: %TRUE if the transformation was successful, and %FALSE
 | |
|  *   otherwise
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| typedef gboolean (* GBindingTransformFunc) (GBinding     *binding,
 | |
|                                             const GValue *from_value,
 | |
|                                             GValue       *to_value,
 | |
|                                             gpointer      user_data);
 | |
| 
 | |
| /**
 | |
|  * GBindingFlags:
 | |
|  * @G_BINDING_DEFAULT: The default binding; if the source property
 | |
|  *   changes, the target property is updated with its value.
 | |
|  * @G_BINDING_BIDIRECTIONAL: Bidirectional binding; if either the
 | |
|  *   property of the source or the property of the target changes,
 | |
|  *   the other is updated.
 | |
|  * @G_BINDING_SYNC_CREATE: Synchronize the values of the source and
 | |
|  *   target properties when creating the binding; the direction of
 | |
|  *   the synchronization is always from the source to the target.
 | |
|  * @G_BINDING_INVERT_BOOLEAN: If the two properties being bound are
 | |
|  *   booleans, setting one to %TRUE will result in the other being
 | |
|  *   set to %FALSE and vice versa. This flag will only work for
 | |
|  *   boolean properties, and cannot be used when passing custom
 | |
|  *   transformation functions to g_object_bind_property_full().
 | |
|  *
 | |
|  * Flags to be passed to g_object_bind_property() or
 | |
|  * g_object_bind_property_full().
 | |
|  *
 | |
|  * This enumeration can be extended at later date.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| typedef enum { /*< prefix=G_BINDING >*/
 | |
|   G_BINDING_DEFAULT        = 0,
 | |
| 
 | |
|   G_BINDING_BIDIRECTIONAL  = 1 << 0,
 | |
|   G_BINDING_SYNC_CREATE    = 1 << 1,
 | |
|   G_BINDING_INVERT_BOOLEAN = 1 << 2
 | |
| } GBindingFlags;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType                 g_binding_flags_get_type      (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType                 g_binding_get_type            (void) G_GNUC_CONST;
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GBindingFlags         g_binding_get_flags           (GBinding *binding);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GObject *             g_binding_get_source          (GBinding *binding);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GObject *             g_binding_get_target          (GBinding *binding);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_binding_get_source_property (GBinding *binding);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_binding_get_target_property (GBinding *binding);
 | |
| GLIB_AVAILABLE_IN_2_38
 | |
| void                  g_binding_unbind              (GBinding *binding);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GBinding *g_object_bind_property               (gpointer               source,
 | |
|                                                 const gchar           *source_property,
 | |
|                                                 gpointer               target,
 | |
|                                                 const gchar           *target_property,
 | |
|                                                 GBindingFlags          flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GBinding *g_object_bind_property_full          (gpointer               source,
 | |
|                                                 const gchar           *source_property,
 | |
|                                                 gpointer               target,
 | |
|                                                 const gchar           *target_property,
 | |
|                                                 GBindingFlags          flags,
 | |
|                                                 GBindingTransformFunc  transform_to,
 | |
|                                                 GBindingTransformFunc  transform_from,
 | |
|                                                 gpointer               user_data,
 | |
|                                                 GDestroyNotify         notify);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GBinding *g_object_bind_property_with_closures (gpointer               source,
 | |
|                                                 const gchar           *source_property,
 | |
|                                                 gpointer               target,
 | |
|                                                 const gchar           *target_property,
 | |
|                                                 GBindingFlags          flags,
 | |
|                                                 GClosure              *transform_to,
 | |
|                                                 GClosure              *transform_from);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_BINDING_H__ */
 | |
| /* GObject - GLib Type, Object, Parameter and Signal Library
 | |
|  * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General
 | |
|  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| #ifndef __G_ENUMS_H__
 | |
| #define __G_ENUMS_H__
 | |
| 
 | |
| #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
 | |
| #error "Only <glib-object.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* --- type macros --- */
 | |
| /**
 | |
|  * G_TYPE_IS_ENUM:
 | |
|  * @type: a #GType ID.
 | |
|  * 
 | |
|  * Checks whether @type "is a" %G_TYPE_ENUM.
 | |
|  *
 | |
|  * Returns: %TRUE if @type "is a" %G_TYPE_ENUM.
 | |
|  */
 | |
| #define G_TYPE_IS_ENUM(type)	       (G_TYPE_FUNDAMENTAL (type) == G_TYPE_ENUM)
 | |
| /**
 | |
|  * G_ENUM_CLASS:
 | |
|  * @class: a valid #GEnumClass
 | |
|  * 
 | |
|  * Casts a derived #GEnumClass structure into a #GEnumClass structure.
 | |
|  */
 | |
| #define G_ENUM_CLASS(class)	       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_ENUM, GEnumClass))
 | |
| /**
 | |
|  * G_IS_ENUM_CLASS:
 | |
|  * @class: a #GEnumClass
 | |
|  * 
 | |
|  * Checks whether @class "is a" valid #GEnumClass structure of type %G_TYPE_ENUM
 | |
|  * or derived.
 | |
|  */
 | |
| #define G_IS_ENUM_CLASS(class)	       (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_ENUM))
 | |
| /**
 | |
|  * G_ENUM_CLASS_TYPE:
 | |
|  * @class: a #GEnumClass
 | |
|  * 
 | |
|  * Get the type identifier from a given #GEnumClass structure.
 | |
|  *
 | |
|  * Returns: the #GType
 | |
|  */
 | |
| #define G_ENUM_CLASS_TYPE(class)       (G_TYPE_FROM_CLASS (class))
 | |
| /**
 | |
|  * G_ENUM_CLASS_TYPE_NAME:
 | |
|  * @class: a #GEnumClass
 | |
|  * 
 | |
|  * Get the static type name from a given #GEnumClass structure.
 | |
|  *
 | |
|  * Returns: the type name.
 | |
|  */
 | |
| #define G_ENUM_CLASS_TYPE_NAME(class)  (g_type_name (G_ENUM_CLASS_TYPE (class)))
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_IS_FLAGS:
 | |
|  * @type: a #GType ID.
 | |
|  *
 | |
|  * Checks whether @type "is a" %G_TYPE_FLAGS. 
 | |
|  *
 | |
|  * Returns: %TRUE if @type "is a" %G_TYPE_FLAGS.
 | |
|  */
 | |
| #define G_TYPE_IS_FLAGS(type)	       (G_TYPE_FUNDAMENTAL (type) == G_TYPE_FLAGS)
 | |
| /**
 | |
|  * G_FLAGS_CLASS:
 | |
|  * @class: a valid #GFlagsClass
 | |
|  * 
 | |
|  * Casts a derived #GFlagsClass structure into a #GFlagsClass structure.
 | |
|  */
 | |
| #define G_FLAGS_CLASS(class)	       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_FLAGS, GFlagsClass))
 | |
| /**
 | |
|  * G_IS_FLAGS_CLASS:
 | |
|  * @class: a #GFlagsClass
 | |
|  * 
 | |
|  * Checks whether @class "is a" valid #GFlagsClass structure of type %G_TYPE_FLAGS
 | |
|  * or derived.
 | |
|  */
 | |
| #define G_IS_FLAGS_CLASS(class)        (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_FLAGS))
 | |
| /**
 | |
|  * G_FLAGS_CLASS_TYPE:
 | |
|  * @class: a #GFlagsClass
 | |
|  * 
 | |
|  * Get the type identifier from a given #GFlagsClass structure.
 | |
|  *
 | |
|  * Returns: the #GType
 | |
|  */
 | |
| #define G_FLAGS_CLASS_TYPE(class)      (G_TYPE_FROM_CLASS (class))
 | |
| /**
 | |
|  * G_FLAGS_CLASS_TYPE_NAME:
 | |
|  * @class: a #GFlagsClass
 | |
|  * 
 | |
|  * Get the static type name from a given #GFlagsClass structure.
 | |
|  *
 | |
|  * Returns: the type name.
 | |
|  */
 | |
| #define G_FLAGS_CLASS_TYPE_NAME(class) (g_type_name (G_FLAGS_CLASS_TYPE (class)))
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * G_VALUE_HOLDS_ENUM:
 | |
|  * @value: a valid #GValue structure
 | |
|  * 
 | |
|  * Checks whether the given #GValue can hold values derived from type %G_TYPE_ENUM.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_ENUM(value)      (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_ENUM))
 | |
| /**
 | |
|  * G_VALUE_HOLDS_FLAGS:
 | |
|  * @value: a valid #GValue structure
 | |
|  * 
 | |
|  * Checks whether the given #GValue can hold values derived from type %G_TYPE_FLAGS.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_FLAGS(value)     (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_FLAGS))
 | |
| 
 | |
| 
 | |
| /* --- enum/flag values & classes --- */
 | |
| typedef struct _GEnumClass  GEnumClass;
 | |
| typedef struct _GFlagsClass GFlagsClass;
 | |
| typedef struct _GEnumValue  GEnumValue;
 | |
| typedef struct _GFlagsValue GFlagsValue;
 | |
| 
 | |
| /**
 | |
|  * GEnumClass:
 | |
|  * @g_type_class: the parent class
 | |
|  * @minimum: the smallest possible value.
 | |
|  * @maximum: the largest possible value.
 | |
|  * @n_values: the number of possible values.
 | |
|  * @values: an array of #GEnumValue structs describing the 
 | |
|  *  individual values.
 | |
|  * 
 | |
|  * The class of an enumeration type holds information about its 
 | |
|  * possible values.
 | |
|  */
 | |
| struct	_GEnumClass
 | |
| {
 | |
|   GTypeClass  g_type_class;
 | |
| 
 | |
|   /*< public >*/  
 | |
|   gint	      minimum;
 | |
|   gint	      maximum;
 | |
|   guint	      n_values;
 | |
|   GEnumValue *values;
 | |
| };
 | |
| /**
 | |
|  * GFlagsClass:
 | |
|  * @g_type_class: the parent class
 | |
|  * @mask: a mask covering all possible values.
 | |
|  * @n_values: the number of possible values.
 | |
|  * @values: an array of #GFlagsValue structs describing the 
 | |
|  *  individual values.
 | |
|  * 
 | |
|  * The class of a flags type holds information about its 
 | |
|  * possible values.
 | |
|  */
 | |
| struct	_GFlagsClass
 | |
| {
 | |
|   GTypeClass   g_type_class;
 | |
|   
 | |
|   /*< public >*/  
 | |
|   guint	       mask;
 | |
|   guint	       n_values;
 | |
|   GFlagsValue *values;
 | |
| };
 | |
| /**
 | |
|  * GEnumValue:
 | |
|  * @value: the enum value
 | |
|  * @value_name: the name of the value
 | |
|  * @value_nick: the nickname of the value
 | |
|  * 
 | |
|  * A structure which contains a single enum value, its name, and its
 | |
|  * nickname.
 | |
|  */
 | |
| struct _GEnumValue
 | |
| {
 | |
|   gint	 value;
 | |
|   const gchar *value_name;
 | |
|   const gchar *value_nick;
 | |
| };
 | |
| /**
 | |
|  * GFlagsValue:
 | |
|  * @value: the flags value
 | |
|  * @value_name: the name of the value
 | |
|  * @value_nick: the nickname of the value
 | |
|  * 
 | |
|  * A structure which contains a single flags value, its name, and its
 | |
|  * nickname.
 | |
|  */
 | |
| struct _GFlagsValue
 | |
| {
 | |
|   guint	 value;
 | |
|   const gchar *value_name;
 | |
|   const gchar *value_nick;
 | |
| };
 | |
| 
 | |
| 
 | |
| /* --- prototypes --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GEnumValue*	g_enum_get_value		(GEnumClass	*enum_class,
 | |
| 						 gint		 value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GEnumValue*	g_enum_get_value_by_name	(GEnumClass	*enum_class,
 | |
| 						 const gchar	*name);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GEnumValue*	g_enum_get_value_by_nick	(GEnumClass	*enum_class,
 | |
| 						 const gchar	*nick);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GFlagsValue*	g_flags_get_first_value		(GFlagsClass	*flags_class,
 | |
| 						 guint		 value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GFlagsValue*	g_flags_get_value_by_name	(GFlagsClass	*flags_class,
 | |
| 						 const gchar	*name);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GFlagsValue*	g_flags_get_value_by_nick	(GFlagsClass	*flags_class,
 | |
| 						 const gchar	*nick);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_value_set_enum        	(GValue         *value,
 | |
| 						 gint            v_enum);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint            g_value_get_enum        	(const GValue   *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void            g_value_set_flags       	(GValue         *value,
 | |
| 						 guint           v_flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint           g_value_get_flags       	(const GValue   *value);
 | |
| 
 | |
| 
 | |
| 
 | |
| /* --- registration functions --- */
 | |
| /* const_static_values is a NULL terminated array of enum/flags
 | |
|  * values that is taken over!
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType	g_enum_register_static	   (const gchar	      *name,
 | |
| 				    const GEnumValue  *const_static_values);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType	g_flags_register_static	   (const gchar	      *name,
 | |
| 				    const GFlagsValue *const_static_values);
 | |
| /* functions to complete the type information
 | |
|  * for enums/flags implemented by plugins
 | |
|  */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	g_enum_complete_type_info  (GType	       g_enum_type,
 | |
| 				    GTypeInfo	      *info,
 | |
| 				    const GEnumValue  *const_values);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	g_flags_complete_type_info (GType	       g_flags_type,
 | |
| 				    GTypeInfo	      *info,
 | |
| 				    const GFlagsValue *const_values);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_ENUMS_H__ */
 | |
| /* GObject - GLib Type, Object, Parameter and Signal Library
 | |
|  * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General
 | |
|  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  * gparamspecs.h: GLib default param specs
 | |
|  */
 | |
| #ifndef __G_PARAMSPECS_H__
 | |
| #define __G_PARAMSPECS_H__
 | |
| 
 | |
| #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
 | |
| #error "Only <glib-object.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* --- type macros --- */
 | |
| /**
 | |
|  * G_TYPE_PARAM_CHAR:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecChar.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_CHAR		   (g_param_spec_types[0])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_CHAR:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_CHAR.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_CHAR(pspec)        (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_CHAR))
 | |
| /**
 | |
|  * G_PARAM_SPEC_CHAR:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Cast a #GParamSpec instance into a #GParamSpecChar.
 | |
|  */
 | |
| #define G_PARAM_SPEC_CHAR(pspec)           (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_CHAR, GParamSpecChar))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_UCHAR:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecUChar.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_UCHAR		   (g_param_spec_types[1])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_UCHAR:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_UCHAR.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_UCHAR(pspec)       (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UCHAR))
 | |
| /**
 | |
|  * G_PARAM_SPEC_UCHAR:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Cast a #GParamSpec instance into a #GParamSpecUChar.
 | |
|  */
 | |
| #define G_PARAM_SPEC_UCHAR(pspec)          (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UCHAR, GParamSpecUChar))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_BOOLEAN:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecBoolean.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_BOOLEAN		   (g_param_spec_types[2])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_BOOLEAN:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_BOOLEAN.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_BOOLEAN(pspec)     (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOOLEAN))
 | |
| /**
 | |
|  * G_PARAM_SPEC_BOOLEAN:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Cast a #GParamSpec instance into a #GParamSpecBoolean.
 | |
|  */
 | |
| #define G_PARAM_SPEC_BOOLEAN(pspec)        (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_BOOLEAN, GParamSpecBoolean))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_INT:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecInt.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_INT		   (g_param_spec_types[3])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_INT:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_INT.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_INT(pspec)         (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_INT))
 | |
| /**
 | |
|  * G_PARAM_SPEC_INT:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Cast a #GParamSpec instance into a #GParamSpecInt.
 | |
|  */
 | |
| #define G_PARAM_SPEC_INT(pspec)            (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_INT, GParamSpecInt))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_UINT:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecUInt.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_UINT		   (g_param_spec_types[4])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_UINT:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_UINT.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_UINT(pspec)        (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UINT))
 | |
| /**
 | |
|  * G_PARAM_SPEC_UINT:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Cast a #GParamSpec instance into a #GParamSpecUInt.
 | |
|  */
 | |
| #define G_PARAM_SPEC_UINT(pspec)           (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UINT, GParamSpecUInt))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_LONG:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecLong.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_LONG		   (g_param_spec_types[5])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_LONG:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_LONG.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_LONG(pspec)        (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_LONG))
 | |
| /**
 | |
|  * G_PARAM_SPEC_LONG:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Cast a #GParamSpec instance into a #GParamSpecLong.
 | |
|  */
 | |
| #define G_PARAM_SPEC_LONG(pspec)           (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_LONG, GParamSpecLong))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_ULONG:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecULong.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_ULONG		   (g_param_spec_types[6])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_ULONG:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_ULONG.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_ULONG(pspec)       (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_ULONG))
 | |
| /**
 | |
|  * G_PARAM_SPEC_ULONG:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Cast a #GParamSpec instance into a #GParamSpecULong.
 | |
|  */
 | |
| #define G_PARAM_SPEC_ULONG(pspec)          (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_ULONG, GParamSpecULong))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_INT64:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecInt64.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_INT64		   (g_param_spec_types[7])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_INT64:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_INT64.
 | |
|  *
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_INT64(pspec)       (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_INT64))
 | |
| /**
 | |
|  * G_PARAM_SPEC_INT64:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Cast a #GParamSpec instance into a #GParamSpecInt64.
 | |
|  */
 | |
| #define G_PARAM_SPEC_INT64(pspec)          (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_INT64, GParamSpecInt64))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_UINT64:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecUInt64.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_UINT64		   (g_param_spec_types[8])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_UINT64:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_UINT64.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_UINT64(pspec)      (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UINT64))
 | |
| /**
 | |
|  * G_PARAM_SPEC_UINT64:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Cast a #GParamSpec instance into a #GParamSpecUInt64.
 | |
|  */
 | |
| #define G_PARAM_SPEC_UINT64(pspec)         (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UINT64, GParamSpecUInt64))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_UNICHAR:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecUnichar.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_UNICHAR		   (g_param_spec_types[9])
 | |
| /**
 | |
|  * G_PARAM_SPEC_UNICHAR:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Cast a #GParamSpec instance into a #GParamSpecUnichar.
 | |
|  */
 | |
| #define G_PARAM_SPEC_UNICHAR(pspec)        (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_UNICHAR, GParamSpecUnichar))
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_UNICHAR:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_UNICHAR.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_UNICHAR(pspec)     (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UNICHAR))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_ENUM:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecEnum.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_ENUM		   (g_param_spec_types[10])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_ENUM:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_ENUM.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_ENUM(pspec)        (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_ENUM))
 | |
| /**
 | |
|  * G_PARAM_SPEC_ENUM:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Cast a #GParamSpec instance into a #GParamSpecEnum.
 | |
|  */
 | |
| #define G_PARAM_SPEC_ENUM(pspec)           (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_ENUM, GParamSpecEnum))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_FLAGS:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecFlags.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_FLAGS		   (g_param_spec_types[11])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_FLAGS:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_FLAGS.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_FLAGS(pspec)       (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_FLAGS))
 | |
| /**
 | |
|  * G_PARAM_SPEC_FLAGS:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Cast a #GParamSpec instance into a #GParamSpecFlags.
 | |
|  */
 | |
| #define G_PARAM_SPEC_FLAGS(pspec)          (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_FLAGS, GParamSpecFlags))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_FLOAT:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecFloat.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_FLOAT		   (g_param_spec_types[12])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_FLOAT:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_FLOAT.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_FLOAT(pspec)       (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_FLOAT))
 | |
| /**
 | |
|  * G_PARAM_SPEC_FLOAT:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Cast a #GParamSpec instance into a #GParamSpecFloat.
 | |
|  */
 | |
| #define G_PARAM_SPEC_FLOAT(pspec)          (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_FLOAT, GParamSpecFloat))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_DOUBLE:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecDouble.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_DOUBLE		   (g_param_spec_types[13])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_DOUBLE:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_DOUBLE.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_DOUBLE(pspec)      (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_DOUBLE))
 | |
| /**
 | |
|  * G_PARAM_SPEC_DOUBLE:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Cast a #GParamSpec instance into a #GParamSpecDouble.
 | |
|  */
 | |
| #define G_PARAM_SPEC_DOUBLE(pspec)         (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_DOUBLE, GParamSpecDouble))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_STRING:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecString.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_STRING		   (g_param_spec_types[14])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_STRING:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_STRING.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_STRING(pspec)      (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_STRING))
 | |
| /**
 | |
|  * G_PARAM_SPEC_STRING:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Casts a #GParamSpec instance into a #GParamSpecString.
 | |
|  */
 | |
| #define G_PARAM_SPEC_STRING(pspec)         (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_STRING, GParamSpecString))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_PARAM:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecParam.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_PARAM		   (g_param_spec_types[15])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_PARAM:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_PARAM.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_PARAM(pspec)       (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_PARAM))
 | |
| /**
 | |
|  * G_PARAM_SPEC_PARAM:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Casts a #GParamSpec instance into a #GParamSpecParam.
 | |
|  */
 | |
| #define G_PARAM_SPEC_PARAM(pspec)          (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_PARAM, GParamSpecParam))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_BOXED:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecBoxed.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_BOXED		   (g_param_spec_types[16])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_BOXED:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_BOXED.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_BOXED(pspec)       (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOXED))
 | |
| /**
 | |
|  * G_PARAM_SPEC_BOXED:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Cast a #GParamSpec instance into a #GParamSpecBoxed.
 | |
|  */
 | |
| #define G_PARAM_SPEC_BOXED(pspec)          (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_BOXED, GParamSpecBoxed))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_POINTER:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecPointer.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_POINTER		   (g_param_spec_types[17])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_POINTER:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_POINTER.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_POINTER(pspec)     (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_POINTER))
 | |
| /**
 | |
|  * G_PARAM_SPEC_POINTER:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Casts a #GParamSpec instance into a #GParamSpecPointer.
 | |
|  */
 | |
| #define G_PARAM_SPEC_POINTER(pspec)        (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_POINTER, GParamSpecPointer))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_VALUE_ARRAY:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecValueArray.
 | |
|  *
 | |
|  * Deprecated: 2.32: Use #GArray instead of #GValueArray
 | |
|  */
 | |
| #define	G_TYPE_PARAM_VALUE_ARRAY	   (g_param_spec_types[18])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_VALUE_ARRAY:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_VALUE_ARRAY.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  *
 | |
|  * Deprecated: 2.32: Use #GArray instead of #GValueArray
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_VALUE_ARRAY(pspec) (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_VALUE_ARRAY))
 | |
| /**
 | |
|  * G_PARAM_SPEC_VALUE_ARRAY:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Cast a #GParamSpec instance into a #GParamSpecValueArray.
 | |
|  *
 | |
|  * Deprecated: 2.32: Use #GArray instead of #GValueArray
 | |
|  */
 | |
| #define G_PARAM_SPEC_VALUE_ARRAY(pspec)    (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_VALUE_ARRAY, GParamSpecValueArray))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_OBJECT:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecObject.
 | |
|  */
 | |
| #define	G_TYPE_PARAM_OBJECT		   (g_param_spec_types[19])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_OBJECT:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_OBJECT.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_OBJECT(pspec)      (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
 | |
| /**
 | |
|  * G_PARAM_SPEC_OBJECT:
 | |
|  * @pspec: a valid #GParamSpec instance
 | |
|  * 
 | |
|  * Casts a #GParamSpec instance into a #GParamSpecObject.
 | |
|  */
 | |
| #define G_PARAM_SPEC_OBJECT(pspec)         (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_OBJECT, GParamSpecObject))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_OVERRIDE:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecOverride.
 | |
|  * 
 | |
|  * Since: 2.4
 | |
|  */
 | |
| #define	G_TYPE_PARAM_OVERRIDE		   (g_param_spec_types[20])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_OVERRIDE:
 | |
|  * @pspec: a #GParamSpec
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_OVERRIDE.
 | |
|  * 
 | |
|  * Since: 2.4
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_OVERRIDE(pspec)    (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OVERRIDE))
 | |
| /**
 | |
|  * G_PARAM_SPEC_OVERRIDE:
 | |
|  * @pspec: a #GParamSpec
 | |
|  * 
 | |
|  * Casts a #GParamSpec into a #GParamSpecOverride.
 | |
|  * 
 | |
|  * Since: 2.4
 | |
|  */
 | |
| #define G_PARAM_SPEC_OVERRIDE(pspec)       (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_OVERRIDE, GParamSpecOverride))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_GTYPE:
 | |
|  * 
 | |
|  * The #GType of #GParamSpecGType.
 | |
|  * 
 | |
|  * Since: 2.10
 | |
|  */
 | |
| #define	G_TYPE_PARAM_GTYPE		   (g_param_spec_types[21])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_GTYPE:
 | |
|  * @pspec: a #GParamSpec
 | |
|  * 
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_GTYPE.
 | |
|  * 
 | |
|  * Since: 2.10
 | |
|  * Returns: %TRUE on success. 
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_GTYPE(pspec)       (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_GTYPE))
 | |
| /**
 | |
|  * G_PARAM_SPEC_GTYPE:
 | |
|  * @pspec: a #GParamSpec
 | |
|  * 
 | |
|  * Casts a #GParamSpec into a #GParamSpecGType.
 | |
|  * 
 | |
|  * Since: 2.10
 | |
|  */
 | |
| #define G_PARAM_SPEC_GTYPE(pspec)          (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_GTYPE, GParamSpecGType))
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_PARAM_VARIANT:
 | |
|  *
 | |
|  * The #GType of #GParamSpecVariant.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| #define G_TYPE_PARAM_VARIANT                (g_param_spec_types[22])
 | |
| /**
 | |
|  * G_IS_PARAM_SPEC_VARIANT:
 | |
|  * @pspec: a #GParamSpec
 | |
|  *
 | |
|  * Checks whether the given #GParamSpec is of type %G_TYPE_PARAM_VARIANT.
 | |
|  *
 | |
|  * Returns: %TRUE on success
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| #define G_IS_PARAM_SPEC_VARIANT(pspec)      (lG_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_VARIANT))
 | |
| /**
 | |
|  * G_PARAM_SPEC_VARIANT:
 | |
|  * @pspec: a #GParamSpec
 | |
|  *
 | |
|  * Casts a #GParamSpec into a #GParamSpecVariant.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| #define G_PARAM_SPEC_VARIANT(pspec)         (lG_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_VARIANT, GParamSpecVariant))
 | |
| 
 | |
| /* --- typedefs & structures --- */
 | |
| typedef struct _GParamSpecChar       GParamSpecChar;
 | |
| typedef struct _GParamSpecUChar      GParamSpecUChar;
 | |
| typedef struct _GParamSpecBoolean    GParamSpecBoolean;
 | |
| typedef struct _GParamSpecInt        GParamSpecInt;
 | |
| typedef struct _GParamSpecUInt       GParamSpecUInt;
 | |
| typedef struct _GParamSpecLong       GParamSpecLong;
 | |
| typedef struct _GParamSpecULong      GParamSpecULong;
 | |
| typedef struct _GParamSpecInt64      GParamSpecInt64;
 | |
| typedef struct _GParamSpecUInt64     GParamSpecUInt64;
 | |
| typedef struct _GParamSpecUnichar    GParamSpecUnichar;
 | |
| typedef struct _GParamSpecEnum       GParamSpecEnum;
 | |
| typedef struct _GParamSpecFlags      GParamSpecFlags;
 | |
| typedef struct _GParamSpecFloat      GParamSpecFloat;
 | |
| typedef struct _GParamSpecDouble     GParamSpecDouble;
 | |
| typedef struct _GParamSpecString     GParamSpecString;
 | |
| typedef struct _GParamSpecParam      GParamSpecParam;
 | |
| typedef struct _GParamSpecBoxed      GParamSpecBoxed;
 | |
| typedef struct _GParamSpecPointer    GParamSpecPointer;
 | |
| typedef struct _GParamSpecValueArray GParamSpecValueArray;
 | |
| typedef struct _GParamSpecObject     GParamSpecObject;
 | |
| typedef struct _GParamSpecOverride   GParamSpecOverride;
 | |
| typedef struct _GParamSpecGType      GParamSpecGType;
 | |
| typedef struct _GParamSpecVariant    GParamSpecVariant;
 | |
| 
 | |
| /**
 | |
|  * GParamSpecChar:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * @minimum: minimum value for the property specified
 | |
|  * @maximum: maximum value for the property specified
 | |
|  * @default_value: default value for the property specified
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for character properties.
 | |
|  */
 | |
| struct _GParamSpecChar
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
|   
 | |
|   gint8         minimum;
 | |
|   gint8         maximum;
 | |
|   gint8         default_value;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecUChar:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * @minimum: minimum value for the property specified
 | |
|  * @maximum: maximum value for the property specified
 | |
|  * @default_value: default value for the property specified
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for unsigned character properties.
 | |
|  */
 | |
| struct _GParamSpecUChar
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
|   
 | |
|   guint8        minimum;
 | |
|   guint8        maximum;
 | |
|   guint8        default_value;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecBoolean:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * @default_value: default value for the property specified
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for boolean properties.
 | |
|  */
 | |
| struct _GParamSpecBoolean
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
|   
 | |
|   gboolean      default_value;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecInt:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * @minimum: minimum value for the property specified
 | |
|  * @maximum: maximum value for the property specified
 | |
|  * @default_value: default value for the property specified
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for integer properties.
 | |
|  */
 | |
| struct _GParamSpecInt
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
|   
 | |
|   gint          minimum;
 | |
|   gint          maximum;
 | |
|   gint          default_value;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecUInt:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * @minimum: minimum value for the property specified
 | |
|  * @maximum: maximum value for the property specified
 | |
|  * @default_value: default value for the property specified
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for unsigned integer properties.
 | |
|  */
 | |
| struct _GParamSpecUInt
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
|   
 | |
|   guint         minimum;
 | |
|   guint         maximum;
 | |
|   guint         default_value;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecLong:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * @minimum: minimum value for the property specified
 | |
|  * @maximum: maximum value for the property specified
 | |
|  * @default_value: default value for the property specified
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for long integer properties.
 | |
|  */
 | |
| struct _GParamSpecLong
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
|   
 | |
|   glong         minimum;
 | |
|   glong         maximum;
 | |
|   glong         default_value;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecULong:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * @minimum: minimum value for the property specified
 | |
|  * @maximum: maximum value for the property specified
 | |
|  * @default_value: default value for the property specified
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for unsigned long integer properties.
 | |
|  */
 | |
| struct _GParamSpecULong
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
|   
 | |
|   gulong        minimum;
 | |
|   gulong        maximum;
 | |
|   gulong        default_value;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecInt64:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * @minimum: minimum value for the property specified
 | |
|  * @maximum: maximum value for the property specified
 | |
|  * @default_value: default value for the property specified
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for 64bit integer properties.
 | |
|  */
 | |
| struct _GParamSpecInt64
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
|   
 | |
|   gint64        minimum;
 | |
|   gint64        maximum;
 | |
|   gint64        default_value;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecUInt64:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * @minimum: minimum value for the property specified
 | |
|  * @maximum: maximum value for the property specified
 | |
|  * @default_value: default value for the property specified
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for unsigned 64bit integer properties.
 | |
|  */
 | |
| struct _GParamSpecUInt64
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
|   
 | |
|   guint64       minimum;
 | |
|   guint64       maximum;
 | |
|   guint64       default_value;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecUnichar:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * @default_value: default value for the property specified
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for unichar (unsigned integer) properties.
 | |
|  */
 | |
| struct _GParamSpecUnichar
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
|   
 | |
|   gunichar      default_value;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecEnum:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * @enum_class: the #GEnumClass for the enum
 | |
|  * @default_value: default value for the property specified
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for enum 
 | |
|  * properties.
 | |
|  */
 | |
| struct _GParamSpecEnum
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
|   
 | |
|   GEnumClass   *enum_class;
 | |
|   gint          default_value;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecFlags:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * @flags_class: the #GFlagsClass for the flags
 | |
|  * @default_value: default value for the property specified
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for flags
 | |
|  * properties.
 | |
|  */
 | |
| struct _GParamSpecFlags
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
|   
 | |
|   GFlagsClass  *flags_class;
 | |
|   guint         default_value;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecFloat:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * @minimum: minimum value for the property specified
 | |
|  * @maximum: maximum value for the property specified
 | |
|  * @default_value: default value for the property specified
 | |
|  * @epsilon: values closer than @epsilon will be considered identical
 | |
|  *  by g_param_values_cmp(); the default value is 1e-30.
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for float properties.
 | |
|  */
 | |
| struct _GParamSpecFloat
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
|   
 | |
|   gfloat        minimum;
 | |
|   gfloat        maximum;
 | |
|   gfloat        default_value;
 | |
|   gfloat        epsilon;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecDouble:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * @minimum: minimum value for the property specified
 | |
|  * @maximum: maximum value for the property specified
 | |
|  * @default_value: default value for the property specified
 | |
|  * @epsilon: values closer than @epsilon will be considered identical
 | |
|  *  by g_param_values_cmp(); the default value is 1e-90.
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for double properties.
 | |
|  */
 | |
| struct _GParamSpecDouble
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
|   
 | |
|   gdouble       minimum;
 | |
|   gdouble       maximum;
 | |
|   gdouble       default_value;
 | |
|   gdouble       epsilon;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecString:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * @default_value: default value for the property specified
 | |
|  * @cset_first: a string containing the allowed values for the first byte
 | |
|  * @cset_nth: a string containing the allowed values for the subsequent bytes
 | |
|  * @substitutor: the replacement byte for bytes which don't match @cset_first or @cset_nth.
 | |
|  * @null_fold_if_empty: replace empty string by %NULL
 | |
|  * @ensure_non_null: replace %NULL strings by an empty string
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for string
 | |
|  * properties.
 | |
|  */
 | |
| struct _GParamSpecString
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
|   
 | |
|   gchar        *default_value;
 | |
|   gchar        *cset_first;
 | |
|   gchar        *cset_nth;
 | |
|   gchar         substitutor;
 | |
|   guint         null_fold_if_empty : 1;
 | |
|   guint         ensure_non_null : 1;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecParam:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for %G_TYPE_PARAM
 | |
|  * properties.
 | |
|  */
 | |
| struct _GParamSpecParam
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecBoxed:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for boxed properties.
 | |
|  */
 | |
| struct _GParamSpecBoxed
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecPointer:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for pointer properties.
 | |
|  */
 | |
| struct _GParamSpecPointer
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecValueArray:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * @element_spec: a #GParamSpec describing the elements contained in arrays of this property, may be %NULL
 | |
|  * @fixed_n_elements: if greater than 0, arrays of this property will always have this many elements
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for #GValueArray properties.
 | |
|  */
 | |
| struct _GParamSpecValueArray
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
|   GParamSpec   *element_spec;
 | |
|   guint		fixed_n_elements;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecObject:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for object properties.
 | |
|  */
 | |
| struct _GParamSpecObject
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecOverride:
 | |
|  * 
 | |
|  * This is a type of #GParamSpec type that simply redirects operations to
 | |
|  * another paramspec.  All operations other than getting or
 | |
|  * setting the value are redirected, including accessing the nick and
 | |
|  * blurb, validating a value, and so forth. See
 | |
|  * g_param_spec_get_redirect_target() for retrieving the overidden
 | |
|  * property. #GParamSpecOverride is used in implementing
 | |
|  * g_object_class_override_property(), and will not be directly useful
 | |
|  * unless you are implementing a new base type similar to GObject.
 | |
|  * 
 | |
|  * Since: 2.4
 | |
|  */
 | |
| struct _GParamSpecOverride
 | |
| {
 | |
|   /*< private >*/
 | |
|   GParamSpec    parent_instance;
 | |
|   GParamSpec   *overridden;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecGType:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * @is_a_type: a #GType whose subtypes can occur as values
 | |
|  * 
 | |
|  * A #GParamSpec derived structure that contains the meta data for #GType properties.
 | |
|  * 
 | |
|  * Since: 2.10
 | |
|  */
 | |
| struct _GParamSpecGType
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
|   GType         is_a_type;
 | |
| };
 | |
| /**
 | |
|  * GParamSpecVariant:
 | |
|  * @parent_instance: private #GParamSpec portion
 | |
|  * @type: a #GVariantType, or %NULL
 | |
|  * @default_value: a #GVariant, or %NULL
 | |
|  *
 | |
|  * A #GParamSpec derived structure that contains the meta data for #GVariant properties.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| struct _GParamSpecVariant
 | |
| {
 | |
|   GParamSpec    parent_instance;
 | |
|   GVariantType *type;
 | |
|   GVariant     *default_value;
 | |
| 
 | |
|   /*< private >*/
 | |
|   gpointer      padding[4];
 | |
| };
 | |
| 
 | |
| /* --- GParamSpec prototypes --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_char	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  gint8		  minimum,
 | |
| 					  gint8		  maximum,
 | |
| 					  gint8		  default_value,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_uchar	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  guint8	  minimum,
 | |
| 					  guint8	  maximum,
 | |
| 					  guint8	  default_value,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_boolean	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  gboolean	  default_value,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_int	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  gint		  minimum,
 | |
| 					  gint		  maximum,
 | |
| 					  gint		  default_value,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_uint	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  guint		  minimum,
 | |
| 					  guint		  maximum,
 | |
| 					  guint		  default_value,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_long	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  glong		  minimum,
 | |
| 					  glong		  maximum,
 | |
| 					  glong		  default_value,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_ulong	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  gulong	  minimum,
 | |
| 					  gulong	  maximum,
 | |
| 					  gulong	  default_value,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_int64	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  gint64       	  minimum,
 | |
| 					  gint64       	  maximum,
 | |
| 					  gint64       	  default_value,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_uint64	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  guint64	  minimum,
 | |
| 					  guint64	  maximum,
 | |
| 					  guint64	  default_value,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_unichar      (const gchar    *name,
 | |
| 				          const gchar    *nick,
 | |
| 				          const gchar    *blurb,
 | |
| 				          gunichar	  default_value,
 | |
| 				          GParamFlags     flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_enum	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  GType		  enum_type,
 | |
| 					  gint		  default_value,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_flags	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  GType		  flags_type,
 | |
| 					  guint		  default_value,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_float	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  gfloat	  minimum,
 | |
| 					  gfloat	  maximum,
 | |
| 					  gfloat	  default_value,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_double	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  gdouble	  minimum,
 | |
| 					  gdouble	  maximum,
 | |
| 					  gdouble	  default_value,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_string	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  const gchar	 *default_value,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_param	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  GType		  param_type,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_boxed	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  GType		  boxed_type,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_pointer	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_value_array (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  GParamSpec	 *element_spec,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_object	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  GType		  object_type,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_override    (const gchar    *name,
 | |
| 					  GParamSpec     *overridden);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_gtype	 (const gchar	 *name,
 | |
| 					  const gchar	 *nick,
 | |
| 					  const gchar	 *blurb,
 | |
| 					  GType           is_a_type,
 | |
| 					  GParamFlags	  flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GParamSpec*	g_param_spec_variant	 (const gchar        *name,
 | |
| 					  const gchar        *nick,
 | |
| 					  const gchar	     *blurb,
 | |
| 					  const GVariantType *type,
 | |
| 					  GVariant           *default_value,
 | |
| 					  GParamFlags         flags);
 | |
| 
 | |
| /* --- internal --- */
 | |
| /* We prefix variable declarations so they can
 | |
|  * properly get exported in windows dlls.
 | |
|  */
 | |
| #ifndef GOBJECT_VAR
 | |
| #  ifdef G_PLATFORM_WIN32
 | |
| #    ifdef GOBJECT_STATIC_COMPILATION
 | |
| #      define GOBJECT_VAR extern
 | |
| #    else /* !GOBJECT_STATIC_COMPILATION */
 | |
| #      ifdef GOBJECT_COMPILATION
 | |
| #        ifdef DLL_EXPORT
 | |
| #          define GOBJECT_VAR __declspec(dllexport)
 | |
| #        else /* !DLL_EXPORT */
 | |
| #          define GOBJECT_VAR extern
 | |
| #        endif /* !DLL_EXPORT */
 | |
| #      else /* !GOBJECT_COMPILATION */
 | |
| #        define GOBJECT_VAR extern __declspec(dllimport)
 | |
| #      endif /* !GOBJECT_COMPILATION */
 | |
| #    endif /* !GOBJECT_STATIC_COMPILATION */
 | |
| #  else /* !G_PLATFORM_WIN32 */
 | |
| #    define GOBJECT_VAR _GLIB_EXTERN
 | |
| #  endif /* !G_PLATFORM_WIN32 */
 | |
| #endif /* GOBJECT_VAR */
 | |
| 
 | |
| GOBJECT_VAR GType *g_param_spec_types;
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_PARAMSPECS_H__ */
 | |
| /* GObject - GLib Type, Object, Parameter and Signal Library
 | |
|  * Copyright (C) 2001 Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General
 | |
|  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| #ifndef __G_SOURCECLOSURE_H__
 | |
| #define __G_SOURCECLOSURE_H__
 | |
| 
 | |
| #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
 | |
| #error "Only <glib-object.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_source_set_closure        (GSource  *source,
 | |
| 				  GClosure *closure);
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_source_set_dummy_callback (GSource  *source);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_SOURCECLOSURE_H__ */
 | |
| /* GObject - GLib Type, Object, Parameter and Signal Library
 | |
|  * Copyright (C) 2000 Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| #ifndef __G_TYPE_MODULE_H__
 | |
| #define __G_TYPE_MODULE_H__
 | |
| 
 | |
| #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
 | |
| #error "Only <glib-object.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GTypeModule      GTypeModule;
 | |
| typedef struct _GTypeModuleClass GTypeModuleClass;
 | |
| 
 | |
| #define G_TYPE_TYPE_MODULE              (g_type_module_get_type ())
 | |
| #define G_TYPE_MODULE(module)           (lG_TYPE_CHECK_INSTANCE_CAST ((module), G_TYPE_TYPE_MODULE, GTypeModule))
 | |
| #define G_TYPE_MODULE_CLASS(class)      (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_TYPE_MODULE, GTypeModuleClass))
 | |
| #define G_IS_TYPE_MODULE(module)        (lG_TYPE_CHECK_INSTANCE_TYPE ((module), G_TYPE_TYPE_MODULE))
 | |
| #define G_IS_TYPE_MODULE_CLASS(class)   (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_TYPE_MODULE))
 | |
| #define G_TYPE_MODULE_GET_CLASS(module) (G_TYPE_INSTANCE_GET_CLASS ((module), G_TYPE_TYPE_MODULE, GTypeModuleClass))
 | |
| 
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GTypeModule, g_object_unref)
 | |
| 
 | |
| /**
 | |
|  * GTypeModule:
 | |
|  * @name: the name of the module
 | |
|  * 
 | |
|  * The members of the GTypeModule structure should not 
 | |
|  * be accessed directly, except for the @name field.
 | |
|  */
 | |
| struct _GTypeModule 
 | |
| {
 | |
|   GObject parent_instance;
 | |
| 
 | |
|   guint use_count;
 | |
|   GSList *type_infos;
 | |
|   GSList *interface_infos;
 | |
| 
 | |
|   /*< public >*/
 | |
|   gchar *name;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * GTypeModuleClass:
 | |
|  * @parent_class: the parent class
 | |
|  * @load: loads the module and registers one or more types using
 | |
|  *  g_type_module_register_type().
 | |
|  * @unload: unloads the module
 | |
|  * 
 | |
|  * In order to implement dynamic loading of types based on #GTypeModule, 
 | |
|  * the @load and @unload functions in #GTypeModuleClass must be implemented.
 | |
|  */
 | |
| struct _GTypeModuleClass
 | |
| {
 | |
|   GObjectClass parent_class;
 | |
| 
 | |
|   /*< public >*/
 | |
|   gboolean (* load)   (GTypeModule *module);
 | |
|   void     (* unload) (GTypeModule *module);
 | |
| 
 | |
|   /*< private >*/
 | |
|   /* Padding for future expansion */
 | |
|   void (*reserved1) (void);
 | |
|   void (*reserved2) (void);
 | |
|   void (*reserved3) (void);
 | |
|   void (*reserved4) (void);
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * G_DEFINE_DYNAMIC_TYPE:
 | |
|  * @TN: The name of the new type, in Camel case.
 | |
|  * @t_n: The name of the new type, in lowercase, with words
 | |
|  *  separated by '_'.
 | |
|  * @T_P: The #GType of the parent type.
 | |
|  * 
 | |
|  * A convenience macro for dynamic type implementations, which declares a
 | |
|  * class initialization function, an instance initialization function (see 
 | |
|  * #GTypeInfo for information about these) and a static variable named 
 | |
|  * @t_n<!-- -->_parent_class pointing to the parent class. Furthermore, 
 | |
|  * it defines a `*_get_type()` and a static `*_register_type()` functions
 | |
|  * for use in your `module_init()`.
 | |
|  *
 | |
|  * See G_DEFINE_DYNAMIC_TYPE_EXTENDED() for an example.
 | |
|  * 
 | |
|  * Since: 2.14
 | |
|  */
 | |
| #define G_DEFINE_DYNAMIC_TYPE(TN, t_n, T_P)          G_DEFINE_DYNAMIC_TYPE_EXTENDED (TN, t_n, T_P, 0, {})
 | |
| /**
 | |
|  * G_DEFINE_DYNAMIC_TYPE_EXTENDED:
 | |
|  * @TypeName: The name of the new type, in Camel case.
 | |
|  * @type_name: The name of the new type, in lowercase, with words
 | |
|  *  separated by '_'.
 | |
|  * @TYPE_PARENT: The #GType of the parent type.
 | |
|  * @flags: #GTypeFlags to pass to g_type_module_register_type()
 | |
|  * @CODE: Custom code that gets inserted in the *_get_type() function.
 | |
|  * 
 | |
|  * A more general version of G_DEFINE_DYNAMIC_TYPE() which
 | |
|  * allows to specify #GTypeFlags and custom code.
 | |
|  * 
 | |
|  * |[
 | |
|  * G_DEFINE_DYNAMIC_TYPE_EXTENDED (GtkGadget,
 | |
|  *                                 gtk_gadget,
 | |
|  *                                 GTK_TYPE_THING,
 | |
|  *                                 0,
 | |
|  *                                 G_IMPLEMENT_INTERFACE_DYNAMIC (TYPE_GIZMO,
 | |
|  *                                                                gtk_gadget_gizmo_init));
 | |
|  * ]|
 | |
|  * expands to
 | |
|  * |[
 | |
|  * static void     gtk_gadget_init              (GtkGadget      *self);
 | |
|  * static void     gtk_gadget_class_init        (GtkGadgetClass *klass);
 | |
|  * static void     gtk_gadget_class_finalize    (GtkGadgetClass *klass);
 | |
|  * 
 | |
|  * static gpointer gtk_gadget_parent_class = NULL;
 | |
|  * static GType    gtk_gadget_type_id = 0;
 | |
|  * 
 | |
|  * static void     gtk_gadget_class_intern_init (gpointer klass)
 | |
|  * {
 | |
|  *   gtk_gadget_parent_class = g_type_class_peek_parent (klass); 
 | |
|  *   gtk_gadget_class_init ((GtkGadgetClass*) klass); 
 | |
|  * }
 | |
|  * 
 | |
|  * GType
 | |
|  * gtk_gadget_get_type (void)
 | |
|  * {
 | |
|  *   return gtk_gadget_type_id;
 | |
|  * }
 | |
|  * 
 | |
|  * static void
 | |
|  * gtk_gadget_register_type (GTypeModule *type_module)
 | |
|  * {
 | |
|  *   const GTypeInfo g_define_type_info = {
 | |
|  *     sizeof (GtkGadgetClass),
 | |
|  *     (GBaseInitFunc) NULL,
 | |
|  *     (GBaseFinalizeFunc) NULL,
 | |
|  *     (GClassInitFunc) gtk_gadget_class_intern_init,
 | |
|  *     (GClassFinalizeFunc) gtk_gadget_class_finalize,
 | |
|  *     NULL,   // class_data
 | |
|  *     sizeof (GtkGadget),
 | |
|  *     0,      // n_preallocs
 | |
|  *     (GInstanceInitFunc) gtk_gadget_init, 
 | |
|  *     NULL    // value_table
 | |
|  *   };
 | |
|  *   gtk_gadget_type_id = g_type_module_register_type (type_module,
 | |
|  *                                                     GTK_TYPE_THING,
 | |
|  *                                                     "GtkGadget",
 | |
|  *                                                     &g_define_type_info,
 | |
|  *                                                     (GTypeFlags) flags);
 | |
|  *   {
 | |
|  *     const GInterfaceInfo g_implement_interface_info = {
 | |
|  *       (GInterfaceInitFunc) gtk_gadget_gizmo_init
 | |
|  *     };
 | |
|  *     g_type_module_add_interface (type_module, g_define_type_id, TYPE_GIZMO, &g_implement_interface_info);
 | |
|  *   }
 | |
|  * }
 | |
|  * ]|
 | |
|  * 
 | |
|  * Since: 2.14
 | |
|  */
 | |
| #define G_DEFINE_DYNAMIC_TYPE_EXTENDED(TypeName, type_name, TYPE_PARENT, flags, CODE) \
 | |
| static void     type_name##_init              (TypeName        *self); \
 | |
| static void     type_name##_class_init        (TypeName##Class *klass); \
 | |
| static void     type_name##_class_finalize    (TypeName##Class *klass); \
 | |
| static gpointer type_name##_parent_class = NULL; \
 | |
| static GType    type_name##_type_id = 0; \
 | |
| static gint     TypeName##_private_offset; \
 | |
| \
 | |
| _G_DEFINE_TYPE_EXTENDED_CLASS_INIT(TypeName, type_name) \
 | |
| \
 | |
| G_GNUC_UNUSED \
 | |
| static inline gpointer \
 | |
| type_name##_get_instance_private (TypeName *self) \
 | |
| { \
 | |
|   return (G_STRUCT_MEMBER_P (self, TypeName##_private_offset)); \
 | |
| } \
 | |
| \
 | |
| GType \
 | |
| type_name##_get_type (void) \
 | |
| { \
 | |
|   return type_name##_type_id; \
 | |
| } \
 | |
| static void \
 | |
| type_name##_register_type (GTypeModule *type_module) \
 | |
| { \
 | |
|   GType g_define_type_id G_GNUC_UNUSED; \
 | |
|   const GTypeInfo g_define_type_info = { \
 | |
|     sizeof (TypeName##Class), \
 | |
|     (GBaseInitFunc) NULL, \
 | |
|     (GBaseFinalizeFunc) NULL, \
 | |
|     (GClassInitFunc) type_name##_class_intern_init, \
 | |
|     (GClassFinalizeFunc) type_name##_class_finalize, \
 | |
|     NULL,   /* class_data */ \
 | |
|     sizeof (TypeName), \
 | |
|     0,      /* n_preallocs */ \
 | |
|     (GInstanceInitFunc) type_name##_init, \
 | |
|     NULL    /* value_table */ \
 | |
|   }; \
 | |
|   type_name##_type_id = g_type_module_register_type (type_module, \
 | |
| 						     TYPE_PARENT, \
 | |
| 						     #TypeName, \
 | |
| 						     &g_define_type_info, \
 | |
| 						     (GTypeFlags) flags); \
 | |
|   g_define_type_id = type_name##_type_id; \
 | |
|   { CODE ; } \
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * G_IMPLEMENT_INTERFACE_DYNAMIC:
 | |
|  * @TYPE_IFACE: The #GType of the interface to add
 | |
|  * @iface_init: The interface init function
 | |
|  *
 | |
|  * A convenience macro to ease interface addition in the @_C_ section
 | |
|  * of G_DEFINE_DYNAMIC_TYPE_EXTENDED(). See G_DEFINE_DYNAMIC_TYPE_EXTENDED()
 | |
|  * for an example.
 | |
|  *
 | |
|  * Note that this macro can only be used together with the
 | |
|  * G_DEFINE_DYNAMIC_TYPE_EXTENDED macros, since it depends on variable
 | |
|  * names from that macro.
 | |
|  *
 | |
|  * Since: 2.24
 | |
|  */
 | |
| #define G_IMPLEMENT_INTERFACE_DYNAMIC(TYPE_IFACE, iface_init)       { \
 | |
|   const GInterfaceInfo g_implement_interface_info = { \
 | |
|     (GInterfaceInitFunc) iface_init, NULL, NULL      \
 | |
|   }; \
 | |
|   g_type_module_add_interface (type_module, g_define_type_id, TYPE_IFACE, &g_implement_interface_info); \
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * G_ADD_PRIVATE_DYNAMIC:
 | |
|  * @TypeName: the name of the type in CamelCase
 | |
|  *
 | |
|  * A convenience macro to ease adding private data to instances of a new dynamic
 | |
|  * type in the @_C_ section of G_DEFINE_DYNAMIC_TYPE_EXTENDED(). See
 | |
|  * G_ADD_PRIVATE() for details, it is similar but for static types.
 | |
|  *
 | |
|  * Note that this macro can only be used together with the
 | |
|  * G_DEFINE_DYNAMIC_TYPE_EXTENDED macros, since it depends on variable
 | |
|  * names from that macro.
 | |
|  *
 | |
|  * Since: 2.38
 | |
|  */
 | |
| #define G_ADD_PRIVATE_DYNAMIC(TypeName)         { \
 | |
|   TypeName##_private_offset = sizeof (TypeName##Private); \
 | |
| }
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType    g_type_module_get_type       (void) G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean g_type_module_use            (GTypeModule          *module);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_type_module_unuse          (GTypeModule          *module);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_type_module_set_name       (GTypeModule          *module,
 | |
|                                        const gchar          *name);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType    g_type_module_register_type  (GTypeModule          *module,
 | |
|                                        GType                 parent_type,
 | |
|                                        const gchar          *type_name,
 | |
|                                        const GTypeInfo      *type_info,
 | |
|                                        GTypeFlags            flags);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void     g_type_module_add_interface  (GTypeModule          *module,
 | |
|                                        GType                 instance_type,
 | |
|                                        GType                 interface_type,
 | |
|                                        const GInterfaceInfo *interface_info);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType    g_type_module_register_enum  (GTypeModule          *module,
 | |
|                                        const gchar          *name,
 | |
|                                        const GEnumValue     *const_static_values);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType    g_type_module_register_flags (GTypeModule          *module,
 | |
|                                        const gchar          *name,
 | |
|                                        const GFlagsValue    *const_static_values);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_TYPE_MODULE_H__ */
 | |
| /* GObject - GLib Type, Object, Parameter and Signal Library
 | |
|  * Copyright (C) 2000 Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General
 | |
|  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| #ifndef __G_TYPE_PLUGIN_H__
 | |
| #define __G_TYPE_PLUGIN_H__
 | |
| 
 | |
| #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
 | |
| #error "Only <glib-object.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* --- type macros --- */
 | |
| #define G_TYPE_TYPE_PLUGIN		(g_type_plugin_get_type ())
 | |
| #define G_TYPE_PLUGIN(inst)		(lG_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TYPE_PLUGIN, GTypePlugin))
 | |
| #define G_TYPE_PLUGIN_CLASS(vtable)	(G_TYPE_CHECK_CLASS_CAST ((vtable), G_TYPE_TYPE_PLUGIN, GTypePluginClass))
 | |
| #define G_IS_TYPE_PLUGIN(inst)		(lG_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TYPE_PLUGIN))
 | |
| #define G_IS_TYPE_PLUGIN_CLASS(vtable)	(G_TYPE_CHECK_CLASS_TYPE ((vtable), G_TYPE_TYPE_PLUGIN))
 | |
| #define G_TYPE_PLUGIN_GET_CLASS(inst)	(G_TYPE_INSTANCE_GET_INTERFACE ((inst), G_TYPE_TYPE_PLUGIN, GTypePluginClass))
 | |
| 
 | |
| 
 | |
| /* --- typedefs & structures --- */
 | |
| typedef struct _GTypePluginClass		   GTypePluginClass;
 | |
| /**
 | |
|  * GTypePluginUse:
 | |
|  * @plugin: the #GTypePlugin whose use count should be increased
 | |
|  * 
 | |
|  * The type of the @use_plugin function of #GTypePluginClass, which gets called
 | |
|  * to increase the use count of @plugin.
 | |
|  */
 | |
| typedef void  (*GTypePluginUse)			  (GTypePlugin     *plugin);
 | |
| /**
 | |
|  * GTypePluginUnuse:
 | |
|  * @plugin: the #GTypePlugin whose use count should be decreased
 | |
|  * 
 | |
|  * The type of the @unuse_plugin function of #GTypePluginClass.
 | |
|  */
 | |
| typedef void  (*GTypePluginUnuse)		  (GTypePlugin     *plugin);
 | |
| /**
 | |
|  * GTypePluginCompleteTypeInfo:
 | |
|  * @plugin: the #GTypePlugin
 | |
|  * @g_type: the #GType whose info is completed
 | |
|  * @info: the #GTypeInfo struct to fill in
 | |
|  * @value_table: the #GTypeValueTable to fill in
 | |
|  * 
 | |
|  * The type of the @complete_type_info function of #GTypePluginClass.
 | |
|  */
 | |
| typedef void  (*GTypePluginCompleteTypeInfo)	  (GTypePlugin     *plugin,
 | |
| 						   GType            g_type,
 | |
| 						   GTypeInfo       *info,
 | |
| 						   GTypeValueTable *value_table);
 | |
| /**
 | |
|  * GTypePluginCompleteInterfaceInfo:
 | |
|  * @plugin: the #GTypePlugin
 | |
|  * @instance_type: the #GType of an instantiable type to which the interface
 | |
|  *  is added
 | |
|  * @interface_type: the #GType of the interface whose info is completed
 | |
|  * @info: the #GInterfaceInfo to fill in
 | |
|  * 
 | |
|  * The type of the @complete_interface_info function of #GTypePluginClass.
 | |
|  */
 | |
| typedef void  (*GTypePluginCompleteInterfaceInfo) (GTypePlugin     *plugin,
 | |
| 						   GType            instance_type,
 | |
| 						   GType            interface_type,
 | |
| 						   GInterfaceInfo  *info);
 | |
| /**
 | |
|  * GTypePlugin:
 | |
|  * 
 | |
|  * The GTypePlugin typedef is used as a placeholder 
 | |
|  * for objects that implement the GTypePlugin interface.
 | |
|  */
 | |
| /**
 | |
|  * GTypePluginClass:
 | |
|  * @use_plugin: Increases the use count of the plugin.
 | |
|  * @unuse_plugin: Decreases the use count of the plugin.
 | |
|  * @complete_type_info: Fills in the #GTypeInfo and 
 | |
|  *  #GTypeValueTable structs for the type. The structs are initialized
 | |
|  *  with `memset(s, 0, sizeof (s))` before calling this function.
 | |
|  * @complete_interface_info: Fills in missing parts of the #GInterfaceInfo 
 | |
|  *  for the interface. The structs is initialized with
 | |
|  *  `memset(s, 0, sizeof (s))` before calling this function.
 | |
|  * 
 | |
|  * The #GTypePlugin interface is used by the type system in order to handle
 | |
|  * the lifecycle of dynamically loaded types.
 | |
|  */
 | |
| struct _GTypePluginClass
 | |
| {
 | |
|   /*< private >*/
 | |
|   GTypeInterface		   base_iface;
 | |
|   
 | |
|   /*< public >*/
 | |
|   GTypePluginUse		   use_plugin;
 | |
|   GTypePluginUnuse		   unuse_plugin;
 | |
|   GTypePluginCompleteTypeInfo	   complete_type_info;
 | |
|   GTypePluginCompleteInterfaceInfo complete_interface_info;
 | |
| };
 | |
| 
 | |
| 
 | |
| /* --- prototypes --- */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType	g_type_plugin_get_type			(void)	G_GNUC_CONST;
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	g_type_plugin_use			(GTypePlugin	 *plugin);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	g_type_plugin_unuse			(GTypePlugin	 *plugin);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	g_type_plugin_complete_type_info	(GTypePlugin     *plugin,
 | |
| 						 GType            g_type,
 | |
| 						 GTypeInfo       *info,
 | |
| 						 GTypeValueTable *value_table);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void	g_type_plugin_complete_interface_info	(GTypePlugin     *plugin,
 | |
| 						 GType            instance_type,
 | |
| 						 GType            interface_type,
 | |
| 						 GInterfaceInfo  *info);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_TYPE_PLUGIN_H__ */
 | |
| /* GObject - GLib Type, Object, Parameter and Signal Library
 | |
|  * Copyright (C) 2001 Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General
 | |
|  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  * gvaluearray.h: GLib array type holding GValues
 | |
|  */
 | |
| #ifndef __G_VALUE_ARRAY_H__
 | |
| #define __G_VALUE_ARRAY_H__
 | |
| 
 | |
| #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
 | |
| #error "Only <glib-object.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /**
 | |
|  * G_TYPE_VALUE_ARRAY:
 | |
|  *
 | |
|  * The type ID of the "GValueArray" type which is a boxed type,
 | |
|  * used to pass around pointers to GValueArrays.
 | |
|  *
 | |
|  * Deprecated: 2.32: Use #GArray instead of #GValueArray
 | |
|  */
 | |
| #define G_TYPE_VALUE_ARRAY (g_value_array_get_type ())
 | |
| 
 | |
| /* --- typedefs & structs --- */
 | |
| typedef struct _GValueArray GValueArray;
 | |
| /**
 | |
|  * GValueArray:
 | |
|  * @n_values: number of values contained in the array
 | |
|  * @values: array of values
 | |
|  * 
 | |
|  * A #GValueArray contains an array of #GValue elements.
 | |
|  */
 | |
| struct _GValueArray
 | |
| {
 | |
|   guint   n_values;
 | |
|   GValue *values;
 | |
| 
 | |
|   /*< private >*/
 | |
|   guint   n_prealloced;
 | |
| };
 | |
| 
 | |
| /* --- prototypes --- */
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(GArray)
 | |
| GType           g_value_array_get_type       (void) G_GNUC_CONST;
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(GArray)
 | |
| GValue*		g_value_array_get_nth	     (GValueArray	*value_array,
 | |
| 					      guint		 index_);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(GArray)
 | |
| GValueArray*	g_value_array_new	     (guint		 n_prealloced);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(GArray)
 | |
| void		g_value_array_free	     (GValueArray	*value_array);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(GArray)
 | |
| GValueArray*	g_value_array_copy	     (const GValueArray *value_array);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(GArray)
 | |
| GValueArray*	g_value_array_prepend	     (GValueArray	*value_array,
 | |
| 					      const GValue	*value);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(GArray)
 | |
| GValueArray*	g_value_array_append	     (GValueArray	*value_array,
 | |
| 					      const GValue	*value);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(GArray)
 | |
| GValueArray*	g_value_array_insert	     (GValueArray	*value_array,
 | |
| 					      guint		 index_,
 | |
| 					      const GValue	*value);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(GArray)
 | |
| GValueArray*	g_value_array_remove	     (GValueArray	*value_array,
 | |
| 					      guint		 index_);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(GArray)
 | |
| GValueArray*	g_value_array_sort	     (GValueArray	*value_array,
 | |
| 					      GCompareFunc	 compare_func);
 | |
| 
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(GArray)
 | |
| GValueArray*	g_value_array_sort_with_data (GValueArray	*value_array,
 | |
| 					      GCompareDataFunc	 compare_func,
 | |
| 					      gpointer		 user_data);
 | |
| 
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_VALUE_ARRAY_H__ */
 | |
| /* GObject - GLib Type, Object, Parameter and Signal Library
 | |
|  * Copyright (C) 1997-1999, 2000-2001 Tim Janik and Red Hat, Inc.
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General
 | |
|  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  * gvaluetypes.h: GLib default values
 | |
|  */
 | |
| #ifndef __G_VALUETYPES_H__
 | |
| #define __G_VALUETYPES_H__
 | |
| 
 | |
| #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
 | |
| #error "Only <glib-object.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| /* --- type macros --- */
 | |
| /**
 | |
|  * G_VALUE_HOLDS_CHAR:
 | |
|  * @value: a valid #GValue structure
 | |
|  * 
 | |
|  * Checks whether the given #GValue can hold values of type %G_TYPE_CHAR.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_CHAR(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_CHAR))
 | |
| /**
 | |
|  * G_VALUE_HOLDS_UCHAR:
 | |
|  * @value: a valid #GValue structure
 | |
|  * 
 | |
|  * Checks whether the given #GValue can hold values of type %G_TYPE_UCHAR.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_UCHAR(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_UCHAR))
 | |
| /**
 | |
|  * G_VALUE_HOLDS_BOOLEAN:
 | |
|  * @value: a valid #GValue structure
 | |
|  * 
 | |
|  * Checks whether the given #GValue can hold values of type %G_TYPE_BOOLEAN.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_BOOLEAN(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_BOOLEAN))
 | |
| /**
 | |
|  * G_VALUE_HOLDS_INT:
 | |
|  * @value: a valid #GValue structure
 | |
|  * 
 | |
|  * Checks whether the given #GValue can hold values of type %G_TYPE_INT.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_INT(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_INT))
 | |
| /**
 | |
|  * G_VALUE_HOLDS_UINT:
 | |
|  * @value: a valid #GValue structure
 | |
|  * 
 | |
|  * Checks whether the given #GValue can hold values of type %G_TYPE_UINT.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_UINT(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_UINT))
 | |
| /**
 | |
|  * G_VALUE_HOLDS_LONG:
 | |
|  * @value: a valid #GValue structure
 | |
|  * 
 | |
|  * Checks whether the given #GValue can hold values of type %G_TYPE_LONG.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_LONG(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_LONG))
 | |
| /**
 | |
|  * G_VALUE_HOLDS_ULONG:
 | |
|  * @value: a valid #GValue structure
 | |
|  * 
 | |
|  * Checks whether the given #GValue can hold values of type %G_TYPE_ULONG.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_ULONG(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_ULONG))
 | |
| /**
 | |
|  * G_VALUE_HOLDS_INT64:
 | |
|  * @value: a valid #GValue structure
 | |
|  * 
 | |
|  * Checks whether the given #GValue can hold values of type %G_TYPE_INT64.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_INT64(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_INT64))
 | |
| /**
 | |
|  * G_VALUE_HOLDS_UINT64:
 | |
|  * @value: a valid #GValue structure
 | |
|  * 
 | |
|  * Checks whether the given #GValue can hold values of type %G_TYPE_UINT64.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_UINT64(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_UINT64))
 | |
| /**
 | |
|  * G_VALUE_HOLDS_FLOAT:
 | |
|  * @value: a valid #GValue structure
 | |
|  * 
 | |
|  * Checks whether the given #GValue can hold values of type %G_TYPE_FLOAT.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_FLOAT(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_FLOAT))
 | |
| /**
 | |
|  * G_VALUE_HOLDS_DOUBLE:
 | |
|  * @value: a valid #GValue structure
 | |
|  * 
 | |
|  * Checks whether the given #GValue can hold values of type %G_TYPE_DOUBLE.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_DOUBLE(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_DOUBLE))
 | |
| /**
 | |
|  * G_VALUE_HOLDS_STRING:
 | |
|  * @value: a valid #GValue structure
 | |
|  * 
 | |
|  * Checks whether the given #GValue can hold values of type %G_TYPE_STRING.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_STRING(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_STRING))
 | |
| /**
 | |
|  * G_VALUE_HOLDS_POINTER:
 | |
|  * @value: a valid #GValue structure
 | |
|  * 
 | |
|  * Checks whether the given #GValue can hold values of type %G_TYPE_POINTER.
 | |
|  * 
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_POINTER(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_POINTER))
 | |
| /**
 | |
|  * G_TYPE_GTYPE:
 | |
|  * 
 | |
|  * The type for #GType.
 | |
|  */
 | |
| #define	G_TYPE_GTYPE			 (g_gtype_get_type())
 | |
| /**
 | |
|  * G_VALUE_HOLDS_GTYPE:
 | |
|  * @value: a valid #GValue structure
 | |
|  * 
 | |
|  * Checks whether the given #GValue can hold values of type %G_TYPE_GTYPE.
 | |
|  * 
 | |
|  * Since: 2.12
 | |
|  * Returns: %TRUE on success.
 | |
|  */
 | |
| #define G_VALUE_HOLDS_GTYPE(value)	 (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_GTYPE))
 | |
| /**
 | |
|  * G_VALUE_HOLDS_VARIANT:
 | |
|  * @value: a valid #GValue structure
 | |
|  *
 | |
|  * Checks whether the given #GValue can hold values of type %G_TYPE_VARIANT.
 | |
|  *
 | |
|  * Returns: %TRUE on success.
 | |
|  *
 | |
|  * Since: 2.26
 | |
|  */
 | |
| #define G_VALUE_HOLDS_VARIANT(value)     (G_TYPE_CHECK_VALUE_TYPE ((value), G_TYPE_VARIANT))
 | |
| 
 | |
| 
 | |
| /* --- prototypes --- */
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_value_set_schar)
 | |
| void                  g_value_set_char          (GValue       *value,
 | |
|                                                  gchar         v_char);
 | |
| GLIB_DEPRECATED_IN_2_32_FOR(g_value_get_schar)
 | |
| gchar                 g_value_get_char          (const GValue *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_value_set_schar		(GValue	      *value,
 | |
| 						 gint8	       v_char);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint8		      g_value_get_schar		(const GValue *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_value_set_uchar		(GValue	      *value,
 | |
| 						 guchar	       v_uchar);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guchar		      g_value_get_uchar		(const GValue *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_value_set_boolean	(GValue	      *value,
 | |
| 						 gboolean      v_boolean);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gboolean	      g_value_get_boolean	(const GValue *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_value_set_int		(GValue	      *value,
 | |
| 						 gint	       v_int);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint		      g_value_get_int		(const GValue *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_value_set_uint		(GValue	      *value,
 | |
| 						 guint	       v_uint);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint		      g_value_get_uint		(const GValue *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_value_set_long		(GValue	      *value,
 | |
| 						 glong	       v_long);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| glong		      g_value_get_long		(const GValue *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_value_set_ulong		(GValue	      *value,
 | |
| 						 gulong	       v_ulong);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gulong		      g_value_get_ulong		(const GValue *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_value_set_int64		(GValue	      *value,
 | |
| 						 gint64	       v_int64);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gint64		      g_value_get_int64		(const GValue *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_value_set_uint64	(GValue	      *value,
 | |
| 						 guint64      v_uint64);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| guint64		      g_value_get_uint64	(const GValue *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_value_set_float		(GValue	      *value,
 | |
| 						 gfloat	       v_float);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gfloat		      g_value_get_float		(const GValue *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_value_set_double	(GValue	      *value,
 | |
| 						 gdouble       v_double);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gdouble		      g_value_get_double	(const GValue *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_value_set_string	(GValue	      *value,
 | |
| 						 const gchar  *v_string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_value_set_static_string (GValue	      *value,
 | |
| 						 const gchar  *v_string);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| const gchar *         g_value_get_string	(const GValue *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*		      g_value_dup_string	(const GValue *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_value_set_pointer	(GValue	      *value,
 | |
| 						 gpointer      v_pointer);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gpointer	      g_value_get_pointer	(const GValue *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType		      g_gtype_get_type		(void);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_value_set_gtype	        (GValue	      *value,
 | |
| 						 GType         v_gtype);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType	              g_value_get_gtype	        (const GValue *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_value_set_variant	(GValue	      *value,
 | |
| 						 GVariant     *variant);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void		      g_value_take_variant	(GValue	      *value,
 | |
| 						 GVariant     *variant);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant*	      g_value_get_variant	(const GValue *value);
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GVariant*	      g_value_dup_variant	(const GValue *value);
 | |
| 
 | |
| 
 | |
| /* Convenience for registering new pointer types */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| GType                 g_pointer_type_register_static (const gchar *name);
 | |
| 
 | |
| /* debugging aid, describe value contents as string */
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| gchar*                g_strdup_value_contents   (const GValue *value);
 | |
| 
 | |
| 
 | |
| GLIB_AVAILABLE_IN_ALL
 | |
| void g_value_take_string		        (GValue		   *value,
 | |
| 						 gchar		   *v_string);
 | |
| GLIB_DEPRECATED_FOR(g_value_take_string)
 | |
| void g_value_set_string_take_ownership          (GValue            *value,
 | |
|                                                  gchar             *v_string);
 | |
| 
 | |
| 
 | |
| /* humpf, need a C representable type name for G_TYPE_STRING */
 | |
| /**
 | |
|  * gchararray:
 | |
|  * 
 | |
|  * A C representable type name for #G_TYPE_STRING.
 | |
|  */
 | |
| typedef gchar* gchararray;
 | |
| 
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif /* __G_VALUETYPES_H__ */
 | |
| 
 | |
| /*
 | |
|  * Copyright © 2015 Canonical Limited
 | |
|  *
 | |
|  * This library is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * License as published by the Free Software Foundation; either
 | |
|  * version 2 of the licence, 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  * Author: Ryan Lortie <desrt@desrt.ca>
 | |
|  */
 | |
| 
 | |
| #if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
 | |
| #error "Only <glib-object.h> can be included directly."
 | |
| #endif
 | |
| 
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GObject, g_object_unref)
 | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GInitiallyUnowned, g_object_unref)
 | |
| G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(GValue, g_value_unset)
 | |
| 
 | |
| #undef __GLIB_GOBJECT_H_INSIDE__
 | |
| 
 | |
| GLIB_AVAILABLE_IN_2_50
 | |
| void                            gobject_init                            (void);
 | |
| 
 | |
| #endif /* __GLIB_GOBJECT_H__ */
 | |
| 
 | |
| #define GUM_TYPE_API_RESOLVER (gum_api_resolver_get_type ())
 | |
| #define GUM_API_RESOLVER(obj) (lG_TYPE_CHECK_INSTANCE_CAST ((obj),\
 | |
|     GUM_TYPE_API_RESOLVER, GumApiResolver))
 | |
| #define GUM_API_RESOLVER_CAST(obj) ((GumApiResolver *) (obj))
 | |
| #define GUM_IS_API_RESOLVER(obj) (lG_TYPE_CHECK_INSTANCE_TYPE ((obj),\
 | |
|     GUM_TYPE_API_RESOLVER))
 | |
| #define GUM_API_RESOLVER_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE (\
 | |
|     (inst), GUM_TYPE_API_RESOLVER, GumApiResolverIface))
 | |
| 
 | |
| typedef struct _GumApiResolver GumApiResolver;
 | |
| typedef struct _GumApiResolverIface GumApiResolverIface;
 | |
| 
 | |
| typedef struct _GumApiDetails GumApiDetails;
 | |
| 
 | |
| typedef gboolean (* GumFoundApiFunc) (const GumApiDetails * details,
 | |
|     gpointer user_data);
 | |
| 
 | |
| struct _GumApiResolverIface
 | |
| {
 | |
|   GTypeInterface parent;
 | |
| 
 | |
|   void (* enumerate_matches) (GumApiResolver * self, const gchar * query,
 | |
|       GumFoundApiFunc func, gpointer user_data, GError ** error);
 | |
| };
 | |
| 
 | |
| struct _GumApiDetails
 | |
| {
 | |
|   const gchar * name;
 | |
|   GumAddress address;
 | |
| };
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GUM_API GType gum_api_resolver_get_type (void);
 | |
| 
 | |
| GUM_API GumApiResolver * gum_api_resolver_make (const gchar * type);
 | |
| 
 | |
| GUM_API void gum_api_resolver_enumerate_matches (GumApiResolver * self,
 | |
|     const gchar * query, GumFoundApiFunc func, gpointer user_data,
 | |
|     GError ** error);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2008-2010 Ole André Vadla Ravnås <ole.andre.ravnas@tillitech.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_BACKTRACER_H__
 | |
| #define __GUM_BACKTRACER_H__
 | |
| 
 | |
| /*
 | |
|  * Copyright (C) 2008-2010 Ole André Vadla Ravnås <ole.andre.ravnas@tillitech.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_RETURN_ADDRESS_H__
 | |
| #define __GUM_RETURN_ADDRESS_H__
 | |
| 
 | |
| 
 | |
| typedef struct _GumReturnAddressDetails GumReturnAddressDetails;
 | |
| typedef gpointer GumReturnAddress;
 | |
| typedef struct _GumReturnAddressArray GumReturnAddressArray;
 | |
| 
 | |
| struct _GumReturnAddressDetails
 | |
| {
 | |
|   GumReturnAddress address;
 | |
|   gchar module_name[GUM_MAX_PATH + 1];
 | |
|   gchar function_name[GUM_MAX_SYMBOL_NAME + 1];
 | |
|   gchar file_name[GUM_MAX_PATH + 1];
 | |
|   guint line_number;
 | |
| };
 | |
| 
 | |
| struct _GumReturnAddressArray
 | |
| {
 | |
|   guint len;
 | |
|   GumReturnAddress items[GUM_MAX_BACKTRACE_DEPTH];
 | |
| };
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GUM_API gboolean gum_return_address_details_from_address (
 | |
|     GumReturnAddress address, GumReturnAddressDetails * details);
 | |
| 
 | |
| GUM_API gboolean gum_return_address_array_is_equal (
 | |
|     const GumReturnAddressArray * array1,
 | |
|     const GumReturnAddressArray * array2);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #define GUM_TYPE_BACKTRACER (gum_backtracer_get_type ())
 | |
| #define GUM_BACKTRACER(obj) (lG_TYPE_CHECK_INSTANCE_CAST ((obj),\
 | |
|     GUM_TYPE_BACKTRACER, GumBacktracer))
 | |
| #define GUM_BACKTRACER_CAST(obj) ((GumBacktracer *) (obj))
 | |
| #define GUM_IS_BACKTRACER(obj) (lG_TYPE_CHECK_INSTANCE_TYPE ((obj),\
 | |
|     GUM_TYPE_BACKTRACER))
 | |
| #define GUM_BACKTRACER_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE (\
 | |
|     (inst), GUM_TYPE_BACKTRACER, GumBacktracerIface))
 | |
| 
 | |
| typedef struct _GumBacktracer GumBacktracer;
 | |
| typedef struct _GumBacktracerIface GumBacktracerIface;
 | |
| 
 | |
| struct _GumBacktracerIface
 | |
| {
 | |
|   GTypeInterface parent;
 | |
| 
 | |
|   void (* generate) (GumBacktracer * self, const GumCpuContext * cpu_context,
 | |
|       GumReturnAddressArray * return_addresses);
 | |
| };
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GType gum_backtracer_get_type (void);
 | |
| 
 | |
| GUM_API GumBacktracer * gum_backtracer_make_accurate (void);
 | |
| GUM_API GumBacktracer * gum_backtracer_make_fuzzy (void);
 | |
| 
 | |
| GUM_API void gum_backtracer_generate (GumBacktracer * self,
 | |
|     const GumCpuContext * cpu_context,
 | |
|     GumReturnAddressArray * return_addresses);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2017 Ole André Vadla Ravnås <oleavr@nowsecure.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_CLOAK_H__
 | |
| #define __GUM_CLOAK_H__
 | |
| 
 | |
| /*
 | |
|  * Copyright (C) 2008-2010 Ole André Vadla Ravnås <ole.andre.ravnas@tillitech.com>
 | |
|  * Copyright (C) 2008 Christian Berentsen <jc.berentsen@gmail.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_MEMORY_H__
 | |
| #define __GUM_MEMORY_H__
 | |
| 
 | |
| 
 | |
| typedef guint GumMemoryOperation;
 | |
| typedef guint GumPageProtection;
 | |
| typedef struct _GumAddressSpec GumAddressSpec;
 | |
| typedef struct _GumMemoryRange GumMemoryRange;
 | |
| typedef struct _GumMatchPattern GumMatchPattern;
 | |
| 
 | |
| typedef gboolean (* GumMemoryIsNearFunc) (gpointer memory, gpointer address);
 | |
| 
 | |
| enum _GumMemoryOperation
 | |
| {
 | |
|   GUM_MEMOP_INVALID,
 | |
|   GUM_MEMOP_READ,
 | |
|   GUM_MEMOP_WRITE,
 | |
|   GUM_MEMOP_EXECUTE
 | |
| };
 | |
| 
 | |
| enum _GumPageProtection
 | |
| {
 | |
|   GUM_PAGE_NO_ACCESS = 0,
 | |
|   GUM_PAGE_READ      = (1 << 0),
 | |
|   GUM_PAGE_WRITE     = (1 << 1),
 | |
|   GUM_PAGE_EXECUTE   = (1 << 2),
 | |
| };
 | |
| 
 | |
| struct _GumAddressSpec
 | |
| {
 | |
|   gpointer near_address;
 | |
|   gsize max_distance;
 | |
| };
 | |
| 
 | |
| struct _GumMemoryRange
 | |
| {
 | |
|   GumAddress base_address;
 | |
|   gsize size;
 | |
| };
 | |
| 
 | |
| #define GUM_MEMORY_RANGE_INCLUDES(r, a) ((a) >= (r)->base_address && \
 | |
|     (a) < ((r)->base_address + (r)->size))
 | |
| 
 | |
| #define GUM_PAGE_RW ((GumPageProtection) (GUM_PAGE_READ | GUM_PAGE_WRITE))
 | |
| #define GUM_PAGE_RX ((GumPageProtection) (GUM_PAGE_READ | GUM_PAGE_EXECUTE))
 | |
| #define GUM_PAGE_RWX ((GumPageProtection) (GUM_PAGE_READ | GUM_PAGE_WRITE | GUM_PAGE_EXECUTE))
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef void (* GumMemoryPatchApplyFunc) (gpointer mem, gpointer user_data);
 | |
| typedef gboolean (* GumMemoryScanMatchFunc) (GumAddress address, gsize size,
 | |
|     gpointer user_data);
 | |
| 
 | |
| void gum_memory_init (void);
 | |
| void gum_memory_deinit (void);
 | |
| 
 | |
| guint gum_query_page_size (void);
 | |
| gboolean gum_query_is_rwx_supported (void);
 | |
| gboolean gum_memory_is_readable (GumAddress address, gsize len);
 | |
| guint8 * gum_memory_read (GumAddress address, gsize len, gsize * n_bytes_read);
 | |
| gboolean gum_memory_write (GumAddress address, const guint8 * bytes, gsize len);
 | |
| gboolean gum_memory_patch_code (GumAddress address, gsize size,
 | |
|     GumMemoryPatchApplyFunc apply, gpointer apply_data);
 | |
| 
 | |
| void gum_memory_scan (const GumMemoryRange * range,
 | |
|     const GumMatchPattern * pattern,
 | |
|     GumMemoryScanMatchFunc func, gpointer user_data);
 | |
| 
 | |
| GumMatchPattern * gum_match_pattern_new_from_string (const gchar * match_str);
 | |
| void gum_match_pattern_free (GumMatchPattern * pattern);
 | |
| 
 | |
| void gum_mprotect (gpointer address, gsize size, GumPageProtection page_prot);
 | |
| gboolean gum_try_mprotect (gpointer address, gsize size, GumPageProtection page_prot);
 | |
| 
 | |
| void gum_clear_cache (gpointer address, gsize size);
 | |
| 
 | |
| #define gum_new(struct_type, n_structs) \
 | |
|     ((struct_type *) gum_malloc (n_structs * sizeof (struct_type)))
 | |
| #define gum_new0(struct_type, n_structs) \
 | |
|     ((struct_type *) gum_malloc0 (n_structs * sizeof (struct_type)))
 | |
| 
 | |
| guint gum_peek_private_memory_usage (void);
 | |
| 
 | |
| gpointer gum_malloc (gsize size);
 | |
| gpointer gum_malloc0 (gsize size);
 | |
| gpointer gum_calloc (gsize count, gsize size);
 | |
| gpointer gum_realloc (gpointer mem, gsize size);
 | |
| gpointer gum_memdup (gconstpointer mem, gsize byte_size);
 | |
| void gum_free (gpointer mem);
 | |
| 
 | |
| gpointer gum_alloc_n_pages (guint n_pages, GumPageProtection page_prot);
 | |
| gpointer gum_alloc_n_pages_near (guint n_pages, GumPageProtection page_prot,
 | |
|     const GumAddressSpec * address_spec);
 | |
| gpointer gum_try_alloc_n_pages_near (guint n_pages, GumPageProtection page_prot,
 | |
|     const GumAddressSpec * address_spec);
 | |
| void gum_free_pages (gpointer mem);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2008-2015 Ole André Vadla Ravnås <ole.andre.ravnas@tillitech.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_PROCESS_H__
 | |
| #define __GUM_PROCESS_H__
 | |
| 
 | |
| 
 | |
| typedef gsize GumThreadId;
 | |
| typedef guint GumThreadState;
 | |
| typedef struct _GumThreadDetails GumThreadDetails;
 | |
| typedef struct _GumModuleDetails GumModuleDetails;
 | |
| typedef guint GumImportType;
 | |
| typedef guint GumExportType;
 | |
| typedef struct _GumImportDetails GumImportDetails;
 | |
| typedef struct _GumExportDetails GumExportDetails;
 | |
| typedef struct _GumRangeDetails GumRangeDetails;
 | |
| typedef struct _GumFileMapping GumFileMapping;
 | |
| typedef struct _GumMallocRangeDetails GumMallocRangeDetails;
 | |
| 
 | |
| enum _GumThreadState
 | |
| {
 | |
|   GUM_THREAD_RUNNING = 1,
 | |
|   GUM_THREAD_STOPPED,
 | |
|   GUM_THREAD_WAITING,
 | |
|   GUM_THREAD_UNINTERRUPTIBLE,
 | |
|   GUM_THREAD_HALTED
 | |
| };
 | |
| 
 | |
| struct _GumThreadDetails
 | |
| {
 | |
|   GumThreadId id;
 | |
|   GumThreadState state;
 | |
|   GumCpuContext cpu_context;
 | |
| };
 | |
| 
 | |
| struct _GumModuleDetails
 | |
| {
 | |
|   const gchar * name;
 | |
|   const GumMemoryRange * range;
 | |
|   const gchar * path;
 | |
| };
 | |
| 
 | |
| enum _GumImportType
 | |
| {
 | |
|   GUM_IMPORT_UNKNOWN,
 | |
|   GUM_IMPORT_FUNCTION,
 | |
|   GUM_IMPORT_VARIABLE
 | |
| };
 | |
| 
 | |
| enum _GumExportType
 | |
| {
 | |
|   GUM_EXPORT_FUNCTION = 1,
 | |
|   GUM_EXPORT_VARIABLE
 | |
| };
 | |
| 
 | |
| struct _GumImportDetails
 | |
| {
 | |
|   GumImportType type;
 | |
|   const gchar * name;
 | |
|   const gchar * module;
 | |
|   GumAddress address;
 | |
| };
 | |
| 
 | |
| struct _GumExportDetails
 | |
| {
 | |
|   GumExportType type;
 | |
|   const gchar * name;
 | |
|   GumAddress address;
 | |
| };
 | |
| 
 | |
| struct _GumRangeDetails
 | |
| {
 | |
|   const GumMemoryRange * range;
 | |
|   GumPageProtection prot;
 | |
|   const GumFileMapping * file;
 | |
| };
 | |
| 
 | |
| struct _GumFileMapping
 | |
| {
 | |
|   const gchar * path;
 | |
|   guint64 offset;
 | |
| };
 | |
| 
 | |
| struct _GumMallocRangeDetails
 | |
| {
 | |
|   const GumMemoryRange * range;
 | |
| };
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef void (* GumModifyThreadFunc) (GumThreadId thread_id,
 | |
|     GumCpuContext * cpu_context, gpointer user_data);
 | |
| typedef gboolean (* GumFoundThreadFunc) (const GumThreadDetails * details,
 | |
|     gpointer user_data);
 | |
| typedef gboolean (* GumFoundModuleFunc) (const GumModuleDetails * details,
 | |
|     gpointer user_data);
 | |
| typedef gboolean (* GumFoundImportFunc) (const GumImportDetails * details,
 | |
|     gpointer user_data);
 | |
| typedef gboolean (* GumFoundExportFunc) (const GumExportDetails * details,
 | |
|     gpointer user_data);
 | |
| typedef gboolean (* GumFoundRangeFunc) (const GumRangeDetails * details,
 | |
|     gpointer user_data);
 | |
| typedef gboolean (* GumFoundMallocRangeFunc) (
 | |
|     const GumMallocRangeDetails * details, gpointer user_data);
 | |
| 
 | |
| GUM_API GumOS gum_process_get_native_os (void);
 | |
| GUM_API gboolean gum_process_is_debugger_attached (void);
 | |
| GUM_API GumThreadId gum_process_get_current_thread_id (void);
 | |
| GUM_API gboolean gum_process_modify_thread (GumThreadId thread_id,
 | |
|     GumModifyThreadFunc func, gpointer user_data);
 | |
| GUM_API void gum_process_enumerate_threads (GumFoundThreadFunc func,
 | |
|     gpointer user_data);
 | |
| GUM_API void gum_process_enumerate_modules (GumFoundModuleFunc func,
 | |
|     gpointer user_data);
 | |
| GUM_API void gum_process_enumerate_ranges (GumPageProtection prot,
 | |
|     GumFoundRangeFunc func, gpointer user_data);
 | |
| GUM_API void gum_process_enumerate_malloc_ranges (
 | |
|     GumFoundMallocRangeFunc func, gpointer user_data);
 | |
| GUM_API gboolean gum_thread_try_get_range (GumMemoryRange * range);
 | |
| GUM_API gint gum_thread_get_system_error (void);
 | |
| GUM_API void gum_thread_set_system_error (gint value);
 | |
| GUM_API void gum_module_enumerate_imports (const gchar * module_name,
 | |
|     GumFoundImportFunc func, gpointer user_data);
 | |
| GUM_API void gum_module_enumerate_exports (const gchar * module_name,
 | |
|     GumFoundExportFunc func, gpointer user_data);
 | |
| GUM_API void gum_module_enumerate_ranges (const gchar * module_name,
 | |
|     GumPageProtection prot, GumFoundRangeFunc func, gpointer user_data);
 | |
| GUM_API GumAddress gum_module_find_base_address (const gchar * module_name);
 | |
| GUM_API GumAddress gum_module_find_export_by_name (const gchar * module_name,
 | |
|     const gchar * symbol_name);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GUM_API void gum_cloak_add_thread (GumThreadId id);
 | |
| GUM_API void gum_cloak_remove_thread (GumThreadId id);
 | |
| GUM_API gboolean gum_cloak_has_thread (GumThreadId id);
 | |
| 
 | |
| GUM_API void gum_cloak_add_range (const GumMemoryRange * range);
 | |
| GUM_API void gum_cloak_remove_range (const GumMemoryRange * range);
 | |
| GUM_API GArray * gum_cloak_clip_range (const GumMemoryRange * range);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2010 Ole André Vadla Ravnås <ole.andre.ravnas@tillitech.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_CODE_ALLOCATOR_H__
 | |
| #define __GUM_CODE_ALLOCATOR_H__
 | |
| 
 | |
| 
 | |
| typedef struct _GumCodeAllocator GumCodeAllocator;
 | |
| typedef struct _GumCodeSlice GumCodeSlice;
 | |
| typedef struct _GumCodeDeflector GumCodeDeflector;
 | |
| 
 | |
| struct _GumCodeAllocator
 | |
| {
 | |
|   gsize slice_size;
 | |
|   gsize pages_per_batch;
 | |
|   gsize slices_per_batch;
 | |
|   gsize pages_metadata_size;
 | |
| 
 | |
|   GSList * uncommitted_pages;
 | |
|   GHashTable * dirty_pages;
 | |
|   GList * free_slices;
 | |
| 
 | |
|   GSList * dispatchers;
 | |
| };
 | |
| 
 | |
| struct _GumCodeSlice
 | |
| {
 | |
|   gpointer data;
 | |
|   gsize size;
 | |
| };
 | |
| 
 | |
| struct _GumCodeDeflector
 | |
| {
 | |
|   gpointer return_address;
 | |
|   gpointer target;
 | |
|   gpointer trampoline;
 | |
| };
 | |
| 
 | |
| void gum_code_allocator_init (GumCodeAllocator * allocator, gsize slice_size);
 | |
| void gum_code_allocator_free (GumCodeAllocator * allocator);
 | |
| 
 | |
| GumCodeSlice * gum_code_allocator_alloc_slice (GumCodeAllocator * self);
 | |
| GumCodeSlice * gum_code_allocator_try_alloc_slice_near (GumCodeAllocator * self,
 | |
|     const GumAddressSpec * spec, gsize alignment);
 | |
| void gum_code_allocator_commit (GumCodeAllocator * self);
 | |
| void gum_code_slice_free (GumCodeSlice * slice);
 | |
| 
 | |
| GumCodeDeflector * gum_code_allocator_alloc_deflector (GumCodeAllocator * self,
 | |
|     const GumAddressSpec * caller, gpointer return_address, gpointer target,
 | |
|     gboolean dedicated);
 | |
| void gum_code_deflector_free (GumCodeDeflector * deflector);
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2016 Ole André Vadla Ravnås <oleavr@nowsecure.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_CODE_SEGMENT_H__
 | |
| #define __GUM_CODE_SEGMENT_H__
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GumCodeSegment GumCodeSegment;
 | |
| 
 | |
| gboolean gum_code_segment_is_supported (void);
 | |
| 
 | |
| GumCodeSegment * gum_code_segment_new (gsize size, const GumAddressSpec * spec);
 | |
| void gum_code_segment_free (GumCodeSegment * segment);
 | |
| 
 | |
| gpointer gum_code_segment_get_address (GumCodeSegment * self);
 | |
| gsize gum_code_segment_get_size (GumCodeSegment * self);
 | |
| gsize gum_code_segment_get_virtual_size (GumCodeSegment * self);
 | |
| 
 | |
| void gum_code_segment_realize (GumCodeSegment * self);
 | |
| void gum_code_segment_map (GumCodeSegment * self, gsize source_offset,
 | |
|     gsize source_size, gpointer target_address);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2009 Ole André Vadla Ravnås <ole.andre.ravnas@tillitech.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_EVENT_H__
 | |
| #define __GUM_EVENT_H__
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef guint GumEventType;
 | |
| 
 | |
| typedef union _GumEvent GumEvent;
 | |
| 
 | |
| typedef struct _GumAnyEvent   GumAnyEvent;
 | |
| typedef struct _GumCallEvent  GumCallEvent;
 | |
| typedef struct _GumRetEvent   GumRetEvent;
 | |
| typedef struct _GumExecEvent  GumExecEvent;
 | |
| 
 | |
| enum _GumEventType
 | |
| {
 | |
|   GUM_NOTHING     = 0,
 | |
|   GUM_CALL        = 1 << 0,
 | |
|   GUM_RET         = 1 << 1,
 | |
|   GUM_EXEC        = 1 << 2,
 | |
| };
 | |
| 
 | |
| struct _GumAnyEvent
 | |
| {
 | |
|   GumEventType type;
 | |
| };
 | |
| 
 | |
| struct _GumCallEvent
 | |
| {
 | |
|   GumEventType type;
 | |
| 
 | |
|   gpointer location;
 | |
|   gpointer target;
 | |
|   gint depth;
 | |
| };
 | |
| 
 | |
| struct _GumRetEvent
 | |
| {
 | |
|   GumEventType type;
 | |
| 
 | |
|   gpointer location;
 | |
|   gpointer target;
 | |
|   gint depth;
 | |
| };
 | |
| 
 | |
| struct _GumExecEvent
 | |
| {
 | |
|   GumEventType type;
 | |
| 
 | |
|   gpointer location;
 | |
| };
 | |
| 
 | |
| union _GumEvent
 | |
| {
 | |
|   GumEventType type;
 | |
| 
 | |
|   GumAnyEvent any;
 | |
|   GumCallEvent call;
 | |
|   GumRetEvent ret;
 | |
|   GumExecEvent exec;
 | |
| };
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2009 Ole André Vadla Ravnås <ole.andre.ravnas@tillitech.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_EVENT_SINK_H__
 | |
| #define __GUM_EVENT_SINK_H__
 | |
| 
 | |
| 
 | |
| #define GUM_TYPE_EVENT_SINK (gum_event_sink_get_type ())
 | |
| #define GUM_EVENT_SINK(obj) (lG_TYPE_CHECK_INSTANCE_CAST ((obj),\
 | |
|     GUM_TYPE_EVENT_SINK, GumEventSink))
 | |
| #define GUM_IS_EVENT_SINK(obj) (lG_TYPE_CHECK_INSTANCE_TYPE ((obj),\
 | |
|     GUM_TYPE_EVENT_SINK))
 | |
| #define GUM_EVENT_SINK_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE (\
 | |
|     (inst), GUM_TYPE_EVENT_SINK, GumEventSinkIface))
 | |
| 
 | |
| typedef struct _GumEventSink GumEventSink;
 | |
| typedef struct _GumEventSinkIface GumEventSinkIface;
 | |
| 
 | |
| struct _GumEventSinkIface
 | |
| {
 | |
|   GTypeInterface parent;
 | |
| 
 | |
|   GumEventType (* query_mask) (GumEventSink * self);
 | |
|   void (* start) (GumEventSink * self);
 | |
|   void (* process) (GumEventSink * self, const GumEvent * ev);
 | |
|   void (* stop) (GumEventSink * self);
 | |
| };
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GType gum_event_sink_get_type (void);
 | |
| 
 | |
| GUM_API GumEventType gum_event_sink_query_mask (GumEventSink * self);
 | |
| GUM_API void gum_event_sink_start (GumEventSink * self);
 | |
| GUM_API void gum_event_sink_process (GumEventSink * self, const GumEvent * ev);
 | |
| GUM_API void gum_event_sink_stop (GumEventSink * self);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2015-2016 Ole André Vadla Ravnås <oleavr@nowsecure.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_EXCEPTOR_H__
 | |
| #define __GUM_EXCEPTOR_H__
 | |
| 
 | |
| #include <setjmp.h>
 | |
| 
 | |
| #define GUM_TYPE_EXCEPTOR (gum_exceptor_get_type ())
 | |
| #define GUM_EXCEPTOR(obj) (lG_TYPE_CHECK_INSTANCE_CAST ((obj),\
 | |
|     GUM_TYPE_EXCEPTOR, GumExceptor))
 | |
| #define GUM_EXCEPTOR_CAST(obj) ((GumExceptor *) (obj))
 | |
| #define GUM_EXCEPTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),\
 | |
|     GUM_TYPE_EXCEPTOR, GumExceptorClass))
 | |
| #define GUM_IS_EXCEPTOR(obj) (lG_TYPE_CHECK_INSTANCE_TYPE ((obj),\
 | |
|     GUM_TYPE_EXCEPTOR))
 | |
| #define GUM_IS_EXCEPTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE (\
 | |
|     (klass), GUM_TYPE_EXCEPTOR))
 | |
| #define GUM_EXCEPTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (\
 | |
|     (obj), GUM_TYPE_EXCEPTOR, GumExceptorClass))
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| #if defined (G_OS_WIN32) || defined (__APPLE__)
 | |
| # define GUM_NATIVE_SETJMP(env) setjmp (env)
 | |
| # define GUM_NATIVE_LONGJMP longjmp
 | |
|   typedef jmp_buf GumExceptorNativeJmpBuf;
 | |
| #else
 | |
| # define GUM_NATIVE_SETJMP(env) sigsetjmp (env, TRUE)
 | |
| # define GUM_NATIVE_LONGJMP siglongjmp
 | |
|   typedef sigjmp_buf GumExceptorNativeJmpBuf;
 | |
| #endif
 | |
| 
 | |
| typedef struct _GumExceptor GumExceptor;
 | |
| typedef struct _GumExceptorClass GumExceptorClass;
 | |
| typedef struct _GumExceptorPrivate GumExceptorPrivate;
 | |
| 
 | |
| typedef struct _GumExceptionDetails GumExceptionDetails;
 | |
| typedef guint GumExceptionType;
 | |
| typedef struct _GumExceptionMemoryDetails GumExceptionMemoryDetails;
 | |
| typedef gboolean (* GumExceptionHandler) (GumExceptionDetails * details,
 | |
|     gpointer user_data);
 | |
| 
 | |
| typedef struct _GumExceptorScope GumExceptorScope;
 | |
| 
 | |
| struct _GumExceptor
 | |
| {
 | |
|   GObject parent;
 | |
| 
 | |
|   GumExceptorPrivate * priv;
 | |
| };
 | |
| 
 | |
| struct _GumExceptorClass
 | |
| {
 | |
|   GObjectClass parent_class;
 | |
| };
 | |
| 
 | |
| enum _GumExceptionType
 | |
| {
 | |
|   GUM_EXCEPTION_ABORT = 1,
 | |
|   GUM_EXCEPTION_ACCESS_VIOLATION,
 | |
|   GUM_EXCEPTION_GUARD_PAGE,
 | |
|   GUM_EXCEPTION_ILLEGAL_INSTRUCTION,
 | |
|   GUM_EXCEPTION_STACK_OVERFLOW,
 | |
|   GUM_EXCEPTION_ARITHMETIC,
 | |
|   GUM_EXCEPTION_BREAKPOINT,
 | |
|   GUM_EXCEPTION_SINGLE_STEP,
 | |
|   GUM_EXCEPTION_SYSTEM
 | |
| };
 | |
| 
 | |
| struct _GumExceptionMemoryDetails
 | |
| {
 | |
|   GumMemoryOperation operation;
 | |
|   gpointer address;
 | |
| };
 | |
| 
 | |
| struct _GumExceptionDetails
 | |
| {
 | |
|   GumThreadId thread_id;
 | |
|   GumExceptionType type;
 | |
|   gpointer address;
 | |
|   GumExceptionMemoryDetails memory;
 | |
|   GumCpuContext context;
 | |
|   gpointer native_context;
 | |
| };
 | |
| 
 | |
| struct _GumExceptorScope
 | |
| {
 | |
|   GumExceptionDetails exception;
 | |
| 
 | |
|   /*< private */
 | |
|   gboolean exception_occurred;
 | |
|   gpointer padding[2];
 | |
|   jmp_buf env;
 | |
| #ifdef __ANDROID__
 | |
|   sigset_t mask;
 | |
| #endif
 | |
| 
 | |
|   GumExceptorScope * next;
 | |
| };
 | |
| 
 | |
| GUM_API GType gum_exceptor_get_type (void) G_GNUC_CONST;
 | |
| 
 | |
| GUM_API GumExceptor * gum_exceptor_obtain (void);
 | |
| 
 | |
| GUM_API void gum_exceptor_add (GumExceptor * self, GumExceptionHandler func,
 | |
|     gpointer user_data);
 | |
| GUM_API void gum_exceptor_remove (GumExceptor * self, GumExceptionHandler func,
 | |
|     gpointer user_data);
 | |
| 
 | |
| #if defined (_MSC_VER) && GLIB_SIZEOF_VOID_P == 8
 | |
| /*
 | |
|  * On MSVC/64-bit setjmp() is actually an intrinsic that calls _setjmp() with a
 | |
|  * a hidden second argument specifying the frame pointer. This makes sense when
 | |
|  * the longjmp() is guaranteed to happen from code we control, but is not
 | |
|  * reliable otherwise.
 | |
|  */
 | |
| # define gum_exceptor_try(self, scope) \
 | |
|     _gum_exceptor_prepare_try (self, scope), \
 | |
|     ((int (*) (jmp_buf env, void * frame_pointer)) _setjmp) ( \
 | |
|         (scope)->env, NULL) == 0
 | |
| #else
 | |
| # define gum_exceptor_try(self, scope) \
 | |
|     _gum_exceptor_prepare_try (self, scope), \
 | |
|     GUM_NATIVE_SETJMP ((scope)->env) == 0
 | |
| #endif
 | |
| GUM_API gboolean gum_exceptor_catch (GumExceptor * self,
 | |
|     GumExceptorScope * scope);
 | |
| 
 | |
| GUM_API gchar * gum_exception_details_to_string (
 | |
|     const GumExceptionDetails * details);
 | |
| 
 | |
| GUM_API void _gum_exceptor_prepare_try (GumExceptor * self,
 | |
|     GumExceptorScope * scope);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2009 Ole André Vadla Ravnås <ole.andre.ravnas@tillitech.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_FUNCTION_H__
 | |
| #define __GUM_FUNCTION_H__
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GumFunctionDetails  GumFunctionDetails;
 | |
| 
 | |
| struct _GumFunctionDetails
 | |
| {
 | |
|   const gchar * name;
 | |
|   gpointer address;
 | |
|   gint num_arguments;
 | |
| };
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2008-2010 Ole André Vadla Ravnås <ole.andre.ravnas@tillitech.com>
 | |
|  * Copyright (C) 2008 Christian Berentsen <jc.berentsen@gmail.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_INTERCEPTOR_H__
 | |
| #define __GUM_INTERCEPTOR_H__
 | |
| 
 | |
| /*
 | |
|  * Copyright (C) 2008-2010 Ole André Vadla Ravnås <ole.andre.ravnas@tillitech.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_INVOCATION_LISTENER_H__
 | |
| #define __GUM_INVOCATION_LISTENER_H__
 | |
| 
 | |
| /*
 | |
|  * Copyright (C) 2008-2010 Ole André Vadla Ravnås <ole.andre.ravnas@tillitech.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_INVOCATION_CONTEXT_H__
 | |
| #define __GUM_INVOCATION_CONTEXT_H__
 | |
| 
 | |
| 
 | |
| 
 | |
| #define GUM_LINCTX_GET_THREAD_DATA(context, data_type) \
 | |
|     ((data_type *) gum_invocation_context_get_listener_thread_data (context, \
 | |
|         sizeof (data_type)))
 | |
| #define GUM_LINCTX_GET_FUNC_DATA(context, data_type) \
 | |
|     ((data_type) gum_invocation_context_get_listener_function_data (context))
 | |
| #define GUM_LINCTX_GET_FUNC_INVDATA(context, data_type) \
 | |
|     ((data_type *) \
 | |
|         gum_invocation_context_get_listener_function_invocation_data (context,\
 | |
|             sizeof (data_type)))
 | |
| 
 | |
| #define GUM_RINCTX_GET_FUNC_DATA(ctx, data_type) \
 | |
|     ((data_type) gum_invocation_context_get_replacement_function_data (ctx))
 | |
| 
 | |
| typedef struct _GumInvocationBackend GumInvocationBackend;
 | |
| typedef struct _GumInvocationContext GumInvocationContext;
 | |
| typedef guint GumPointCut;
 | |
| 
 | |
| struct _GumInvocationBackend
 | |
| {
 | |
|   GumPointCut (* get_point_cut) (GumInvocationContext * context);
 | |
| 
 | |
|   gpointer (* get_nth_argument) (GumInvocationContext * context, guint n);
 | |
|   void (* replace_nth_argument) (GumInvocationContext * context, guint n,
 | |
|       gpointer value);
 | |
|   gpointer (* get_return_value) (GumInvocationContext * context);
 | |
|   void (* replace_return_value) (GumInvocationContext * context,
 | |
|       gpointer value);
 | |
| 
 | |
|   GumThreadId (* get_thread_id) (GumInvocationContext * context);
 | |
|   guint (* get_depth) (GumInvocationContext * context);
 | |
| 
 | |
|   gpointer (* get_listener_thread_data) (GumInvocationContext * context,
 | |
|       gsize required_size);
 | |
|   gpointer (* get_listener_function_data) (GumInvocationContext * context);
 | |
|   gpointer (* get_listener_function_invocation_data) (
 | |
|       GumInvocationContext * context, gsize required_size);
 | |
| 
 | |
|   gpointer (* get_replacement_function_data) (GumInvocationContext * context);
 | |
| 
 | |
|   gpointer state;
 | |
|   gpointer data;
 | |
| };
 | |
| 
 | |
| struct _GumInvocationContext
 | |
| {
 | |
|   GCallback function;
 | |
|   GumCpuContext * cpu_context;
 | |
|   gint system_error;
 | |
| 
 | |
|   /*< private */
 | |
|   GumInvocationBackend * backend;
 | |
| };
 | |
| 
 | |
| enum _GumPointCut
 | |
| {
 | |
|   GUM_POINT_ENTER,
 | |
|   GUM_POINT_LEAVE
 | |
| };
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GUM_API GumPointCut gum_invocation_context_get_point_cut (
 | |
|     GumInvocationContext * context);
 | |
| 
 | |
| GUM_API gpointer gum_invocation_context_get_nth_argument (
 | |
|     GumInvocationContext * context, guint n);
 | |
| GUM_API void gum_invocation_context_replace_nth_argument (
 | |
|     GumInvocationContext * context, guint n, gpointer value);
 | |
| GUM_API gpointer gum_invocation_context_get_return_value (
 | |
|     GumInvocationContext * context);
 | |
| GUM_API void gum_invocation_context_replace_return_value (
 | |
|     GumInvocationContext * context, gpointer value);
 | |
| 
 | |
| GUM_API gpointer gum_invocation_context_get_return_address (
 | |
|     GumInvocationContext * context);
 | |
| 
 | |
| GUM_API guint gum_invocation_context_get_thread_id (
 | |
|     GumInvocationContext * context);
 | |
| GUM_API guint gum_invocation_context_get_depth (
 | |
|     GumInvocationContext * context);
 | |
| 
 | |
| GUM_API gpointer gum_invocation_context_get_listener_thread_data (
 | |
|     GumInvocationContext * context, gsize required_size);
 | |
| GUM_API gpointer gum_invocation_context_get_listener_function_data (
 | |
|     GumInvocationContext * context);
 | |
| GUM_API gpointer gum_invocation_context_get_listener_function_invocation_data (
 | |
|     GumInvocationContext * context, gsize required_size);
 | |
| 
 | |
| GUM_API gpointer gum_invocation_context_get_replacement_function_data (
 | |
|     GumInvocationContext * context);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #define lGUM_TYPE_INVOCATION_LISTENER (lgum_invocation_listener_get_type ())
 | |
| #define GUM_INVOCATION_LISTENER(obj) (lG_TYPE_CHECK_INSTANCE_CAST ((obj),\
 | |
|     lGUM_TYPE_INVOCATION_LISTENER, GumInvocationListener))
 | |
| #define GUM_INVOCATION_LISTENER_CAST(obj) ((GumInvocationListener *) (obj))
 | |
| #define GUM_IS_INVOCATION_LISTENER(obj) (lG_TYPE_CHECK_INSTANCE_TYPE ((obj),\
 | |
|     lGUM_TYPE_INVOCATION_LISTENER))
 | |
| #define GUM_INVOCATION_LISTENER_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE (\
 | |
|     (inst), lGUM_TYPE_INVOCATION_LISTENER, GumInvocationListenerIface))
 | |
| 
 | |
| typedef struct _GumInvocationListener GumInvocationListener;
 | |
| typedef struct _GumInvocationListenerIface GumInvocationListenerIface;
 | |
| 
 | |
| struct _GumInvocationListenerIface
 | |
| {
 | |
|   GTypeInterface parent;
 | |
| 
 | |
|   void (* on_enter) (GumInvocationListener * self,
 | |
|       GumInvocationContext * context);
 | |
|   void (* on_leave) (GumInvocationListener * self,
 | |
|       GumInvocationContext * context);
 | |
| };
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GUM_API GType lgum_invocation_listener_get_type (void);
 | |
| 
 | |
| GUM_API void gum_invocation_listener_on_enter (GumInvocationListener * self,
 | |
|     GumInvocationContext * context);
 | |
| GUM_API void gum_invocation_listener_on_leave (GumInvocationListener * self,
 | |
|     GumInvocationContext * context);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #define GUM_TYPE_INTERCEPTOR (gum_interceptor_get_type ())
 | |
| #define GUM_INTERCEPTOR(obj) (lG_TYPE_CHECK_INSTANCE_CAST ((obj),\
 | |
|     GUM_TYPE_INTERCEPTOR, GumInterceptor))
 | |
| #define GUM_INTERCEPTOR_CAST(obj) ((GumInterceptor *) (obj))
 | |
| #define GUM_INTERCEPTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),\
 | |
|     GUM_TYPE_INTERCEPTOR, GumInterceptorClass))
 | |
| #define GUM_IS_INTERCEPTOR(obj) (lG_TYPE_CHECK_INSTANCE_TYPE ((obj),\
 | |
|     GUM_TYPE_INTERCEPTOR))
 | |
| #define GUM_IS_INTERCEPTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE (\
 | |
|     (klass), GUM_TYPE_INTERCEPTOR))
 | |
| #define GUM_INTERCEPTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (\
 | |
|     (obj), GUM_TYPE_INTERCEPTOR, GumInterceptorClass))
 | |
| 
 | |
| typedef struct _GumInterceptor GumInterceptor;
 | |
| typedef struct _GumInterceptorClass GumInterceptorClass;
 | |
| typedef GArray GumInvocationStack;
 | |
| 
 | |
| typedef struct _GumInterceptorPrivate GumInterceptorPrivate;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   GUM_ATTACH_OK               =  0,
 | |
|   GUM_ATTACH_WRONG_SIGNATURE  = -1,
 | |
|   GUM_ATTACH_ALREADY_ATTACHED = -2
 | |
| } GumAttachReturn;
 | |
| 
 | |
| typedef enum
 | |
| {
 | |
|   GUM_REPLACE_OK               =  0,
 | |
|   GUM_REPLACE_WRONG_SIGNATURE  = -1,
 | |
|   GUM_REPLACE_ALREADY_REPLACED = -2
 | |
| } GumReplaceReturn;
 | |
| 
 | |
| struct _GumInterceptor
 | |
| {
 | |
|   GObject parent;
 | |
| 
 | |
|   GumInterceptorPrivate * priv;
 | |
| };
 | |
| 
 | |
| struct _GumInterceptorClass
 | |
| {
 | |
|   GObjectClass parent_class;
 | |
| };
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GUM_API GType gum_interceptor_get_type (void) G_GNUC_CONST;
 | |
| 
 | |
| GUM_API GumInterceptor * lgum_interceptor_obtain (void);
 | |
| 
 | |
| GUM_API GumAttachReturn lgum_interceptor_attach_listener (GumInterceptor * self,
 | |
|     gpointer function_address, GumInvocationListener * listener,
 | |
|     gpointer listener_function_data);
 | |
| GUM_API void gum_interceptor_detach_listener (GumInterceptor * self,
 | |
|     GumInvocationListener * listener);
 | |
| 
 | |
| GUM_API GumReplaceReturn gum_interceptor_replace_function (
 | |
|     GumInterceptor * self, gpointer function_address,
 | |
|     gpointer replacement_function, gpointer replacement_function_data);
 | |
| GUM_API void gum_interceptor_revert_function (GumInterceptor * self,
 | |
|     gpointer function_address);
 | |
| 
 | |
| GUM_API void lgum_interceptor_begin_transaction (GumInterceptor * self);
 | |
| GUM_API void lgum_interceptor_end_transaction (GumInterceptor * self);
 | |
| GUM_API gboolean gum_interceptor_flush (GumInterceptor * self);
 | |
| 
 | |
| GUM_API GumInvocationContext * gum_interceptor_get_current_invocation (void);
 | |
| GUM_API GumInvocationStack * gum_interceptor_get_current_stack (void);
 | |
| 
 | |
| GUM_API void gum_interceptor_ignore_current_thread (GumInterceptor * self);
 | |
| GUM_API void gum_interceptor_unignore_current_thread (GumInterceptor * self);
 | |
| 
 | |
| GUM_API void gum_interceptor_ignore_other_threads (GumInterceptor * self);
 | |
| GUM_API void gum_interceptor_unignore_other_threads (GumInterceptor * self);
 | |
| 
 | |
| GUM_API gpointer gum_invocation_stack_translate (GumInvocationStack * self,
 | |
|     gpointer return_address);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2015 Ole André Vadla Ravnås <oleavr@nowsecure.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_KERNEL_H__
 | |
| #define __GUM_KERNEL_H__
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GUM_API gboolean gum_kernel_api_is_available (void);
 | |
| GUM_API guint8 * gum_kernel_read (GumAddress address, gsize len,
 | |
|     gsize * n_bytes_read);
 | |
| GUM_API gboolean gum_kernel_write (GumAddress address, const guint8 * bytes,
 | |
|     gsize len);
 | |
| GUM_API void gum_kernel_enumerate_ranges (GumPageProtection prot,
 | |
|     GumFoundRangeFunc func, gpointer user_data);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2010, 2015 Ole André Vadla Ravnås <ole.andre.ravnas@tillitech.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_MEMORY_ACCESS_MONITOR_H__
 | |
| #define __GUM_MEMORY_ACCESS_MONITOR_H__
 | |
| 
 | |
| 
 | |
| #define GUM_TYPE_MEMORY_ACCESS_MONITOR (gum_memory_access_monitor_get_type ())
 | |
| #define GUM_MEMORY_ACCESS_MONITOR(obj) (lG_TYPE_CHECK_INSTANCE_CAST ((obj),\
 | |
|     GUM_TYPE_MEMORY_ACCESS_MONITOR, GumMemoryAccessMonitor))
 | |
| #define GUM_MEMORY_ACCESS_MONITOR_CAST(obj) ((GumMemoryAccessMonitor *) (obj))
 | |
| #define GUM_MEMORY_ACCESS_MONITOR_CLASS(klass) \
 | |
|     (G_TYPE_CHECK_CLASS_CAST ((klass), GUM_TYPE_MEMORY_ACCESS_MONITOR,\
 | |
|     GumMemoryAccessMonitorClass))
 | |
| #define GUM_IS_MEMORY_ACCESS_MONITOR(obj) (lG_TYPE_CHECK_INSTANCE_TYPE ((obj),\
 | |
|     GUM_TYPE_MEMORY_ACCESS_MONITOR))
 | |
| #define GUM_IS_MEMORY_ACCESS_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE (\
 | |
|     (klass), GUM_TYPE_MEMORY_ACCESS_MONITOR))
 | |
| #define GUM_MEMORY_ACCESS_MONITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (\
 | |
|     (obj), GUM_TYPE_MEMORY_ACCESS_MONITOR, GumMemoryAccessMonitorClass))
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GumMemoryAccessMonitor        GumMemoryAccessMonitor;
 | |
| typedef struct _GumMemoryAccessMonitorClass   GumMemoryAccessMonitorClass;
 | |
| typedef struct _GumMemoryAccessMonitorPrivate GumMemoryAccessMonitorPrivate;
 | |
| typedef struct _GumMemoryAccessDetails        GumMemoryAccessDetails;
 | |
| 
 | |
| typedef void (* GumMemoryAccessNotify) (GumMemoryAccessMonitor * monitor,
 | |
|     const GumMemoryAccessDetails * details, gpointer user_data);
 | |
| 
 | |
| struct _GumMemoryAccessMonitor
 | |
| {
 | |
|   GObject parent;
 | |
| 
 | |
|   GumMemoryAccessMonitorPrivate * priv;
 | |
| };
 | |
| 
 | |
| struct _GumMemoryAccessMonitorClass
 | |
| {
 | |
|   GObjectClass parent_class;
 | |
| };
 | |
| 
 | |
| struct _GumMemoryAccessDetails
 | |
| {
 | |
|   GumMemoryOperation operation;
 | |
|   gpointer from;
 | |
|   gpointer address;
 | |
| 
 | |
|   guint range_index;
 | |
|   guint page_index;
 | |
|   guint pages_completed;
 | |
|   guint pages_total;
 | |
| };
 | |
| 
 | |
| GUM_API GType gum_memory_access_monitor_get_type (void) G_GNUC_CONST;
 | |
| 
 | |
| GUM_API GumMemoryAccessMonitor * gum_memory_access_monitor_new (
 | |
|     const GumMemoryRange * ranges, guint num_ranges, 
 | |
|     GumPageProtection access_mask, gboolean auto_reset, 
 | |
|     GumMemoryAccessNotify func, gpointer data, 
 | |
|     GDestroyNotify data_destroy);
 | |
| 
 | |
| GUM_API gboolean gum_memory_access_monitor_enable (
 | |
|     GumMemoryAccessMonitor * self, GError ** error);
 | |
| GUM_API void gum_memory_access_monitor_disable (GumMemoryAccessMonitor * self);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2013 Ole André Vadla Ravnås <ole.andre.ravnas@tillitech.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_MEMORY_MAP_H__
 | |
| #define __GUM_MEMORY_MAP_H__
 | |
| 
 | |
| 
 | |
| #define GUM_TYPE_MEMORY_MAP (gum_memory_map_get_type ())
 | |
| #define GUM_MEMORY_MAP(obj) (lG_TYPE_CHECK_INSTANCE_CAST ((obj),\
 | |
|     GUM_TYPE_MEMORY_MAP, GumMemoryMap))
 | |
| #define GUM_MEMORY_MAP_CAST(obj) ((GumMemoryMap *) (obj))
 | |
| #define GUM_MEMORY_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),\
 | |
|     GUM_TYPE_MEMORY_MAP, GumMemoryMapClass))
 | |
| #define GUM_IS_MEMORY_MAP(obj) (lG_TYPE_CHECK_INSTANCE_TYPE ((obj),\
 | |
|     GUM_TYPE_MEMORY_MAP))
 | |
| #define GUM_IS_MEMORY_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE (\
 | |
|     (klass), GUM_TYPE_MEMORY_MAP))
 | |
| #define GUM_MEMORY_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (\
 | |
|     (obj), GUM_TYPE_MEMORY_MAP, GumMemoryMapClass))
 | |
| 
 | |
| typedef struct _GumMemoryMap GumMemoryMap;
 | |
| typedef struct _GumMemoryMapClass GumMemoryMapClass;
 | |
| 
 | |
| typedef struct _GumMemoryMapPrivate GumMemoryMapPrivate;
 | |
| 
 | |
| struct _GumMemoryMap
 | |
| {
 | |
|   GObject parent;
 | |
| 
 | |
|   GumMemoryMapPrivate * priv;
 | |
| };
 | |
| 
 | |
| struct _GumMemoryMapClass
 | |
| {
 | |
|   GObjectClass parent_class;
 | |
| };
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GType gum_memory_map_get_type (void) G_GNUC_CONST;
 | |
| 
 | |
| GUM_API GumMemoryMap * gum_memory_map_new (GumPageProtection prot);
 | |
| 
 | |
| GUM_API gboolean gum_memory_map_contains (GumMemoryMap * self,
 | |
|     const GumMemoryRange * range);
 | |
| 
 | |
| GUM_API void gum_memory_map_update (GumMemoryMap * self);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2016 Ole André Vadla Ravnås <oleavr@nowsecure.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_MODULE_API_RESOLVER_H__
 | |
| #define __GUM_MODULE_API_RESOLVER_H__
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| #define GUM_TYPE_MODULE_API_RESOLVER (gum_module_api_resolver_get_type ())
 | |
| lG_DECLARE_FINAL_TYPE (GumModuleApiResolver, gum_module_api_resolver, GUM,
 | |
|     MODULE_API_RESOLVER, GObject)
 | |
| 
 | |
| GumApiResolver * gum_module_api_resolver_new (void);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2015 Ole André Vadla Ravnås <oleavr@nowsecure.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_MODULE_MAP_H__
 | |
| #define __GUM_MODULE_MAP_H__
 | |
| 
 | |
| 
 | |
| #define GUM_TYPE_MODULE_MAP (gum_module_map_get_type ())
 | |
| #define GUM_MODULE_MAP(obj) (lG_TYPE_CHECK_INSTANCE_CAST ((obj),\
 | |
|     GUM_TYPE_MODULE_MAP, GumModuleMap))
 | |
| #define GUM_MODULE_MAP_CAST(obj) ((GumModuleMap *) (obj))
 | |
| #define GUM_MODULE_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),\
 | |
|     GUM_TYPE_MODULE_MAP, GumModuleMapClass))
 | |
| #define GUM_IS_MODULE_MAP(obj) (lG_TYPE_CHECK_INSTANCE_TYPE ((obj),\
 | |
|     GUM_TYPE_MODULE_MAP))
 | |
| #define GUM_IS_MODULE_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE (\
 | |
|     (klass), GUM_TYPE_MODULE_MAP))
 | |
| #define GUM_MODULE_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (\
 | |
|     (obj), GUM_TYPE_MODULE_MAP, GumModuleMapClass))
 | |
| 
 | |
| typedef struct _GumModuleMap GumModuleMap;
 | |
| typedef struct _GumModuleMapClass GumModuleMapClass;
 | |
| 
 | |
| typedef struct _GumModuleMapPrivate GumModuleMapPrivate;
 | |
| 
 | |
| struct _GumModuleMap
 | |
| {
 | |
|   GObject parent;
 | |
| 
 | |
|   GumModuleMapPrivate * priv;
 | |
| };
 | |
| 
 | |
| struct _GumModuleMapClass
 | |
| {
 | |
|   GObjectClass parent_class;
 | |
| };
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GType gum_module_map_get_type (void) G_GNUC_CONST;
 | |
| 
 | |
| GUM_API GumModuleMap * gum_module_map_new (void);
 | |
| 
 | |
| GUM_API const GumModuleDetails * gum_module_map_find (GumModuleMap * self,
 | |
|     GumAddress address);
 | |
| 
 | |
| GUM_API void gum_module_map_update (GumModuleMap * self);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2010 Ole André Vadla Ravnås <ole.andre.ravnas@tillitech.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_SPINLOCK_H__
 | |
| #define __GUM_SPINLOCK_H__
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GumSpinlock GumSpinlock;
 | |
| 
 | |
| struct _GumSpinlock
 | |
| {
 | |
|   gpointer data[8];
 | |
| };
 | |
| 
 | |
| void gum_spinlock_init (GumSpinlock * spinlock);
 | |
| void gum_spinlock_free (GumSpinlock * spinlock);
 | |
| 
 | |
| void gum_spinlock_acquire (GumSpinlock * spinlock);
 | |
| void gum_spinlock_release (GumSpinlock * spinlock);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2009-2012 Ole André Vadla Ravnås <ole.andre.ravnas@tillitech.com>
 | |
|  * Copyright (C)      2010 Karl Trygve Kalleberg <karltk@boblycat.org>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_STALKER_H__
 | |
| #define __GUM_STALKER_H__
 | |
| 
 | |
| 
 | |
| #define GUM_TYPE_STALKER (gum_stalker_get_type ())
 | |
| #define GUM_STALKER(obj) (lG_TYPE_CHECK_INSTANCE_CAST ((obj),\
 | |
|     GUM_TYPE_STALKER, GumStalker))
 | |
| #define GUM_STALKER_CAST(obj) ((GumStalker *) (obj))
 | |
| #define GUM_STALKER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),\
 | |
|     GUM_TYPE_STALKER, GumStalkerClass))
 | |
| #define GUM_IS_STALKER(obj) (lG_TYPE_CHECK_INSTANCE_TYPE ((obj),\
 | |
|     GUM_TYPE_STALKER))
 | |
| #define GUM_IS_STALKER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE (\
 | |
|     (klass), GUM_TYPE_STALKER))
 | |
| #define GUM_STALKER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (\
 | |
|     (obj), GUM_TYPE_STALKER, GumStalkerClass))
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef struct _GumStalker           GumStalker;
 | |
| typedef struct _GumStalkerClass      GumStalkerClass;
 | |
| typedef struct _GumStalkerPrivate    GumStalkerPrivate;
 | |
| 
 | |
| typedef guint GumProbeId;
 | |
| typedef struct _GumCallSite GumCallSite;
 | |
| typedef void (* GumCallProbeCallback) (GumCallSite * site, gpointer user_data);
 | |
| 
 | |
| struct _GumStalker
 | |
| {
 | |
|   GObject parent;
 | |
| 
 | |
|   GumStalkerPrivate * priv;
 | |
| };
 | |
| 
 | |
| struct _GumStalkerClass
 | |
| {
 | |
|   GObjectClass parent_class;
 | |
| };
 | |
| 
 | |
| struct _GumCallSite
 | |
| {
 | |
|   gpointer block_address;
 | |
|   gpointer stack_data;
 | |
|   GumCpuContext * cpu_context;
 | |
| };
 | |
| 
 | |
| GUM_API GType gum_stalker_get_type (void) G_GNUC_CONST;
 | |
| 
 | |
| GUM_API GumStalker * gum_stalker_new (void);
 | |
| 
 | |
| GUM_API void gum_stalker_exclude (GumStalker * self,
 | |
|     const GumMemoryRange * range);
 | |
| 
 | |
| GUM_API gint gum_stalker_get_trust_threshold (GumStalker * self);
 | |
| GUM_API void gum_stalker_set_trust_threshold (GumStalker * self,
 | |
|     gint trust_threshold);
 | |
| 
 | |
| GUM_API void gum_stalker_stop (GumStalker * self);
 | |
| GUM_API gboolean gum_stalker_garbage_collect (GumStalker * self);
 | |
| 
 | |
| GUM_API void gum_stalker_follow_me (GumStalker * self, GumEventSink * sink);
 | |
| GUM_API void gum_stalker_unfollow_me (GumStalker * self);
 | |
| GUM_API gboolean gum_stalker_is_following_me (GumStalker * self);
 | |
| 
 | |
| GUM_API void gum_stalker_follow (GumStalker * self, GumThreadId thread_id,
 | |
|     GumEventSink * sink);
 | |
| GUM_API void gum_stalker_unfollow (GumStalker * self, GumThreadId thread_id);
 | |
| 
 | |
| GUM_API GumProbeId gum_stalker_add_call_probe (GumStalker * self,
 | |
|     gpointer target_address, GumCallProbeCallback callback, gpointer data,
 | |
|     GDestroyNotify notify);
 | |
| GUM_API void gum_stalker_remove_call_probe (GumStalker * self,
 | |
|     GumProbeId id);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2008-2010 Ole André Vadla Ravnås <ole.andre.ravnas@tillitech.com>
 | |
|  * Copyright (C) 2008 Christian Berentsen <jc.berentsen@gmail.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_SYMBOL_UTIL_H__
 | |
| #define __GUM_SYMBOL_UTIL_H__
 | |
| 
 | |
| 
 | |
| typedef struct _GumSymbolDetails GumSymbolDetails;
 | |
| 
 | |
| struct _GumSymbolDetails
 | |
| {
 | |
|   GumAddress address;
 | |
|   gchar module_name[GUM_MAX_PATH + 1];
 | |
|   gchar symbol_name[GUM_MAX_SYMBOL_NAME + 1];
 | |
|   gchar file_name[GUM_MAX_PATH + 1];
 | |
|   guint line_number;
 | |
| };
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GUM_API gboolean gum_symbol_details_from_address (gpointer address,
 | |
|     GumSymbolDetails * details);
 | |
| GUM_API gchar * gum_symbol_name_from_address (gpointer address);
 | |
| 
 | |
| GUM_API gpointer gum_find_function (const gchar * name);
 | |
| GUM_API GArray * gum_find_functions_named (const gchar * name);
 | |
| GUM_API GArray * gum_find_functions_matching (const gchar * str);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2010-2014 Ole André Vadla Ravnås <ole.andre.ravnas@tillitech.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_SYS_INTERNALS_H__
 | |
| #define __GUM_SYS_INTERNALS_H__
 | |
| 
 | |
| 
 | |
| #ifdef G_OS_WIN32
 | |
| 
 | |
| # if GLIB_SIZEOF_VOID_P == 4
 | |
| #  define GUM_TEB_OFFSET_SELF 0x0018
 | |
| #  define GUM_TEB_OFFSET_TID  0x0024
 | |
| # else
 | |
| #  define GUM_TEB_OFFSET_SELF 0x0030
 | |
| #  define GUM_TEB_OFFSET_TID  0x0048
 | |
| # endif
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #endif
 | |
| /*
 | |
|  * Copyright (C) 2010-2017 Ole André Vadla Ravnås <oleavr@nowsecure.com>
 | |
|  *
 | |
|  * Licence: wxWindows Library Licence, Version 3.1
 | |
|  */
 | |
| 
 | |
| #ifndef __GUM_TLS_H__
 | |
| #define __GUM_TLS_H__
 | |
| 
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| typedef gsize GumTlsKey;
 | |
| 
 | |
| GUM_API GumTlsKey gum_tls_key_new (GDestroyNotify notify);
 | |
| GUM_API void gum_tls_key_free (GumTlsKey key);
 | |
| 
 | |
| GUM_API gpointer gum_tls_key_get_value (GumTlsKey key);
 | |
| GUM_API void gum_tls_key_set_value (GumTlsKey key, gpointer value);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 | |
| 
 | |
| G_BEGIN_DECLS
 | |
| 
 | |
| GUM_API void gum_init (void);
 | |
| GUM_API void gum_shutdown (void);
 | |
| GUM_API void gum_deinit (void);
 | |
| 
 | |
| GUM_API void gum_init_embedded (void);
 | |
| GUM_API void gum_deinit_embedded (void);
 | |
| 
 | |
| G_END_DECLS
 | |
| 
 | |
| #endif
 |