A C++17 common utilities library to make thing easy!
This module provides general string formatting utilities. Note: this folder contains mostly outdated library files and will be updated in the future.
-
boxing.h
Simple utility for drawing boxes around blocks of text. -
format.h
Legacy library file containing various utilities for creating formatted output. Also includes methods for writing Java UTF8 strings.
This module provides helper classes for filesystem objects. It seeks to offer an interface that is simpler than the one provided by the standard library. Specifically, the number of functions required to implement is significantly lower, and the interface is generally cleaner. Eventually, this module aims to support various file formats, such as Minecraft's NBT system. Currently, there is an existing NBT file, but it was written when I was first learning C++.
-
filesystem.h
This is the base file which includes all other files. You should use the other options as this can be a heavy file to include -
path_helper.h
This file provides functions for interfacing with paths. Specifically, as of this moment it only provides an interface for getting the base name of a file path. -
loader.h
std::string blt::fs::getFile(std::string_view path)
- Gets the entire file as a string.
std::vector\<std::string> blt::fs::getLinesFromFile(std::string_view path)
- Gets the entire file as a string, then splits on the new line character. Then returns a vector of those lines
std::vector\<std::string> blt::fs::recursiveInclude(std::string_view path, std::string include_header, std::vector<include_guard> guards)
- Recursively include in order based on the include string (include_header) marked by the include guards
- Defaults to C/C++/GLSL preprocessor style (Was designed for GLSL)
std::string blt::fs::loadBrainFuckFile(const std::string& path)
- Load a brainfuck file recursively, uses ~ to mark the include path
-
- probably needs to be remade (TODO)
-
-
- blt::averagizer_o_matic
- Computes a rolling average in a dynamically allocated array.
- Useful for average FPS over a period of time
- blt::averagizer_o_matic
-
- Provides a 64bit fixed point number with 2^32 bits of precision on each side of the decimal
- Mostly optimal assembly, avoids sign extension by using 64 bit numbers
- Requires your compiler to support 128 bit numbers
- Docs: TODO
-
- Not finished due to complications in the vector type, this is a TODO
-
- provides overloads for logging math types
-
- blt::toRadians
- to radians function (from deg)
- blt::f_randi
- fast random integer from seed
- blt::fsqrt
- fast inverse square root algorithm, floats only
- blt::pow
- power function
- blt::round_up
- rounds up to a variable number of decimal places
- blt::toRadians
-
Found in the header file include/std/logging.h
, blt::logging is a fast and simple
single header logging library which can be used independently of BLT. Just include
the header file anywhere in your project and in ONE cpp file define #define BLT_LOGGING_IMPLEMENTATION
.
If you are using BLT as a CMake library (as you should!) this is done for you.
-
- Using CMake
- Several options are provided which disable various logging contexts, as such global logging can be disabled by passing
-DBLT_DISABLE_LOGGING:BOOL=ON
- Options follow the pattern of
BLT_DISABLE_LEVEL
where level is one ofTRACE
,DEBUG
,INFO
,WARN
,ERROR
, orFATAL
.- This allows for individual_t logging levels to be disabled while leaving the others functional. These options can be combined.
- See CMakeLists.txt for a complete list of options.
- Several options are provided which disable various logging contexts, as such global logging can be disabled by passing
- Standalone
- The CMake options define global variables in a config file. If you are using logging standalone you will need to remove the config include.
- Macros can be used in the same pattern of
BLT_DISABLE_LEVEL
to disable the various logging levels
- Using CMake
blt::arg_parse found in blt/parse/argparse.h
is an attempt at a near 1:1 replication of Python's argparse in C++.
Python's argparse is one of the best command line argument parsing solutions with some of the best documentation I've seen.
The goal was to create an API which would function exactly as the Python docs described, simplifying how much I needed to remember and document for this library.
The newest version of my profiler solution now features a CPU cycle counter, CPU thread execution time, and wall time. It has more options for
sorting and general printing while featuring a nicer codebase. It is an improvement over blt::profiling while maintaining (almost) complete backwards
compatability. Due to changes in the API the BLT_PRINT_PROFILE
macro deletes the internal profiles and intervals AND takes arguments which match
the new formatting options for profiling v2. However, BLT_START_INTERVAL
, BLT_WRITE_PROFILE
, and BLT_END_INTERVAL
are still the same.
Documentation for this is coming soon, along with more profiling features. the BLT_*
macros can be disabled by the standard BLT_DISABLE_PROFILING
from the v1 profiler. It is encouraged to use the new blt::* profile functions over the macros however these currently cannot be disabled. (TODO)
-
- Queue / Stack
- faster than std::queue / std::stack
- backed by a contiguous array
- Queue / Stack
-
- Simple Random Wrapper Interface
- Simple random functions based on the PCG Hash
-
- starts_with
- ends_with
- contains
- toLowerCase
- toUpperCase
- split
- trim
- Logging
- See blt::logging section above
- Time
- Current time in nanoseconds (without all the c++ gobbledygook)
- Java's currentTimeMilliseconds
- nanoTime as well
std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count()
becomesblt::system::nanoTime()
- Formatted time string with year/month/date + current time
- Current time in nanoseconds (without all the c++ gobbledygook)
-
- Basic profiler with history and formatted output