{"id":29713535,"url":"https://github.com/rphii/rlso","last_synced_at":"2025-10-06T02:14:37.808Z","repository":{"id":304053811,"uuid":"1017635217","full_name":"rphii/rlso","owner":"rphii","description":"Dynamically Allocatable String","archived":false,"fork":false,"pushed_at":"2025-09-26T13:13:58.000Z","size":246,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-26T15:13:22.317Z","etag":null,"topics":["c","dynamic-string","heap","sso","stack-string","str","string","string-object","string-space-optimization","strings","substring","substrings"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rphii.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-10T21:08:59.000Z","updated_at":"2025-09-26T13:14:02.000Z","dependencies_parsed_at":"2025-07-11T03:24:54.996Z","dependency_job_id":"602c9fa4-a78f-4e4a-9ec7-1e73c31b4855","html_url":"https://github.com/rphii/rlso","commit_stats":null,"previous_names":["rphii/so","rphii/rlso"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/rphii/rlso","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rphii%2Frlso","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rphii%2Frlso/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rphii%2Frlso/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rphii%2Frlso/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rphii","download_url":"https://codeload.github.com/rphii/rlso/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rphii%2Frlso/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278547821,"owners_count":26004775,"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","status":"online","status_checked_at":"2025-10-06T02:00:05.630Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["c","dynamic-string","heap","sso","stack-string","str","string","string-object","string-space-optimization","strings","substring","substrings"],"created_at":"2025-07-24T02:38:47.007Z","updated_at":"2025-10-06T02:14:37.802Z","avatar_url":"https://github.com/rphii.png","language":"C","readme":"# 🧵 So - String Object \n\nDynamically Allocatable String in C.\n\n## 🛠️ Installation\n\n- Depends on [rphii/rlc](https://github.com/rphii/rlc)\n\n```sh\ngit clone https://github.com/rphii/so \u0026\u0026 cd so\nsetup build \u0026\u0026 meson install -C build\n```\n\nInstallation features:\n- `librlso.so` the `So` library\n- [man](man) pages *(WIP)*\n\n## 📊 Tests \u0026 Coverage\n\nThere are various [tests](tests).\n\n### Recommended dependencies\n\n- lcov *(coverage)*\n- gcovr *(coverage)*\n- valgrind *(recommended)*\n\n#### Gentoo\n```sh\nemerge -a gcovr lcov valgrind\n```\n\n#### Arch\n```sh\npacman -S gcovr lcov valgrind\n```\n\n### Run\n\nSee the provided [run-tests.sh](run-tests.sh) script.\n\n### Results\n\nSee output of where the last command put the .html file.\n\n## ✨ Features\n\n*\\*Byte counts are assuming a 64 bit machine/architecture.*\n\n1. Any substring has a footprint of 16 bytes\n2. Any program-lifetime / data-segment string has a footprint of 16 bytes\n3. Operations on the stack, if length is \u003c=15 bytes *(operations without dynamically allocating!)*\n4. Dynamically resizable to a heap string, with a maximum length of 2^56-1\n\nNotes:\n\n- Endian doesn't matter (we need to know it to compile / set up TWO structs, and after that it doesn't matter)\n- Doesn't matter if machine/architecture is 64 bits or not, it still works (it should! XD)\n- Strings are not 0-terminated. Appropriate functions/macros for printing and other opterations shall be provided\n- Automatically converts any (sub-) string into a dynamic one, if manipulated\n\n## 🔌 API\n\n*Things that are not linked are planned but not yet implemented.*\n\n| part | description | .h | .c |\n| --- | --- |--- | ---|\n| [`so-core.md`](md/so-core.md) | core string | [so.h](src/so.h) | [so.c](src/so.c) |\n| [`so-cmp.md`](md/so-cmp.md) | comparison | [so-cmp.h](src/so-cmp.h) | [so-cmp.c](src/so-cmp.c) |\n| `so-find.md` | find within | [so-find.h](src/so-find.h) | [so-find.c](src/so-find.c) |\n| `so-count.md` | count things | [so-count.h](src/so-count.h) | [so-count.c](src/so-count.c) |\n| `so-split.md` | split into parts | [so-split.h](src/so-split.h) | [so-split.c](src/so-split.c) |\n| `so-splice.md` | splice repeatedly | [so-splice.h](src/so-splice.h) | [so-splice.c](src/so-splice.c) |\n| `so-as.md` | string to type conversions | [so-as.h](src/so-as.h) | [so-as.c](src/so-as.c) |\n| `so-uc.md` | utf8 + unicode conversions | [so-uc.h](src/so-uc.h) | [so-uc.c](src/so-uc.c) |\n| `so-fx.md` | formatting (bold, it, ul, rgb) | | |\n| `so-file.md` | read + write files | [so-file.h](src/so-file.h) | [so-file.c](src/so-file.c) |\n| `so-env.md` | environment variables | [so-env.h](src/so-env.h) | [so-env.c](src/so-env.c) |\n| [`so-trim.md`](md/so-trim.md) | trimming | [so-trim.h](src/so-trim.h) | [so-trim.c](src/so-trim.c) |\n| `so-path.md` | handling as path | [so-path.h](src/so-path.h) | [so-path.c](src/so-path.c) |\n| [`so-print.md`](md/so-print.md) | printing | [so-print.h](src/so-print.h) | [so-print.c](src/so-print.c) |\n| [`so-input.md`](md/so-input.md) | user input | [so-input.h](src/so-input.h) | [so-input.c](src/so-input.c) |\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frphii%2Frlso","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frphii%2Frlso","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frphii%2Frlso/lists"}