NAME
xpc_array_create
—
creation and management of XPC
arrays
SYNOPSIS
#include
<xpc/xpc.h>
xpc_object_t
xpc_array_create
(const xpc_object_t
*objects, size_t count);
void
xpc_array_set_value
(xpc_object_t
array, size_t index,
xpc_object_t value);
void
xpc_array_append_value
(xpc_object_t
array, xpc_object_t value);
xpc_object_t
xpc_array_get_value
(xpc_object_t
array, size_t index);
size_t
xpc_array_get_count
(xpc_object_t
array);
bool
xpc_array_apply
(xpc_object_t
array, xpc_array_applier_t applier);
void
xpc_array_set_bool
(xpc_object_t
array, size_t index, bool
value);
void
xpc_array_set_int64
(xpc_object_t
array, size_t index, int64_t
value);
void
xpc_array_set_uint64
(xpc_object_t
array, size_t index, uint64_t
value);
void
xpc_array_set_double
(xpc_object_t
array, size_t index, double
value);
void
xpc_array_set_date
(xpc_object_t
array, size_t index, int64_t
value);
void
xpc_array_set_data
(xpc_object_t
array, size_t index, const void
*bytes, size_t length);
void
xpc_array_set_string
(xpc_object_t
array, size_t index, const char
*value);
void
xpc_array_set_uuid
(xpc_object_t
array, size_t index, const
uuid_t value);
void
xpc_array_set_fd
(xpc_object_t
array, size_t index, int
value);
void
xpc_array_set_connection
(xpc_object_t
array, size_t index,
xpc_connection_t value);
bool
xpc_array_get_bool
(xpc_object_t
array, size_t index);
int64_t
xpc_array_get_int64
(xpc_object_t
array, size_t index);
uint64_t
xpc_array_get_uint64
(xpc_object_t
array, size_t index);
double
xpc_array_get_double
(xpc_object_t
array, size_t index);
int64_t
xpc_array_get_date
(xpc_object_t
array, size_t index);
const void *
xpc_array_get_data
(xpc_object_t
array, size_t index, size_t
*length);
const uint8_t *
xpc_array_get_uuid
(xpc_object_t
array, size_t index);
const char *
xpc_array_get_string
(xpc_object_t
array, size_t index);
int
xpc_array_dup_fd
(xpc_object_t
array, size_t index);
ARRAYS
XPC arrays are collections of XPC objects ordered by index. The index is zero-based. XPC arrays are contiguous, and values must exist at all indexes between zero and the greatest index of the array. A hole in the array can be simulated by using a null object as returned by xpc_null_create(3).
CREATION
The
xpc_array_create
()
function returns a newly created array. The caller may optionally provide
objects, a C array of XPC object references, to
initialize the array. The count is used to specify the
size of the C array. If objects is NULL, then
count must be zero. If count
specifies more elements than are actually present in
values or if values is NULL and
count is non-zero, the behavior is undefined.
GETTING AND SETTING VALUES
The
xpc_array_append_value
()
function may be used to append a value to the end of
an array. This operation increases the count of the
values in the array by one.
The value of a
specific index in the array may
be set using the
xpc_array_set_value
()
function. The value must be non-NULL, and the
index must already exist (i.e. less than the
count provided at creation or extended through
previous append operations).
The value at a specific
index of an array may be
retrieved using the
xpc_array_get_value
()
function. The result of getting a non-existing index
(i.e. one that was not specified at creation or through a previous append
operation) in undefined.
PRIMITIVE GET AND SET FUNCTIONS
Various functions exist for retrieving primitive C and operating system types directly from an array without the need for an intermediate boxed object. See xpc_object(3) for more information.
The special XPC_ARRAY_APPEND constant may be used to append a value to the end of the array instead of operating on a specific index.
ITERATION
The
xpc_array_apply
()
function may be used to iterate the index and
value pairs of an array using an
applier callback block. The callback block is invoked
for each pair and must return a bool indicating
whether the iteration should continue (true if it should continue, false if
it should not). The xpc_array_apply
() function will
return true if the applier block was called and
returned true for all pairs, or false if it was not (i.e. the
applier returned false during the iteration, which may
have caused iteration to stop early).