{"id":15049501,"url":"https://github.com/neil-edelman/boxes","last_synced_at":"2026-03-02T14:42:50.502Z","repository":{"id":37245805,"uuid":"373967209","full_name":"neil-edelman/boxes","owner":"neil-edelman","description":"Drag-and-drop data structure headers.","archived":false,"fork":false,"pushed_at":"2025-02-19T01:17:36.000Z","size":20136,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-09T16:53:11.522Z","etag":null,"topics":["b-tree","c89","data-structures","generics","hash-table","memory-pool","metaprogramming","paramterization","templates","testing","traits","trie","type-safety"],"latest_commit_sha":null,"homepage":"","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/neil-edelman.png","metadata":{"files":{"readme":"readme.md","changelog":null,"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}},"created_at":"2021-06-04T21:54:46.000Z","updated_at":"2025-02-19T01:17:39.000Z","dependencies_parsed_at":"2024-12-09T20:26:22.574Z","dependency_job_id":"f70bd2ad-ddd3-4a7b-9d5d-b38d365336ad","html_url":"https://github.com/neil-edelman/boxes","commit_stats":{"total_commits":3464,"total_committers":3,"mean_commits":"1154.6666666666667","dds":0.3905889145496536,"last_synced_commit":"b27e7aa0a5ab5c1844edb68b2ac16b6b213d8cef"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/neil-edelman/boxes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neil-edelman%2Fboxes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neil-edelman%2Fboxes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neil-edelman%2Fboxes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neil-edelman%2Fboxes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/neil-edelman","download_url":"https://codeload.github.com/neil-edelman/boxes/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neil-edelman%2Fboxes/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30006770,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-02T14:08:50.421Z","status":"ssl_error","status_checked_at":"2026-03-02T14:08:50.037Z","response_time":60,"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":["b-tree","c89","data-structures","generics","hash-table","memory-pool","metaprogramming","paramterization","templates","testing","traits","trie","type-safety"],"created_at":"2024-09-24T21:20:58.612Z","updated_at":"2026-03-02T14:42:50.479Z","avatar_url":"https://github.com/neil-edelman.png","language":"C","readme":"`C89` data structure headers that use compile-time polymorphism to\ngenerate lightweight and statically type-safe containers.\n\n## Downloading ##\n\nThis is not a library, just headers where needed. Pick and choose\nfrom `src` and use them. The dependencies are edges in the following\ndiagram. Or just download the entire `src` directory and put it\nwhere it's convenient to reference from one's code.\n\n![Dependencies](dependencies.svg)\n\nDotted edges means it's an optional dependency. The dashed containers,\n`deque` and `pool` are stable containers. A dotted box—`array`,\n`heap`, `table`, `tree`, and `trie`, means unstable. Depending on\none's use case, it may be good to have one or more stable containers\nas a backing for one or more unstable pointer containers.\n\n## Documentation ##\n\nDocumented parameters in each project are pre-processor macros.\nExamples are in [test/](test/) test_array.c _etc_.\n\n\u003ctable\u003e\u003ctr\u003e\n\u003cth\u003edocumentation\u003c/th\u003e\n\u003cth\u003edesign paper\u003c/th\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003ca href = \"doc/array/\"\u003earray\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003ca href = \"doc/deque/\"\u003edeque\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003ca href = \"doc/heap/\"\u003eheap\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003ca href = \"doc/list/\"\u003elist\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href = \"doc/pool/\"\u003ememory pool\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ca href = \"doc/pool/pool.pdf\"\u003eA slab-allocator for similar objects\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\u003ctr\u003e\n\u003ctd\u003e\u003ca href = \"doc/table/\"\u003ehash table\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ca href = \"doc/table/table.pdf\"\u003eAllocation-conscious chained hash-table\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\u003ctr\u003e\n\u003ctd\u003e\u003ca href = \"doc/tree/\"\u003eB-tree\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ca href = \"doc/tree/tree.pdf\"\u003ePractical in-memory B-tree design\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\u003ctr\u003e\n\u003ctd\u003e\u003ca href = \"doc/trie/\"\u003etrie\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ca href = \"doc/trie/trie.pdf\"\u003eCompact binary prefix trees\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\u003c/table\u003e\n\n## Compatibility ##\n\nUses `C++17` feature `__has_include` in `box.h` to decide to include\noptional features so that part of the header files work without the\nfull thing. If one's compiler is does not support `C++17` (especially)\nand one needs these features, try uncommenting the appropriate\nlines.\n\nThe testing framework in `test/` is much less multi-platform then\nthe headers in `src/`, requiring `C13` anonymous unions, assuming\na `union` is in the usual order. The `Makefile` provided assumes\nthe `gcc` suite and uses `clang`.\n\nOn a segmented memory model, `pool` probably won't work reliably,\nespecially when one compiles with `C90`.\n\n(Especially) `trie` hasn't been tested when `CHAR_BIT ≠ 8`, as it\ncould be in `C90`.\n\n`C90` requires identifiers to be a minimum of 31 significant initial\ncharacters in an internal identifier or a macro name. If one's\ncompiler does the very minimum, it probably won't be enough to\ndifferentiate all the private symbols. One may have to edit the\ncode to abbreviate.\n\nUtf-8 everywhere. There are few places where this makes a difference,\nbut one may have to edit some files if working with ASCII-only\ncompilers. (Specifically, \"…\" in `to_string`.)\n\n## License ##\n\n2016 Neil Edelman, distributed under the terms of the [MIT\nLicense](https://opensource.org/licenses/MIT).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneil-edelman%2Fboxes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneil-edelman%2Fboxes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneil-edelman%2Fboxes/lists"}