56 lines
1.6 KiB
Plaintext
56 lines
1.6 KiB
Plaintext
libguf - typesafe C99 containers
|
|
--------------------------------------------------------------------------------
|
|
1. Intro
|
|
----------
|
|
"Look mom, no void pointers!"
|
|
|
|
This is a work in progress of my personal header only datastructure and
|
|
algorithm utility library which (ab)uses the C pre-processor to achieve
|
|
typesafety.
|
|
|
|
There is no reason this exists apart from "this is kind of fun and silly",
|
|
you should just use C++ :)
|
|
|
|
It uses a similar approach of "include parametrisation" to achieve strongly
|
|
typed data structures as used in https://github.com/ludocode/pottery
|
|
|
|
Look at "src/test/example.c" for an example.
|
|
|
|
|
|
2. How to build
|
|
-----------------
|
|
Setup CMake with
|
|
$ cmake -DCMAKE_BUILD_TYPE=Debug -S . -B build/debug
|
|
|
|
And build the example with
|
|
$ cmake --build build/debug/ --target libguf_example
|
|
|
|
|
|
3. Tests
|
|
----------
|
|
The tests in src/test are written in C++20, which made it easy to just use the
|
|
STL types in order to check their behaviour against the custom libguf C types.
|
|
|
|
|
|
4. What it includes
|
|
--------------------
|
|
- guf_dbuf.h: a dynamic array (like std::vector)
|
|
- guf_dict.h: a hashtable (elements are stored contiguously, like python3's
|
|
compact dicts)
|
|
- guf_str.h: a string-buffer with short-string-optimisation (guf_str) and
|
|
a string-view (guf_str_view) type
|
|
- guf_rand.h: random number algorithms
|
|
- guf_sort.h: sort algorithms
|
|
- guf_math.h: math I guess?
|
|
- guf_linalg.h: linear algebra types and algorithms for computer graphics etc.
|
|
- ... and more
|
|
|
|
|
|
5. License
|
|
-----------
|
|
MIT (cf. LICENSE.txt).
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
~fruit
|