Pipe is a cross-platform utility library used as the foundation for Rift.
Pipe simplifies and unifies operating system APIs and provides commonly missing tools in C++. However, it is in no way just a merge of random libraries into one. It follows the simple principle of "low-level essentials you wouldn't want to integrate/code every time in your projects".
Pipe also has the secondary objective of unifying many coding standards into one to make code consistent and legible.
This library is separated into a set of modules so that you can use only what is relevant to your usecase. If you feel a feature should be added feel free to propose it creating an issue.
- Containers (Array, Map, Set)
- Strings (String, StringView, FixedString)
- Tags (hashed unique strings)
- Compile-time string operations
- Extensive strings constexpr API
- Search and Sort algorithms
- Concepts and TypeTraits
- Cross-platform types
- Runtime Checks
- Improved Logging (including to file)
- Integrated Profiling
- Functions and Broadcasts (also known as delegates)
- Runtime and Compile-time reflection
- Automatic registration of reflection types
- Differentiated API for classes and structs
(if used, classes and structs are not the same anymore and will follow different uses)
- Serialization designed for different formats
- JSON serialization
- Binary serialization
- Automatic serialization of reflection
- Files and directories
- File watching
- OwnPtr: Owned smart pointers
- UniquePtr
- Memory Arenas: Allow controlling allocations (without templates)
- MonoLinearArena
- MultiLinearArena
- BestFitArena: Generic arena for any use
- Memory leak tracking
- Colors (RGBA, HSV, Linear, sRGB...)
- Vectors, Rotators, Quaternions
- Time and Duration
- ECS library using other modules
- Context: An instance of ECS with its entities, components and statics
- Components: One instance per entity
- Statics: Unique instances of a type
- Integration with reflection
The project's code is validated for the following platforms and compilers:
Windows | Ubuntu | Mac |
---|---|---|
clang ^13.0 | clang ^13.0 | clang ^13.0 |
msvc | gcc ^10 |
This library is also extensively tested.