2 * Include file with general macros and typedefs used through Captive project
3 * Copyright (C) 2002 Jan Kratochvil <project-captive@jankratochvil.net>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; exactly version 2 of June 1991 is required
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 #ifndef _CAPTIVE_MACROS_H
21 #define _CAPTIVE_MACROS_H 1
24 #include <glib/gmacros.h>
25 #include <glib/gmem.h>
34 * Prevent 'might be used uninitialized' warning.
35 * Macro will fakes the use of the variable as sometimes GCC can't code flow
36 * analyse #C correctly.
40 * g_some_type some_variable CAPTIVE_FAKEUSE;
44 #define CAPTIVE_FAKEUSE =0
49 * @objp: Variable with the pointer to the objects wished to be allocated.
50 * Original value is discarded.
51 * @n: Numbers of objects to be allocated. Value %0 is permitted (g_free() effect).
53 * Macto to allocate @n objects of type *@objp and to assign the resulting pointer to @objp.
54 * Allocated memory may contain garbage.
56 * @Returns: Initialized @objp value as the memory of size #sizeof(typeof(*objp))*n.
58 #define captive_newn(objp,n) ((objp)=g_new(typeof(*(objp)),(n)))
63 * @objp: Variable with the pointer to the objects wished to be allocated and precleared.
64 * Original value is discarded.
65 * @n: Numbers of objects to be allocated. Value %0 is permitted (g_free() effect).
67 * Macro to allocate @n objects of type *@objp and to assign the resulting pointer to @objp.
68 * Allocated memory is precleared.
70 * @Returns: Initialized @objp value as the cleared memory of size #sizeof(typeof(*objp))*n.
72 #define captive_new0n(objp,n) ((objp)=g_new0(typeof(*(objp)),(n)))
77 * @objp: Variable with the pointer to the objects wished to be reallocated.
78 * Value %NULL is permitted (g_malloc() effect).
79 * @n: Numbers of objects to be allocated. Value %0 is permitted (g_free() effect).
81 * Macro to reallocate the original memory stored in @objp
82 * to the size @n objects of type *@objp and to assign the resulting pointer to @objp.
83 * New allocated space may contain garbage. Both @objp and @n can be nonexclusively
86 * @Returns: Initialized @objp value as the memory of size #sizeof(typeof(*objp))*n.
88 #define captive_renewn(objp,n) ((objp)=g_renew(typeof(*(objp)),(objp),(n)))
93 * @objp: Variable with the pointer to the object wished to be allocated.
94 * Original value is discarded.
96 * Macto to allocate one object of type *@objp and to assign the resulting pointer to @objp.
97 * Allocated memory may contain garbage. Equivalent to captive_newn(objp,1) call.
99 * @Returns: Initialized @objp value as the memory of size #sizeof(typeof(*objp)).
101 #define captive_new(objp) (captive_newn((objp),1))
106 * @objp: Variable with the pointer to the object wished to be allocated and precleared.
107 * Original value is discarded.
109 * Macro to allocate one object of type *@objp and to assign the resulting pointer to @objp.
110 * Allocated memory is precleared. Equivalent to captive_new0n(objp,1) call.
112 * @Returns: Initialized @objp value as the cleared memory of size #sizeof(typeof(*objp)).
114 #define captive_new0(objp) (captive_new0n((objp),1))
119 * @objp: Variable to be filled from the next argument of @ap.
120 * @ap: Initialized #va_list type.
122 * Automatically determines the size of @objp.
123 * Equivalent to objp=va_arg(ap,typeof(objp)) call.
125 * @Returns: Initialized @objp value.
127 #define captive_va_arg(objp,ap) ((objp)=va_arg((ap),typeof(objp)))
132 #endif /* _CAPTIVE_MACROS_H */