Contains helpers used throughout the Colt Compiler. These include portable bit-fields, endianness utilities, io, argument parsing and data structures.
- ✅ Feature is done and tested.
⚠️ Feature is nearly done (more testing needed).- ❌ Feature is not ready for use.
Name | Description | Status | Note |
---|---|---|---|
Bitfields |
Zero-overhead bitfields whose layout is guarenteed to be portable (except for endianness). | ✅ | Supports hashing and serialization. |
choose_simd_implementation |
Used to choose a different function at runtime depending on CPUID |
✅ | If needed, detecting more instructions sets could be added. |
TargetEndian Endian Detection |
Represents the target endianness. | ✅ | There is also the COLT_LITTLE_ENDIAN and COLT_BIG_ENDIAN macros. |
Endian Conversions | Functions such as [hlb]to[hlb] to go from host endianness to another endianness or vice-versa. |
✅ | Implemented using intrinsics. |
uhash and hash_append |
Implements universal hashing as described in N3980 . |
The current implemented hash_algorithm s are fnv1a and SipHash-2-4 . |
|
Option |
Optional vocabulary type with monadic operations. | ✅ | More unit tests could be added. |
Expect |
Expected vocabulary type with monadic operations | ✅ | More unit tests could be added. |
Unicode Counting and Indexing | Provides countlen , unitlen , strlen , index_front , index_back Unicode aware functions. |
✅ | More unit tests could be added. |
Unicode SIMD Utilities | Provides SIMD functions to optimize strlen and unitlen . |
✅ | See table below for supported architectures. |
Unicode Aware StringView |
View over Unicode data in any of UTF8 , UTF16-[BL]E ,UTF32-[BL]E . |
✅ | A type-erased StringView could also be added, whose encoding is determined at runtime. |
Unicode Aware String |
Contiguous Unicode aware String with SSO , count and middle caching, and const segment optimization. |
❌ | The implementation is a work in progress. |
Memory Allocators | Provides a framework of composable allocators that allocates and deallocates MemBlock |
More allocators could be added. | |
Memory Allocators Reference | Reference to a local or global allocator, used by all data structures. | ✅ | |
BigInteger |
Arbitrary precision big integer. | ✅ | More unit tests could be added. * |
BigRational |
Arbitrary precision big rational (x/y ). |
Some API improvements could be done. * | |
Compile-time Map and BiMap |
Hash (bi)map created at compile-time. | ✅ | |
Compile-time Math Functions | constexpr mathematical functions. |
✅ | |
Overflow checks | Provides checked_(add|sub|mul|div|mod) to detect overflow/underflow. |
More unit tests are needed. | |
Macro FOR_EACH |
Macro that expands another macro for each of its arguments. | ✅ | For MSVC , this macro needs /Zc:preprocessor . |
Macro assert_true |
Assert that all conditions are true. | ✅ | Works at compile time. |
Macro switch_no_default |
Provides an unreachable default branch for a switch statement. | ✅ | |
OS DynamicLib |
Represents a dynamically loaded library in a platform agnostic way. | ✅ | For Linux, -Wl,-export-dynamic must be specified for self-introspection. |
* These classes are wrappers over GMP
, which makes them already well-tested.
This project uses simdutf
to improve the performance of Unicode-related utilities.
However, more functions were needed, and I had to roll out my own SIMD versions in some cases.
- ✅ Function is written and tested.
⚠️ Function is written but not tested.- ❌ Function is not written.
All x86_64
SIMD functions are tested using sde
.
All NEON
SIMD functions are tested using QEMU
.
unitlen16 |
unitlen32 |
strlen8 |
strlen16 |
|
---|---|---|---|---|
SSE2 | ✅ | ✅ | ✅ | ✅ |
SSE4.2 | ❌ | ❌ | ❌ | ❌ |
AVX2 | ✅ | ✅ | ✅ | ✅ |
AVX512 | ✅ | ✅ | ✅ | ✅ |
NEON | ✅ | ✅ | ✅ | ✅ |