dispatch_data_create

Section: C Library Functions (3)
Page Index

BSD mandoc
Darwin  

NAME

dispatch_data_create dispatch_data_create_concat dispatch_data_create_subrange dispatch_data_create_map dispatch_data_apply dispatch_data_copy_region dispatch_data_get_size - create and manipulate dispatch data objects  

SYNOPSIS

Fd #include <dispatch/dispatch.h> Ft dispatch_data_t Fo dispatch_data_create Fa const void* buffer Fa size_t size Fa dispatch_queue_t queue Fa dispatch_block_t destructor Fc Ft dispatch_data_t Fo dispatch_data_create_concat Fa dispatch_data_t data1 Fa dispatch_data_t data2 Fc Ft dispatch_data_t Fo dispatch_data_create_subrange Fa dispatch_data_t data Fa size_t offset Fa size_t length Fc Ft dispatch_data_t Fo dispatch_data_create_map Fa dispatch_data_t data Fa const void **buffer_ptr Fa size_t *size_ptr Fc Ft bool Fo dispatch_data_apply Fa dispatch_data_t data Fa bool (^applier)(dispatch_data_t, size_t, const void *, size_t) Fc Ft dispatch_data_t Fo dispatch_data_copy_region Fa dispatch_data_t data Fa size_t location Fa size_t *offset_ptr Fc Ft size_t Fo dispatch_data_get_size Fa dispatch_data_t data Fc Vt dispatch_data_t dispatch_data_empty ;  

DESCRIPTION

Dispatch data objects are opaque containers of bytes that represent one or more regions of memory. They are created either from memory buffers managed by the application or the system or from other dispatch data objects. Dispatch data objects are immutable and the memory regions they represent are required to remain unchanged for the lifetime of all data objects that reference them. Dispatch data objects avoid copying the represented memory as much as possible. Multiple data objects can represent the same memory regions or subsections thereof.  

CREATION

The Fn dispatch_data_create function creates a new dispatch data object of given Fa size from a Fa buffer . The provided Fa destructor block will be submitted to the specified Fa queue when the object reaches the end of its lifecycle, indicating that the system no longer references the Fa buffer . This allows the application to deallocate the associated storage. The Fa queue argument is ignored if one of the following predefined destructors is passed:

DISPATCH_DATA_DESTRUCTOR_FREE
indicates that the provided buffer can be deallocated with free(3) directly.
DISPATCH_DATA_DESTRUCTOR_DEFAULT
indicates that the provided buffer is not managed by the application and should be copied into memory managed and automatically deallocated by the system.

The Fn dispatch_data_create_concat function creates a new data object representing the concatenation of the memory regions represented by the provided data objects.

The Fn dispatch_data_create_subrange function creates a new data object representing the sub-region of the provided Fa data object specified by the Fa offset and Fa length parameters.

The Fn dispatch_data_create_map function creates a new data object by mapping the memory represented by the provided Fa data object as a single contiguous memory region (moving or copying memory as necessary). If the Fa buffer_ptr and Fa size_ptr references are not NULL they are filled with the location and extent of the contiguous region, allowing direct read access to the mapped memory. These values are valid only as long as the newly created object has not been released.  

ACCESS

The Fn dispatch_data_apply function provides read access to represented memory without requiring it to be mapped as a single contiguous region. It traverses the memory regions represented by the Fa data argument in logical order, invokes the specified Fa applier block for each region and returns a boolean indicating whether traversal completed successfully. The Fa applier block is passed the following arguments for each memory region and returns a boolean indicating whether traversal should continue:

Fa dispatch_data_t rgn
data object representing the region
Fa size_t offset
logical position of the region in Fa data
Vt const void *loc
memory location of the region
Vt size_t size
extent of the region

The Fa rgn data object is released by the system when the Fa applier block returns. The associated memory location Fa loc is valid only as long as Fa rgn has not been deallocated; if Fa loc is needed outside of the Fa applier block, the Fa rgn object must be retained in the block.

The Fn dispatch_data_copy_region function finds the contiguous memory region containing the logical position specified by the Fa location argument among the regions represented by the provided Fa data object and returns a newly created copy of the data object representing that region. The variable specified by the Fa offset_ptr argument is filled with the logical position where the returned object starts in the Fa data object.

The Fn dispatch_data_get_size function returns the logical size of the memory region or regions represented by the provided Fa data object.  

EMPTY DATA OBJECT

The Vt dispatch_data_empty object is the global singleton object representing a zero-length memory region. It is a valid input to any dispatch_data functions that take data object parameters.  

MEMORY MODEL

Dispatch data objects are retained and released via calls to Fn dispatch_retain and Fn dispatch_release . Data objects passed as arguments to a dispatch data create or copy function can be released when the function returns. The newly created object holds implicit references to their constituent memory regions as necessary.

The functions Fn dispatch_data_create_map and Fn dispatch_data_apply return an interior pointer to represented memory that is only valid as long as an associated object has not been released. When Objective-C Automated Reference Counting is enabled, care needs to be taken if that object is held in a variable with automatic storage. It may need to be annotated with the objc_precise_lifetime attribute, or stored in a __strong instance variable instead, to ensure that the object is not released prematurely before memory accesses via the interor pointer have been completed.  

SEE ALSO

dispatch(3), dispatch_object3, dispatch_io_read3


 

Index

NAME
SYNOPSIS
DESCRIPTION
CREATION
ACCESS
EMPTY DATA OBJECT
MEMORY MODEL
SEE ALSO