{"id":13830842,"url":"https://github.com/neverpanic/cctrie","last_synced_at":"2025-11-03T07:30:24.837Z","repository":{"id":138047785,"uuid":"215066167","full_name":"neverpanic/cctrie","owner":"neverpanic","description":"A CTrie implementation in C","archived":false,"fork":false,"pushed_at":"2019-12-16T14:18:43.000Z","size":17,"stargazers_count":3,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-14T18:57:42.329Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/neverpanic.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,"governance":null,"roadmap":null,"authors":null}},"created_at":"2019-10-14T14:31:10.000Z","updated_at":"2020-02-08T02:39:12.000Z","dependencies_parsed_at":"2024-01-13T15:46:45.194Z","dependency_job_id":"9e4267a4-5326-4435-91e1-12ba28f0a209","html_url":"https://github.com/neverpanic/cctrie","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/neverpanic%2Fcctrie","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neverpanic%2Fcctrie/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neverpanic%2Fcctrie/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neverpanic%2Fcctrie/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/neverpanic","download_url":"https://codeload.github.com/neverpanic/cctrie/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239412505,"owners_count":19634016,"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":[],"created_at":"2024-08-04T10:01:10.036Z","updated_at":"2025-11-03T07:30:24.722Z","avatar_url":"https://github.com/neverpanic.png","language":"C","readme":"# A CTrie Implementation in C\n\nThis repository contains a CTrie implementation as described in [Cache-Aware Lock-Free Concurrent Hash Tries](https://arxiv.org/pdf/1709.06056.pdf).\n\nNote that this implementation in its current form:\n\n - Does *not* implement node deletion. It was not required for the use-case for\n   which this implementation was written. Consequently, we did not implement\n   tomb node support.\n - Resolves hashcode conflicts using array lists in what we call an \"LNode\".\n - Leaks memory. None of the memory that is no longer used by the CTrie will be\n   freed, because at the time of removal, it is not clear whether a different\n   thread might still be using it. Implementing lock-free reference counting in\n   the `any_node_t` should probably allow you to fix this together with\n   `retain`/`release`-style functions, where `retain` is called before a node\n   is read, and `release` is called after reading a node is finished.\n - Was written to support putting the CTrie into a shared memory area that is\n   mapped into multiple processes at different addresses. The requirement to\n   put the shared memory segment at different addresses in different processes\n   means that instead of pointers, raw offsets must be used and all offsets\n   must be interpreted relative to a shared memory segment base address. For\n   this reason, all pointer operations are abstracted using the `PTR()` and\n   `DEREF()` macros. Note that for this to work, you will need a memory\n   allocator that supports obtaining and releasing memory from a shared memory\n   area; the implementation should be refactored to support passing\n   a malloc/realloc/free pointer set to `ctrie_new()`.\n - There is currently no support for arbitrary value types (i.e. using `size_t\n   vallen` and `void* value`). Instead we define a `value_t` that supports our\n   use-case.\n\n## License\nThis source code is licensed under the BSD-2-Clause license.\n","funding_links":[],"categories":["C"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneverpanic%2Fcctrie","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneverpanic%2Fcctrie","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneverpanic%2Fcctrie/lists"}