..
.ie t .ds o \(bu
.el .ds o o
-.TH darray 3 "21 October 1999" mLib
+.TH darray 3 "21 October 1999" "Straylight/Edgeware" "mLib utilities library"
.SH "NAME"
darray \- dense, dynamically resizing arrays
.\" @DA_INIT
.\" @DA_UNSAFE_SHRINK
.\" @DA_UNSLIDE
.\" @DA_UNSAFE_UNSLIDE
+.\" @DA_FIRST
+.\" @DA_LAST
.\" @DA_PUSH
.\" @DA_POP
.\" @DA_UNSHIFT
.BI "void DA_UNSAFE_SLIDE(" type_v " *" a ", long " n );
.BI "void DA_UNSAFE_UNSLIDE(" type_v " *" a ", long " n );
+.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 );
.SH "DESCRIPTION"
The
.B <mLib/darray.h>
-declares a collection of types, macros and functions which implement
-dynamically resizing arrays.
+header file declares a collection of types, macros and functions which
+implement dynamically resizing arrays.
.PP
The macros described here may evaluate their arguments multiple times
unless otherwise specified.
is a valid static initializer for all types of dynamic arrays. For
cases where this isn't appropriate, a dynamic array may be initialized
using the macro
-.BR DA_INIT ,
+.BR DA_CREATE ,
passing it the address of the array.
.PP
Arrays may be disposed of using the
contiguously starting at this address. An element at index
.I i
may be referenced using the syntax
-.BI DA( a )[ i \fR.
+.BI DA( a )[ i ]\fR.
.PP
The number of elements in the array
.I a
can fail because the array is empty, in which case
.B DAEXC_UFLOW
is thrown.
+.PP
+The operations
+.B DA_FIRST
+and
+.B DA_LAST
+are lvalues referring to the first and last elements in the array
+respectively. They are unsafe if the array is empty.
.SS "Low-level details"
This section describes low-level details of the dynamic array
implementation. You should try to avoid making use of this information
.BR exc (3),
.BR mLib (3).
.SH "AUTHOR"
-Mark Wooding, <mdw@nsict.org>
+Mark Wooding, <mdw@distorted.org.uk>