UTL is a collection of small self-contained libraries aimed at prototyping with minimal boilerplate. Most of the modules were created during my work in gamedev and math research projects.
For the ease of integration, all libraries are distributed as individual headers, which can be found here.
The entire collection can also be downloaded as an amalgamated single-header.
Implementation of this library sets following design goals:
- Easy integration. Adding libraries to the project should be as simple as including their corresponding headers.
- Concise syntax. Library usage should require minimal boilerplate on user side.
- Platform agnostic. Implementation should be based around the C++ standard. Platform-specific features might be provided as optional addons.
- Non-intrusive. Every library should reside in its own namespace, use its own macro prefix and not introduce any invasive identifiers.
Quality goals include:
- Modern C++ style. Usage of modern C++ idioms is heavily preferred.
- Usage examples. Documentation should include practical usage examples for all major methods.
- Test & benchmark coverage. All modules should have appropriate unit test coverage, performance-focused implementations should be benchmarked against alternative approaches.
Module | Short description |
---|---|
utl::bit | Bit-twiddling, enum bitflags |
utl::enum_reflect | Enum reflection |
utl::integral | Saturated math, safe integer casts, literals, rounding and etc. |
utl::json | JSON parsing, serializing & reflection |
utl::log | Logging library |
utl::math | Math-related utilities |
utl::mvl | Flexible API for vector and matrix operations |
utl::parallel | Thread pool, async tasks, parallel for, parallel reductions and etc. |
utl::predef | Detection of architectures, compilers, platforms and etc. |
utl::profiler | Call graph & thread profiling |
utl::progressbar | Progress bars for CLI apps |
utl::random | PRNGs & random number generation |
utl::shell | Shell commands and temporary files |
utl::sleep | Precise sleep implementations |
utl::stre | Efficient implementations of common string utils |
utl::struct_reflect | Struct reflection |
utl::table | Drawing of LaTeX and ASCII tables |
utl::time | Floating-point time, timers, stopwatches, datetime |
- How to include only specific modules when using amalgamated header
- Names reserved for implementation
- Building tests & benchmarks
- Semantic versioning
- Requires C++17 support
While the library itself consists of a single header with no embedded dependencies, it was built and tested using a number of third-party tools and libraries, some of which are embedded in the repo.
Tool | Version | Used for |
---|---|---|
clang-format | v.14.0.0 | Automatic code formatting |
clangd | v.15.0.7 | Language server functionality |
CMake | v.3.2.11 | Build system, CTest testing facilities |
GCC | v.11.4.0 | ASan and UBSan test instrumentation |
cppcheck | v.2.7 | Static analysis |
Library | Version | License | Used for | Embedded in repo |
---|---|---|---|---|
doctest | v.2.4.11 | MIT | Unit testing | ✔ |
nanobench | v.4.3.11 | MIT | Benchmarking | ✔ |
nlohmann json | v.3.11.3 | MIT | Benchmark comparison | ✔ |
PicoJSON | v.1.3.0 | BSD-2 | Benchmark comparison | ✔ |
RapidJSON | v.1.1.0 | MIT, BSD, JSON | Benchmark comparison | ✔ |
JSONTestSuite | commit 1ef36fa | MIT | JSON Validation test suite | ✔ |
utl::table
rewrite;utl::log
formatting system rework;utl::math
cleanup;- Vectors, index spans, matrix concat and binary operators for
utl::mvl
; - Test coverage statistics.
This project is licensed under the MIT License - see the LICENSE.md for details.