# ini-config A single-header library that converts INI-formatted string literals to a key-value pair list at compile-time. Requires C++20; tested on gcc 10.1 and clang trunk. Passes `-Wall -Wextra -pedantic`. ## Features * Direct accesses to values are compile-time evaluated, allowing an INI config to be used for project/program configuration. * Values can be accessed as strings, integers, or floating-point numbers. * Run-time support includes key lookup, iteration through the key-value list, and key existance checking; all of which can be filtered by section. [Try it on Godbolt.](https://godbolt.org/z/Ys1o9G) ### INI format notes * Handles single-line `key=value` pairs (extra whitespace is okay) * Supports sections * Supports comments (start line with ';' or '#') * Supports wide strings * INI format is validated at compile-time, with future goal of clearly reporting syntax errors ## How to use ```cpp #include "ini_config.hpp" // Simply place the _ini suffix at the end of your config string: constexpr auto config = R"( someflag = true [Cat] color = gray lives = 9 )"_ini; // Or, go for a more functional look: //constexpr auto config = make_ini_config; auto KVPcount = config.size(); // = 3 for (auto kvp : config) {} // Iterate through all KVPs // (or use begin()/end()) for (auto kvp : config.section("Cat")) {} // Iterate through all KVPs under [Cat] section // (or use begin("Cat")/end("Cat")) config.get("someflag"); // Searches entire config for "someflag", picks first match // This call gets compile-time evaluated to "true" config.get("Cat", "lives"); // Searches "Cat" section, compile-time evaluated to "9" config.get("Cat", "lives"); // Compile-time evaluated to 9 config.get("Dog", "lives"); // Does not exist, compile-time evaluated to "" config.contains("Dog", "lives"); // Compile-time evaluated to false config.tryget(argv[2]); // Same interface and behavior as get(), // use this when run-time evaluation is necessary config.trycontains("color"); // Run-time evaluated to true ``` See the header file for further documentation.