# Yaq
![Elixir CI](https://github.com/NullOranje/yaq/workflows/Elixir%20CI/badge.svg)
Yet Another Queue module for Elixir
## About
`Yaq` implements a double-ended queue in Elixir without using the Erlang
`:queue` module. While very nice, `:queue` has a few limitations that I
needed to work past:
* Some of the commands in `:queue` return a `badarg` instead of best-effort
values. For example, calling `:queue(n, q)` when `n` is larger than the
size of `q` raises an `ArgumentError` instead of giving me some value less
than n. This may be fine in many circumstances, but my use cases just ask
for some value in return.
* Getting the size of `:queue` is an O(N) operation, when it should be O(1)
* I wanted a module that I could use with other common Elixir libraries,
such as `Enum`
* `:queue` is not very pipeable. The `|>` operator is very convenient and
one of the killer features of Elixir
`Yaq` implements the `Enum` and `Collectable` protocols
## Features
* Double-ended quque
* Implements Enumerable, Collectable protocols
## Installation
The package can be installed by adding `yaq` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:yaq, "~> 1.1"}
]
end
```
Documentation can be found at [https://hexdocs.pm/yaq](https://hexdocs.pm/yaq).
## License
Copyright 2020 Nicholas David McKinney
Licensed under Apache License 2.0
Check LICENSE and NOTICE files for more information