ao_stream4ptr.h
Streams for pointers

Include

ao_async.h
ao_buffer4ptr.h
ao_list.h
ao_time.h
stdbool.h

Types

ao_stream4ptr_t

typedef struct ao_stream4ptr_t ao_stream4ptr_t;

Represents a stream for pointers.

ao_spop_ptr_t

typedef struct ao_spop_ptr_t ao_spop_ptr_t;

Represents the popping of a pointer from a stream.

ao_spush_ptr_t

typedef struct ao_spush_ptr_t ao_spush_ptr_t;

Represents the pushing of a pointer to a stream.

Structs

ao_stream4ptr_t

struct ao_stream4ptr_t
{
    ao_buffer4ptr_t buffer;
    ao_list_t       pop;
    ao_list_t       push;
};
buffer The buffer.
pop The list of poppings.
push The list of pushings.

ao_spop_ptr_t

struct ao_spop_ptr_t
{
    ao_async_t        async;
    void * volatile   ptr;
    bool   volatile   result;
    ao_stream4ptr_t * stream;
    ao_list_node_t    stream_pop_node;
};
async The asynchronous event.
ptr The pointer that has been popped from the stream.
result The result.
stream The stream.
stream_pop_node The node for the stream’s list of poppings.

ao_spush_ptr_t

struct ao_spush_ptr_t
{
    ao_async_t        async;
    void *            ptr;
    void * volatile   ptr_override;
    bool   volatile   result;
    bool   volatile   result_override;
    ao_stream4ptr_t * stream;
    ao_list_node_t    stream_push_node;
};
async The asynchronous event.
ptr The pointer to push.
ptr_override The pointer that has been overridden.
result The result.
result_override Indicates whether a pointer has been overridden.
stream The stream.
stream_push_node The node for the stream’s list of pushings.

Functions

ao_spop_ptr

ao_spop_ptr_from

void ao_spop_ptr     (ao_spop_ptr_t * p, ao_time_t timeout);
void ao_spop_ptr_from(ao_spop_ptr_t * p, ao_time_t timeout, ao_time_t beginning);

Pops a pointer from a stream in a blocking fashion with a timeout and an optional beginning.

ao_spop_ptr_forever

void ao_spop_ptr_forever(ao_spop_ptr_t * p);

Pops a pointer from a stream indefinitely in a blocking fashion.

ao_spop_ptr_try

void ao_spop_ptr_try(ao_spop_ptr_t * p);

Pops a pointer from a stream in a non-blocking fashion.

ao_spop_ptr_begin

ao_spop_ptr_end

void ao_spop_ptr_begin(ao_spop_ptr_t * p);
void ao_spop_ptr_end  (ao_spop_ptr_t * p);

Begins or ends, respectively, a popping of a pointer from a stream.

ao_spush_ptr

ao_spush_ptr_from

void ao_spush_ptr     (ao_spush_ptr_t * p, ao_time_t timeout);
void ao_spush_ptr_from(ao_spush_ptr_t * p, ao_time_t timeout, ao_time_t beginning);

Pushes a pointer to a stream in a blocking fashion with a timeout and an optional beginning.

ao_spush_ptr_forever

void ao_spush_ptr_forever(ao_spush_ptr_t * p);

Pushes a pointer to a stream indefinitely in a blocking fashion.

ao_spush_ptr_try

void ao_spush_ptr_try(ao_spush_ptr_t * p);

Pushes a pointer to a stream in a non-blocking fashion.

ao_spush_ptr_begin

ao_spush_ptr_end

void ao_spush_ptr_begin(ao_spush_ptr_t * p);
void ao_spush_ptr_end  (ao_spush_ptr_t * p);

Begins or ends, respectively, a pushing of a pointer to a stream.

ao_spush_ptr_override

void ao_spush_ptr_override(ao_spush_ptr_t * p);

Pushes a pointer to a stream in a non-blocking fashion. If the stream is full, then this function overrides the oldest pointer in the stream.