UTL
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.
Design goals
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.
- Easy to build. All headers, tests, benchmarks and examples should build under the strictest warning levels and with minimal tooling.
Modules & documentation
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 | Additional math functions |
utl::mvl | Generalized matrix & vector containers |
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 | Export ASCII, Markdown, LaTeX, Mathematica and CSV tables |
utl::time | Floating-point time, timers, stopwatches, datetime |
See also
- How to include only specific modules when using amalgamated header
- Fetching the library with CMake
FetchContent()
- Names reserved for implementation
- Building tests & benchmarks
- Semantic versioning
Requirements
- Requires C++17 support
- Some headers require a compliant preprocessor flag (
/Zc:preprocessor
) when using MSVC, such headers specify it in the docs
Developer toolchain
While the library itself consists of isolated headers 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 |
GitHub Actions | latest | Multi-platform CI testing |
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 | ✔ |
BS::thread_pool | v.5.0.0 | MIT | Benchmark comparison | ✔ |
progschj/ThreadPool | commit 9a42ec1 | zlib | Benchmark comparison | ✔ |
Roadmap
- Reach zero warnings at MSVC
/W4
- Create packages for
Conan
andvcpkg
- Possibly provide PCH targets for internal and external use
- Set up better test coverage statistics
utl::log
v1.0.0 release, involves a formatting rework and better parametrizationutl::mvl
v1.0.0 release, involves a large scale refactor and several bug fixesutl::random
v3.0.0 release, includes CBPRNGs and fixed-entropy seeding sequence
License
This project is licensed under the MIT License - see the LICENSE.md for details.