# tlibtoml A fork of [libtoml](https://github.com/brglng/libtoml) rewritten to use [tlibc](https://timerix.ddns.net/git/Timerix/tlibtoml) instead of its own (worse) implementation of collections and strings. For example, Table from libtoml is just an array of key-value pairs, where search happens by calling `strcmp()` on each element. Such inefficient code hurts my mind, so i have no other choise than to rewrite this library. ## Build 1. Clone this repository. ``` git clone https://timerix.ddns.net/git/Timerix/tlibtoml.git ``` 2. Install [cbuild](https://timerix.ddns.net/git/Timerix/cbuild/releases). Select latest version compatible with the one in `project.config`. Example: For `2.3.0` download latest `2.3.x`. 3. Clone [tlibc](https://timerix.ddns.net/git/Timerix/tlibc). By default `dependencies/tlibc.config` expects that `tlibc/` is present in the same directory as `tlibtoml/`. If you cloned it to another directory, change `DEPENDENCIES_DIR` in `tlibtoml/project.user.config`. ``` git clone https://timerix.ddns.net/git/Timerix/tlibc.git ``` 4. Build and run tests ``` cd tlibtoml cbuild build_exec exec ``` 5. To build library use tasks `build_static_lib[_dbg]` or `build_shared_lib[_dbg]` ## Usage ```c #include "tlibtoml.h" int main(){ Deferral(32); // reserve memory for 32 defers // init tlibc global variables try_fatal_void(tlibc_init()); // init tlibtoml global variables try_fatal_void(tlibtoml_init()); Defer(tlibc_deinit()); Defer(tlibtoml_deinit()); // load whole file to memory and parse it as toml try_fatal(TomlTable* t, p, toml_load_filename("example.toml")); // get value by key and ensure it's a string try_fatal(str* s, p, TomlTable_get_str(t, STR("some_key"))); // print this string value printf("some_key = '"FMT_str"'\n", str_expand(*s)); Return 0; // call defers } ```