gmem.h | gmem.h | |||
---|---|---|---|---|
skipping to change at line 39 | skipping to change at line 39 | |||
#endif | #endif | |||
#ifndef __G_MEM_H__ | #ifndef __G_MEM_H__ | |||
#define __G_MEM_H__ | #define __G_MEM_H__ | |||
#include <glib/gslice.h> | #include <glib/gslice.h> | |||
#include <glib/gtypes.h> | #include <glib/gtypes.h> | |||
G_BEGIN_DECLS | 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 err | ||||
or 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 #GMemVTab | ||||
le must | ||||
* be used for all allocations in the same program; a call to g_mem_set_vta | ||||
ble(), | ||||
* if it exists, should be prior to any use of GLib. | ||||
*/ | ||||
typedef struct _GMemVTable GMemVTable; | typedef struct _GMemVTable GMemVTable; | |||
#if GLIB_SIZEOF_VOID_P > GLIB_SIZEOF_LONG | #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 | # define G_MEM_ALIGN GLIB_SIZEOF_VOID_P | |||
#else /* GLIB_SIZEOF_VOID_P <= GLIB_SIZEOF_LONG */ | #else /* GLIB_SIZEOF_VOID_P <= GLIB_SIZEOF_LONG */ | |||
# define G_MEM_ALIGN GLIB_SIZEOF_LONG | # define G_MEM_ALIGN GLIB_SIZEOF_LONG | |||
#endif /* GLIB_SIZEOF_VOID_P <= GLIB_SIZEOF_LONG */ | #endif /* GLIB_SIZEOF_VOID_P <= GLIB_SIZEOF_LONG */ | |||
/* Memory allocation functions | /* Memory allocation functions | |||
*/ | */ | |||
void g_free (gpointer mem); | void g_free (gpointer mem); | |||
skipping to change at line 85 | skipping to change at line 104 | |||
/* Optimise: avoid the call to the (slower) _n function if we can | /* Optimise: avoid the call to the (slower) _n function if we can | |||
* determine at compile-time that no overflow happens. | * determine at compile-time that no overflow happens. | |||
*/ | */ | |||
#if defined (__GNUC__) && (__GNUC__ >= 2) && defined (__OPTIMIZE__) | #if defined (__GNUC__) && (__GNUC__ >= 2) && defined (__OPTIMIZE__) | |||
# define _G_NEW(struct_type, n_structs, func) \ | # define _G_NEW(struct_type, n_structs, func) \ | |||
(struct_type *) (__extension__ ({ \ | (struct_type *) (__extension__ ({ \ | |||
gsize __n = (gsize) (n_structs); \ | gsize __n = (gsize) (n_structs); \ | |||
gsize __s = sizeof (struct_type); \ | gsize __s = sizeof (struct_type); \ | |||
gpointer __p; \ | gpointer __p; \ | |||
if (__s == 1) \ | if (__s == 1) \ | |||
__p = g_##func (__n); \ | __p = g_##func (__n); \ | |||
else if (__builtin_constant_p (__n) && \ | else if (__builtin_constant_p (__n) && \ | |||
(__s == 0 || __n <= G_MAXSIZE / __s)) \ | (__s == 0 || __n <= G_MAXSIZE / __s)) \ | |||
__p = g_##func (__n * __s); \ | __p = g_##func (__n * __s); \ | |||
else \ | else \ | |||
__p = g_##func##_n (__n, __s); \ | __p = g_##func##_n (__n, __s); \ | |||
__p; \ | __p; \ | |||
})) | })) | |||
# define _G_RENEW(struct_type, mem, n_structs, func) \ | # define _G_RENEW(struct_type, mem, n_structs, func) \ | |||
(struct_type *) (__extension__ ({ \ | (struct_type *) (__extension__ ({ \ | |||
skipping to change at line 120 | skipping to change at line 139 | |||
/* Unoptimised version: always call the _n() function. */ | /* Unoptimised version: always call the _n() function. */ | |||
#define _G_NEW(struct_type, n_structs, func) \ | #define _G_NEW(struct_type, n_structs, func) \ | |||
((struct_type *) g_##func##_n ((n_structs), sizeof (struct_type))) | ((struct_type *) g_##func##_n ((n_structs), sizeof (struct_type))) | |||
#define _G_RENEW(struct_type, mem, n_structs, func) \ | #define _G_RENEW(struct_type, mem, n_structs, func) \ | |||
((struct_type *) g_##func##_n (mem, (n_structs), sizeof (struct_typ e))) | ((struct_type *) g_##func##_n (mem, (n_structs), sizeof (struct_typ e))) | |||
#endif | #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 allocat | ||||
ed 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) | #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 allocat | ||||
ed 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) | #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 allocat | ||||
ed block. | ||||
* | ||||
* Returns: a pointer to the new allocated memory, cast to a pointer to @st | ||||
ruct_type | ||||
*/ | ||||
#define g_renew(struct_type, mem, n_structs) _G_RENEW (struct_typ e, mem, n_structs, realloc) | #define g_renew(struct_type, mem, n_structs) _G_RENEW (struct_typ e, 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 retur | ||||
ns | ||||
* %NULL on failure. Contrast with g_new(), which aborts the program on fai | ||||
lure. | ||||
* 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) | #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, initializ | ||||
ed | ||||
* to 0's, and returns %NULL on failure. Contrast with g_new0(), which abor | ||||
ts | ||||
* 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_new0(struct_type, n_structs) _G_NEW (struct_type, n_structs, try_malloc0) | #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 @st | ||||
ruct_type | ||||
*/ | ||||
#define g_try_renew(struct_type, mem, n_structs) _G_RENEW (struct_typ e, mem, n_structs, try_realloc) | #define g_try_renew(struct_type, mem, n_structs) _G_RENEW (struct_typ e, mem, n_structs, try_realloc) | |||
/* Memory allocation virtualization for debugging purposes | /* Memory allocation virtualization for debugging purposes | |||
* g_mem_set_vtable() has to be the very first GLib function called | * g_mem_set_vtable() has to be the very first GLib function called | |||
* if being used | * if being used | |||
*/ | */ | |||
struct _GMemVTable { | struct _GMemVTable { | |||
gpointer (*malloc) (gsize n_bytes); | gpointer (*malloc) (gsize n_bytes); | |||
gpointer (*realloc) (gpointer mem, | gpointer (*realloc) (gpointer mem, | |||
gsize n_bytes); | gsize n_bytes); | |||
End of changes. 9 change blocks. | ||||
1 lines changed or deleted | 126 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |