General extension library for C. No dependencies beyond common POSIX platform headers. \[st]andard library, [i]zzy\, in the same vein as stb.

izzy fbd6499d20 compatibility fixes před 4 týdny
dwarf 1566a5afc0 pedantic fixes před 4 roky
hash_fns ad98d1218c Add sha256 and sha512 hash functions před 4 roky
lexer 8d3831617c progress on the c parser před 2 měsíci
parser 81ce451e65 less lexer logging, parser generator syntax changed? před 1 rokem
scripting c921594825 fixed a unch of encoding and alignment bugs před 3 roky
string_utils d805238a81 fs write_whole_file před 1 rokem
test 81ce451e65 less lexer logging, parser generator syntax changed? před 1 rokem
.gitignore 7dbda9d2fb much better hash table macros před 1 rokem
LICENSE d6f6c74b64 Initial commit před 5 roky
README.md f761fd33d2 more heap functions před 4 roky
b64.c ba29a5f706 initial pass at base64_encode před 1 rokem
b64.h ba29a5f706 initial pass at base64_encode před 1 rokem
build.sh aed8b7086f a couple string fns for parsing c před 3 roky
conventions.h f16efae2ef coding conventions, todo list of string functions před 1 rokem
err.h a23db7f116 parenthesis support for rpn converter před 4 roky
fs.c caa456783e read_whole_dir functions před 1 rokem
fs.h caa456783e read_whole_dir functions před 1 rokem
hash.c fbd6499d20 compatibility fixes před 4 týdny
hash.h caa456783e read_whole_dir functions před 1 rokem
heap.c aeb139e7e0 heap improvements před 1 rokem
heap.h 39b3db3344 improvements to s-expression parser před 7 měsíci
ini.c 9d1eb56746 ini file reader před 2 roky
ini.h 9d1eb56746 ini file reader před 2 roky
initest.ini 9d1eb56746 ini file reader před 2 roky
macros.h 79f6846952 added missing file před 4 roky
matrix.c 2b5abfc46c meh před 1 rokem
matrix.h 6badfa1609 fixes and additions to matrix functions před 1 rokem
memarena.c a7205d374e bunch of more stuf před 5 roky
memarena.h a7205d374e bunch of more stuf před 5 roky
mempool.c 1566a5afc0 pedantic fixes před 4 roky
mempool.h fbd6499d20 compatibility fixes před 4 týdny
misc.c 197298b3be bugfix epoch ts helper před 6 měsíci
misc.h cb6a6f722e missing system headers před 3 měsíci
rb.c 6230a20751 red-black trees před 4 roky
rb.h 04b125e9fe heap structure and basic functions před 4 roky
ring.c 1566a5afc0 pedantic fixes před 4 roky
ring.h e1386d6e03 real path fs helper před 4 roky
rpn.c 55b5b4c665 bug fixes před 3 roky
rpn.h 1566a5afc0 pedantic fixes před 4 roky
sets.c 40243a0b3e fixed uninitialized field před 2 roky
sets.h 4113c0aa2b -fstrict-prototypes compatibility před 4 roky
sexp.c 39b3db3344 improvements to s-expression parser před 7 měsíci
sexp.h 39b3db3344 improvements to s-expression parser před 7 měsíci
stats.c d683425a27 completely untested stats code před 4 roky
stats.h d683425a27 completely untested stats code před 4 roky
sti.c ba5958df42 base64 decoder před 1 rokem
sti.h ba5958df42 base64 decoder před 1 rokem
string.c 0d46af308a apparently missing includes in string.c před 5 měsíci
string.h cb6a6f722e missing system headers před 3 měsíci
string_int.c 21dcd2df95 fixed resize bug in string_int před 1 rokem
string_int.h 0e0e2ff2a7 string internment table changes to keep definition hidden před 2 roky
svec.c 3b1f7c8a09 stable vec. not very configurable atm. před 1 rokem
svec.h 3b1f7c8a09 stable vec. not very configurable atm. před 1 rokem
talloc.c a56a8a925f cleaned up macros in hash.c před 4 roky
talloc.h aed8b7086f a couple string fns for parsing c před 3 roky
test.c f0e141c800 strrchr for utf8 před 1 rokem
utf.c 5215f86c4b recursive_glob() před 1 rokem
utf.h 7dbda9d2fb much better hash table macros před 1 rokem
vec.c fbd6499d20 compatibility fixes před 4 týdny
vec.h ca39d3cbef VEC_RM macros off-by-one před 4 měsíci

README.md

sti

General extension library for C. No dependencies beyond common POSIX platform headers. "[st]andard library, [i]zzy", in the same vein as stb.

#include "sti/sti.h" and compile sti/sti.c to get everything at once, or select individual pairs a la carte.

(Un)licensed under the Unlicense, which is effectively lawyer speak for Public Domain in all sane countries that have the concept of Public Domain. To quote Sam Hocevar, You just DO WHAT THE FUCK YOU WANT TO.

Warning

The API may change drastically with no notice. This is my personal set of utilities and I have not permanently settled on how it should work.

A few of the functions have terrible performance when compiled with -O0 but excellent performance when compiled with -O2/3.

Some of the _EACH() loop macros use typeof, a gcc-specific extension. I am not currently aware of a workaround for clang.

Features

  • Auto-sizing array/vector<>/"stretchy buffer"
  • Open-addressing hash table
  • Red-black tree
  • Sets
  • Min/max heap
  • Custom memory allocators
    • Memory pool using non-reserved virtual memory maps
    • Arena allocator using non-reserved virtual memory maps
    • talloc (tree allocator; simple wrapper around malloc)
  • S-expression parser
  • Generic, configurable shunting-yard algorithm to RPN
  • Filesystem utlities:
    • List files in directory
    • Walk directories recursively with callback
    • Path manipulation functions
  • String helpers
    • UTF-8/32 versions of [most] of the C std lib.
    • String splitting
  • Basic statitistics calculation
  • Miscellaneous math helpers
  • Miscellaneous Public Domain hash functions
  • Configurable state-machine based lexer generator

Most of the data structures use macro magic to be relatively type-safe and avoid void* casting where possible. Acknowledgements to nothings/Sean Barrett for the concept.

TODO

  • Documentation
  • sexp could use some love:
    • Escaped chars string support
    • More api helper fns
    • Named arguments
  • Basic tests for important fns