## GstAtomicQueue GstAtomicQueue — An atomic queue implementation |

## Synopsis

    #include <gst/gst.h>

                        GstAtomicQueue;
    GstAtomicQueue *    gst_atomic_queue_new                (guint initial_size);
    void                gst_atomic_queue_ref                (GstAtomicQueue *queue);
    void                gst_atomic_queue_unref              (GstAtomicQueue *queue);
    void                gst_atomic_queue_push               (GstAtomicQueue *queue,
                                                             gpointer data);
    gpointer            gst_atomic_queue_peek               (GstAtomicQueue *queue);
    gpointer            gst_atomic_queue_pop                (GstAtomicQueue *queue);
    guint               gst_atomic_queue_length             (GstAtomicQueue *queue);

## Description

The GstAtomicQueue object implements a queue that can be used from multiple threads without performing any blocking operations.

## Details

### GstAtomicQueue

    typedef struct _GstAtomicQueue GstAtomicQueue;

Opaque atomic data queue.

Use the acessor functions to get the stored values.

### gst_atomic_queue_new ()

    GstAtomicQueue *    gst_atomic_queue_new                (guint initial_size);

Create a new atomic queue instance. `initial_size` will be rounded up to the nearest power of 2 and used as the initial size of the queue.

`initial_size` : | initial queue size
Returns : | a new GstAtomicQueue

### gst_atomic_queue_ref ()

    void                gst_atomic_queue_ref                (GstAtomicQueue *queue);

Increase the refcount of `queue`.

`queue` : | a GstAtomicQueue

### gst_atomic_queue_unref ()

    void                gst_atomic_queue_unref              (GstAtomicQueue *queue);

Unref `queue` and free the memory when the refcount reaches 0.

`queue` : | a GstAtomicQueue

### gst_atomic_queue_push ()

    void                gst_atomic_queue_push               (GstAtomicQueue *queue,
                                                             gpointer data);

Append `data` to the tail of the queue.

`queue` : | a GstAtomicQueue
`data` : | the data

### gst_atomic_queue_peek ()

    gpointer            gst_atomic_queue_peek               (GstAtomicQueue *queue);

Peek the head element of the queue without removing it from the queue.

`queue` : | a GstAtomicQueue
Returns : | the head element of `queue` or NULL when the queue is empty. [transfer none]

### gst_atomic_queue_pop ()

    gpointer            gst_atomic_queue_pop                (GstAtomicQueue *queue);

Get the head element of the queue.

`queue` : | a GstAtomicQueue
Returns : | the head element of `queue` or NULL when the queue is empty. [transfer full]

### gst_atomic_queue_length ()

    guint               gst_atomic_queue_length             (GstAtomicQueue *queue);

Get the amount of items in the queue.

`queue` : | a GstAtomicQueue
Returns : | the number of elements in the queue.