{"id":19176803,"url":"https://github.com/pallas/libite","last_synced_at":"2025-05-07T19:26:10.746Z","repository":{"id":25360629,"uuid":"28788425","full_name":"pallas/libite","owner":"pallas","description":"Examples of intrusive container templates in C++.","archived":false,"fork":false,"pushed_at":"2019-01-14T03:37:25.000Z","size":128,"stargazers_count":9,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-20T02:35:21.269Z","etag":null,"topics":["dijkstra","dijkstra-algorithm","disjoint-set","hash-table","heap","heapsort","heapsort-algorithm","intrusive-containers","kruskal","kruskal-algorithm","list","list-sort","mergesort","mergesort-algorithm","misra","queue","red-black-tree","tarjan","tarjan-algorithm","tree-sort"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pallas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-01-04T22:43:23.000Z","updated_at":"2023-09-30T19:18:08.000Z","dependencies_parsed_at":"2022-08-19T18:00:47.378Z","dependency_job_id":null,"html_url":"https://github.com/pallas/libite","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pallas%2Flibite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pallas%2Flibite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pallas%2Flibite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pallas%2Flibite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pallas","download_url":"https://codeload.github.com/pallas/libite/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252942605,"owners_count":21829104,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["dijkstra","dijkstra-algorithm","disjoint-set","hash-table","heap","heapsort","heapsort-algorithm","intrusive-containers","kruskal","kruskal-algorithm","list","list-sort","mergesort","mergesort-algorithm","misra","queue","red-black-tree","tarjan","tarjan-algorithm","tree-sort"],"created_at":"2024-11-09T10:30:17.121Z","updated_at":"2025-05-07T19:26:10.712Z","avatar_url":"https://github.com/pallas.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"libite\n======\n\nlibite is a set of header-based intrusive containers in C++, originally part\nof [liboco](https://github.com/pallas/liboco) and created as an exercise for\nthe author.  It is not meant as a replacement for other, similar template\nlibraries.  Requires [libace](https://github.com/pallas/libace).\n\nThe following container templates are currently implemented\n\n * heap --- Pairing heap implementing inhume \u0026 exhume.\n * queue --- FIFO container implementing enqueue \u0026 dequeue, plus merge sort\n   and in-place reverse.  Replaces order.\n * list --- Doubly-linked list implementing enlist \u0026 delist.\n * set --- Disjoint set implementing join, archetype, \u0026 dissolve.\n * stack --- LIFO container implementing push \u0026 pop.\n * table --- Chained hash table implementing set, get, \u0026 bus; user is\n   responsible for providing hash buckets and performing rehashing.\n * tree --- Red-black tree implementing graft \u0026 prune, as well as find and\n   efficient iteration via next \u0026 prev.\n\nas well as the following utility templates\n\n * compare --- Generic less-than, equal, greater-than template.\n * link --- Shared pointer wrapper, which asserts that links are removed\n   from a container prior to object destruction.\n * hash --- Generic hash template, implemented as 64-bit FNV-1a.\n\nand the following test programs\n\n * argsort --- Take program arguments, sort via heap, \u0026 write to std::cout.\n * bagofwords --- Take program arguments \u0026 write frequency to std::cout.\n * dijkstra --- Read (from, to, cost) tuples on std::cin, perform Dijkstra's\n   algorithm on the graph starting at the lexicographically first node, \u0026\n   write routes plus costs to std::cout.\n * heapsort --- Read ints on std::cin, sort via heap, \u0026 write to std::cout.\n * kruskal --- Read (from, to, cost) tuples on std::cin, perform Kruskal's\n   algorithm on the graph, \u0026 write edges composing a minimum spanning tree\n   to std::cout.\n * mergesort --- Read ints on std::cin, sort via queue::sorter, \u0026 write to\n   std::cout.\n * tarjan --- Read (from, to) tuples on std::cin, perform Tarjan's algorithm\n   on the graph, \u0026 write sets of strongly connected components to std::cout,\n   one set per line.\n * treesort --- Read ints on std::cin, sort via tree, \u0026 write to std::cout.\n\nWith assertions enabled, heap and tree are validated as pre- and\npost-conditions, which will wreck the algorithmic complexity; to disable,\ndefine NDEBUG.\n\nA small test suite is available and can be run via\n\n * make test\n\nWhile libite is just a toy, the intention is to continue to add features and\nnew containers.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpallas%2Flibite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpallas%2Flibite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpallas%2Flibite/lists"}