.
.\" @A_CREATE
.\" @A_DESTROY
+.\" @A_SUBNEW
.\" @CREATE
.\" @DESTROY
+.\" @NEW
.
.\"--------------------------------------------------------------------------
.SH NAME
.BI "void subarena_create(subarena *" s ", arena *" a );
.BI "void subarena_destroy(subarena *" s );
.BI "void subarena_alloc(subarena *" s ", size_t " sz );
+.BI "void *A_CREATE(subarena *" s ", " type );
+.BI "A_SUBNEW(" type "* " p ", subarena *" s );
.BI "void subarena_free(subarena *" s ", void *" p ", size_t " sz );
+.BI "void A_DESTROY(subarena *" s ", " type " *" p );
.PP
.B "void sub_init(void);"
.BI "void *sub_alloc(size_t " sz );
-.BI "void sub_free(void *" p ", size_t " sz );
-.PP
-.BI "void *A_CREATE(subarena *" s ", " type );
-.BI "void A_DESTROY(subarena *" s ", " type " *" p );
.BI "void *CREATE(" type );
+.BI "NEW(" type "* " p );
+.BI "void sub_free(void *" p ", size_t " sz );
.BI "void DESTROY(" type " *" p );
.fi
.
.BR subarena_free .
If you do, you'll get what you deserve.
.PP
-The pair of macros
-.B A_CREATE
+The macros
+.BR A_CREATE ,
+.BR A_SUBNEW ,
and
.B A_DESTROY
are intended to provide a slightly more natural interface to
.VE
can be replaced by
.VS
-mystruct p = A_CREATE(s, mystruct);
+mystruct *p = A_CREATE(s, mystruct);
+.VE
+or
+.VS
+mystruct *p;
+A_SUBNEW(p, s);
.VE
Similarly, the block can be freed by saying
.VS
and
.B sub_free
and the macros
-.B CREATE
+.BI CREATE ,
+.BI NEW
and
.B DESTROY
use this subarena.