# `queues`

This library implements queues. The queue representation should be regarded as an opaque term and only accessed using the library predicates.

## API documentation

Open the ../../apis/library_index.html#queues link in a web browser.

## Loading

To load all entities in this library, load the `loader.lgt` file:

    | ?- logtalk_load(queues(loader)).

## Testing

To test this library predicates, load the `tester.lgt` file:

    | ?- logtalk_load(queues(tester)).

## Usage

To create a new queue, use the `new/1` predicate:

    | ?- queue::new(Queue).
    Queue = ...
    yes

Elements can be added to either the end of the queue or the front of the queue using, respectively, the `join/3` and `join_all/3` predicates or the `jump/3` and `jump_all/3`. For example:

    | ?- queue::(new(Queue0), join_all([1,2,3], Queue0, Queue1)).
    Queue0 = ...,
    Queue1 = ...
    yes

We can query the head of the queue or remove the head of the queue using, respectively, the `head/2` and `serve/3` predicates. For example:

    | ?- queue::(new(Queue0), join(1, Queue0, Queue1), head(Queue1, Head)).
    Queue0 = ...,
    Queue1 = ...,
    Head = 1
    yes

For details on these and other provided predicates, consult the library API documentation.