blob: 4e3c99422e11c35a86663c36fd6549c6cb95c7ca [file] [log] [blame]
.TH IM_ARRAY 3 "11 April 1993"
.SH NAME
IM_ARRAY, IM_NEW, IM_NUMBER \- memory allocation macros
.SH SYNOPSIS
#include <vips/vips.h>
type-name *IM_NEW( IMAGE *im, type-name )
.br
type-name *IM_ARRAY( IMAGE *im, int number, type-name )
.br
int IM_NUMBER( array )
.SH DESCRIPTION
NEW, NUMBER and ARRAY are macros built on im_malloc(3) which make memory
allocation slightly easier. Given a type name, NEW returns a pointer to a
piece of memory large enough to hold an object of that type. ARRAY works as
NEW, but allocates space for a number of objects. Given an array, NUMBER
returns the number of elements in that array.
#define IM_NEW(IM,A) ((A *)im_malloc((IM),sizeof(A)))
#define IM_NUMBER(R) (sizeof(R)/sizeof(R[0]))
#define IM_ARRAY(IM,N,T) ((T *)im_malloc((IM),(N) * sizeof(T)))
Both IM_ARRAY and IM_NEW take an image descriptor as their first
parameter. Memory is allocated local to this descriptor, that is, when the
descriptor is closed, the memory is automatically freed for you. If you
pass NULL instead of an image descriptor, memory is allocated globally and
is not automatically freed.
(NOTE: in versions of VIPS before 7.3, NEW(3) and ARRAY(3) did not have the
initial IMAGE parameter. If you are converting an old VIPS7.2 program, you
will need to add a NULL parameter to the start of all NEW(3) and ARRAY(3)
parameter lists.)
Both functions return NULL on error, setting im_errorstring.
Example:
#include <vips/vips.h>
/* A structure we want to carry about.
*/
typedef struct {
...
} Wombat;
/* A static array of them.
*/
static Wombat swarm[] = {
{ ... },
{ ... },
{ ... }
};
static int swarm_size = IM_NUMBER( swarm );
int
transform_wombat( IMAGE *in, IMAGE *out )
{
/* Allocate space for a Wombat.
*/
Wombat *mar = IM_NEW( out, Wombat );
/* Allocate space for a copy of swarm.
*/
Wombat *mar = IM_ARRAY( out, swarm_size, Wombat );
....
}
.SH COPYRIGHT
National Gallery, 1993
.SH SEE ALSO
im_malloc(3), im_open_local(3).
.SH AUTHOR
J. Cupitt \- 23/7/93