{"id":13507325,"url":"https://github.com/princemaple/elixir-queue","last_synced_at":"2026-02-14T12:03:21.423Z","repository":{"id":14970389,"uuid":"77374136","full_name":"princemaple/elixir-queue","owner":"princemaple","description":"Queue data structure for Elixir-lang","archived":false,"fork":false,"pushed_at":"2025-09-09T14:47:48.000Z","size":95,"stargazers_count":34,"open_issues_count":2,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-11T03:27:44.607Z","etag":null,"topics":["data-structure","elixir","hex","queue","wrapper"],"latest_commit_sha":null,"homepage":"https://hexdocs.pm/qex","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/princemaple.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-12-26T09:42:28.000Z","updated_at":"2025-09-09T14:47:52.000Z","dependencies_parsed_at":"2023-01-13T18:12:28.172Z","dependency_job_id":"4b77f501-130d-425f-9eff-1b0cb56b88cc","html_url":"https://github.com/princemaple/elixir-queue","commit_stats":{"total_commits":136,"total_committers":7,"mean_commits":"19.428571428571427","dds":0.3970588235294118,"last_synced_commit":"1fc23137e2e829b923f03dddd1169c028dff7a66"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/princemaple/elixir-queue","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/princemaple%2Felixir-queue","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/princemaple%2Felixir-queue/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/princemaple%2Felixir-queue/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/princemaple%2Felixir-queue/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/princemaple","download_url":"https://codeload.github.com/princemaple/elixir-queue/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/princemaple%2Felixir-queue/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29443468,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T10:51:12.367Z","status":"ssl_error","status_checked_at":"2026-02-14T10:50:52.088Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-structure","elixir","hex","queue","wrapper"],"created_at":"2024-08-01T02:00:31.163Z","updated_at":"2026-02-14T12:03:21.407Z","avatar_url":"https://github.com/princemaple.png","language":"Elixir","funding_links":[],"categories":["Algorithms and Data structures"],"sub_categories":[],"readme":"# Qex\n\n[![Elixir CI](https://github.com/princemaple/elixir-queue/actions/workflows/elixir.yml/badge.svg)](https://github.com/princemaple/elixir-queue/actions/workflows/elixir.yml)\n[![Module Version](https://img.shields.io/hexpm/v/qex.svg)](https://hex.pm/packages/qex)\n[![Hex Docs](https://img.shields.io/badge/hex-docs-lightgreen.svg)](https://hexdocs.pm/qex/)\n[![Total Download](https://img.shields.io/hexpm/dt/qex.svg)](https://hex.pm/packages/qex)\n[![License](https://img.shields.io/hexpm/l/qex.svg)](https://github.com/princemaple/elixir-queue/blob/master/LICENSE.md)\n[![Last Updated](https://img.shields.io/github/last-commit/princemaple/elixir-queue.svg)](https://github.com/princemaple/elixir-queue/commits/master)\n\nA `:queue` wrapper with improvements in API and addition of Protocol implementations\n\n### Protocols\n\n`Inspect`, `Collectable` and `Enumerable` are implemented,\nuse Qex with `IO.inspect` and `Enum` functions!\n\n### Function signatures\n\nParameters are re-ordered to better suit Elixir's awesome `|\u003e`\n\n## Installation\n\nThe package can be installed as:\n\n1. Add `:qex` to your list of dependencies in `mix.exs`:\n\n   ```elixir\n   def deps do\n     [\n       {:qex, \"~\u003e 0.5\"}\n     ]\n   end\n   ```\n\n2. Run `mix deps.get`\n\n## How to use\n\n[Read the docs](https://hexdocs.pm/qex/Qex.html)\n\n#### Protocols\n\n```elixir\niex\u003e inspect Qex.new\n\"#Qex\u003c[]\u003e\"\n\niex\u003e Enum.count Qex.new(1..5)\n5\n\niex\u003e Enum.empty? Qex.new\ntrue\n\niex\u003e Enum.map Qex.new([1, 2, 3]), \u0026(\u00261 + 1)\n[2, 3, 4]\n\niex\u003e inspect Enum.into(1..5, %Qex{})\n\"#Qex\u003c[1, 2, 3, 4, 5]\u003e\"\n\n# Leverages :queue.member/2 under the hood for performance\niex\u003e Enum.member? Qex.new(1..10_000), 9_999\ntrue\n```\n\n#### Create a new queue from a range\n\n```elixir\niex\u003e inspect Qex.new(1..3)\n\"#Qex\u003c[1, 2, 3]\u003e\"\n```\n\n#### Create a new queue from a list\n\n```elixir\niex\u003e inspect Qex.new([1, 2, 3])\n\"#Qex\u003c[1, 2, 3]\u003e\"\n```\n\n#### Add an element to the back of the queue\n\n```elixir\niex\u003e q = Qex.new([:mid])\niex\u003e Enum.to_list Qex.push(q, :back)\n[:mid, :back]\n```\n\n#### Add an element to the front of the queue\n\n```elixir\niex\u003e q = Qex.new([:mid])\niex\u003e Enum.to_list Qex.push_front(q, :front)\n[:front, :mid]\n```\n\n#### Get and remove an element from the front of the queue\n\n```elixir\niex\u003e q = Qex.new([:front, :mid])\niex\u003e {{:value, item}, _q} = Qex.pop(q)\niex\u003e item\n:front\n\niex\u003e q = Qex.new\niex\u003e {empty, _q} = Qex.pop(q)\niex\u003e empty\n:empty\n```\n\n#### Get and remove an element from the back of the queue\n\n```elixir\niex\u003e q = Qex.new([:mid, :back])\niex\u003e {{:value, item}, _q} = Qex.pop_back(q)\niex\u003e item\n:back\n\niex\u003e q = Qex.new\niex\u003e {empty, _q} = Qex.pop_back(q)\niex\u003e empty\n:empty\n```\n\n#### Reverse a queue\n\n```elixir\niex\u003e q = Qex.new(1..3)\niex\u003e Enum.to_list q\n[1, 2, 3]\niex\u003e Enum.to_list Qex.reverse(q)\n[3, 2, 1]\n```\n\n#### Split a queue into two, the front n items are put in the first queue\n\n```elixir\niex\u003e q = Qex.new 1..5\niex\u003e {q1, q2} = Qex.split(q, 3)\niex\u003e Enum.to_list q1\n[1, 2, 3]\niex\u003e Enum.to_list q2\n[4, 5]\n```\n\n#### Join two queues together\n\n```elixir\niex\u003e q1 = Qex.new 1..3\niex\u003e q2 = Qex.new 4..5\niex\u003e Enum.to_list Qex.join(q1, q2)\n[1, 2, 3, 4, 5]\n```\n\n#### Return the first item\n\n```elixir\niex\u003e q1 = Qex.new 1..3\niex\u003e Qex.first(q1)\n{:value, 1}\niex\u003e q2 = Qex.new []\niex\u003e Qex.first(q2)\n:empty\n\niex\u003e q1 = Qex.new 1..3\niex\u003e Qex.first!(q1)\n1\n```\n\n#### Return the last item\n\n```elixir\niex\u003e q1 = Qex.new 1..3\niex\u003e Qex.last(q1)\n{:value, 3}\niex\u003e q2 = Qex.new []\niex\u003e Qex.last(q2)\n:empty\n\niex\u003e q1 = Qex.new 1..3\niex\u003e Qex.last!(q1)\n3\n```\n\n## Why not \"Queue\"?\n\nThe name is taken... [Hex link](https://hex.pm/packages/queue)\n\n## Copyright and License\n\nCopyright (c) 2022 Po Chen\n\nThis work is free. You can redistribute it and/or modify it under the\nterms of the MIT License. See the [LICENSE.md](./LICENSE.md) file for more details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprincemaple%2Felixir-queue","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprincemaple%2Felixir-queue","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprincemaple%2Felixir-queue/lists"}