10000 GitHub - DmitriBogdanov/UTL: Collection of self-contained header-only libraries for C++17
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

DmitriBogdanov/UTL

Repository files navigation

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.

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 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

See also

Requirements

  • Requires C++17 support

Third-party tools & libraries

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

Work in progress

  • 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.

License

This project is licensed under the MIT License - see the LICENSE.md for details.

0