Common data structures and utilities for C.
Each folder is independent and contains a header and a source file.
There is no build, just copy paste *.h *.c files into your project.
Library | Description |
---|---|
array | Generic array/vector |
buffer | Buffer for encoding/decoding variables, best fit for protocol/serialization implementations |
condition | Condition wrapper for Posix and Windows |
crc32 | Crc32c, uses crc32c CPU instruction if available |
heap | Min heap which can be used as max heap/priority queue as well |
ini | Ini parser |
linked list | Intrusive linked list |
logger | Logger |
map | A high performance open addressing hashmap |
math | Utility functions |
memory map | Mmap wrapper for Posix and Windows |
mutex | Mutex wrapper for Posix and Windows |
option | Cmdline argument parser. Very basic one |
perf | Benchmark utility to get performance counters info via perf_event_open() |
queue | Generic queue which can be used as dequeue/stack/list as well |
rc4 | Random number generator |
signal | Signal handler & signal safe snprintf (handling CTRL+C, printing backtrace on crash etc) |
socket | Pipe, TCP sockets, Epoll/Kqueue/WSAPoll for Posix and Windows |
string | Length prefixed, null terminated C strings. |
thread | Thread wrapper for Posix and Windows. |
time | Time and sleep functions for Posix and Windows |
timer | Hashed timing wheel implementation with fast poll / cancel ops |
uri | A basic uri parser |
Although I use on Linux mostly, CI runs with
OS : Linux, MacOS, FreeBSD and Windows Compilers : GCC, Clang, MSVC Arch : x64, aarch64, armv6, armv7, ppc64le, s390x Sanitizers : valgrind and clang/gcc sanitizers(address, undefined, thread)
To run all tests :
#with valgrind mkdir build; cd build; cmake .. && make && make valgrind #with address sanitizer mkdir build; cd build; cmake .. -DSANITIZER=address && make && make check #with undefined sanitizer mkdir build; cd build; cmake .. -DSANITIZER=undefined && make && make check #coverage mkdir build; cd build; cmake .. -DCMAKE_BUILD_TYPE=Coverage; make; make coverage