.SH "SYNOPSIS"
.nf
.B "#include <mLib/darray.h>"
-
+.PP
.ta 2n
.B "typedef struct {"
.B " size_t sz, len, off;"
.B " unsigned push, unshift;"
.B " arena *a;"
.B "} da_base;"
-
+.PP
.B "#define DA_INIT ..."
-
+.PP
.B "#define DAEXC_UFLOW EXC_ALLOCN(EXC_MLIB, ...)"
.B "#define DAEXC_OFLOW EXC_ALLOCN(EXC_MLIB, ...)"
-
+.PP
.BI DA_DECL( type_v ", " type );
.BI "void DA_CREATE(" type_v " *" a );
.BI "void DA_DESTROY(" type_v " *" a );
-
+.PP
.BI "void DA_ENSURE(" type_v " *" a ", size_t " n );
.BI "void DA_SHUNT(" type_v " *" a ", size_t " n );
.BI "void DA_TIDY(" type_v " *" a );
.BI "void DA_RESET(" type_v " *" a );
-
+.PP
.IB type " *DA(" type_v " *" a );
.BI "size_t DA_LEN(" type_v " *" a );
.BI "size_t DA_SPARE(" type_v " *" a );
.BI "size_t DA_OFFSET(" type_v " *" a );
.BI "void DA_INCLUDE(" type_v " *" a ", size_t " i );
-
+.PP
.BI "void DA_EXTEND(" type_v " *" a ", long " n );
.BI "void DA_SHRINK(" type_v " *" a ", long " n );
.BI "void DA_SLIDE(" type_v " *" a ", long " n );
.BI "void DA_UNSLIDE(" type_v " *" a ", long " n );
-
+.PP
.BI "void DA_UNSAFE_EXTEND(" type_v " *" a ", long " n );
.BI "void DA_UNSAFE_SHRINK(" type_v " *" a ", long " n );
.BI "void DA_UNSAFE_SLIDE(" type_v " *" a ", long " n );
.BI "void DA_UNSAFE_UNSLIDE(" type_v " *" a ", long " n );
-
+.PP
.IB type " DA_FIRST(" type_v " *" a );
.IB type " DA_LAST(" type_v " *" a );
.BI "void DA_PUSH(" type_v " *" a ", " type " " x );
.IB type " DA_POP(" type_v " *" a );
.BI "void DA_UNSHIFT(" type_v " *" a ", " type " " x );
.IB type " DA_SHIFT(" type_v " *" a );
-
+.PP
.BI "void *da_ensure(da_base *" b ", void *" v ", size_t " sz ", size_t " n );
.BI "void *da_shunt(da_base *" b ", void *" v ", size_t " sz ", size_t " n );
.BI "void *da_tidy(da_base *" b ", void *" v ", size_t " sz );
macro with the same name as the array type only in uppercase which may
be used to prevent multiple declarations, e.g.,
.VS
+.ta 2n
#ifndef FOO_V
-# define FOO_V
- DA_DECL(foo_v, foo);
+# define FOO_V
+ DA_DECL(foo_v, foo);
#endif
.VE
The macro
.PP
Dynamic arrays are structures with the format
.VS
+.ta 2n
.BI "typedef struct " type_v " {"
-.B " da_base b;"
-.BI " " type " *v;"
+.B " da_base b;"
+.BI " " type " *v;"
.BI "} " type_v ";"
.VE
The pointer