Add module READMEs, .gitignore, and remove Bin/ from tracking

Add README.md for each library module documenting API, platform
backends, and usage. Add .gitignore for build artifacts. Remove
pre-built binaries from version control.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-03 00:27:55 -05:00
parent eca1e8c458
commit 71230f918f
16 changed files with 469 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
Bin/
obj/
*.o
*.a
*.bin

Binary file not shown.

Binary file not shown.

Binary file not shown.

42
ZNet/README.md Normal file
View File

@@ -0,0 +1,42 @@
# ZNet
Event-driven UDP networking library for multiplayer games, built on top of
libsst-net and enet.
## Architecture
- `ZNetServer` -- listens for connections, manages multiple peers
- `ZNetClient` -- connects to a single server
- `ZNetHost` -- shared base class for both
- `ZNetPeer` -- represents a remote connection
## Packet delivery
Packets are created with `ZNetHost::CreatePacket()` and sent with either
reliable or transient (fire-and-forget) delivery:
- `ZNET_RELIABLE` -- guaranteed delivery with sequencing and ACK
- `ZNET_TRANSIENT` -- unreliable, lowest latency
Packets larger than MTU are automatically fragmented and reassembled.
## Events
Poll with `HasEvent()` / `GetNextEvent()`:
| Event | Meaning |
|---|---|
| `ZNETEVENT_CONNECT` | Peer connected |
| `ZNETEVENT_DISCONNECT` | Peer disconnected gracefully |
| `ZNETEVENT_TIMEOUT` | Peer timed out |
| `ZNETEVENT_DATA` | Data packet received |
## Features
- Bandwidth throttling (token bucket) via `ZNetBandwidthMeter`
- Configurable MTU (512 -- 1500 bytes, with IPv4/IPv6 safe defaults)
- Packet loss simulation for testing (`SetDropChance`)
- Connection validation callback on server (`ZNetConnectCallback`)
- Up to 4 listen sockets per server
- Reference-counted packets
- `ZNetUtil::ReaderForPacket()` / `WriterForPacket()` for easy serialization

44
ZTestSuite/README.md Normal file
View File

@@ -0,0 +1,44 @@
# ZTestSuite
Unit test suite covering the libsst and ZUtil libraries.
## Running
```sh
make ztestsuite
./ZTestSuite.bin # interactive menu
./ZTestSuite.bin -n # run all tests non-interactively
./ZTestSuite.bin -r 5 # run test block #5
./ZTestSuite.bin -c # print total test count
```
## Test framework
Custom lightweight framework (`ZUnitTest.hpp`):
```cpp
static const char* testExample() {
TASSERT(1 + 1 == 2, "math is broken");
return ZTEST_SUCCESS;
}
```
Tests return an error string on failure or `ZTEST_SUCCESS` (empty string)
on pass.
## Coverage (48 test blocks, 60 test files)
**Math** -- Vec2/3/4 and Mat22/33/44 in float/double/int/unsigned variants,
geometry, transforms, safe arithmetic, endianness
**Containers** -- ZArray, ZList, ZHashMap, ZRingBuffer, ZBasicString (with
algorithm suites)
**Memory** -- ZAlloc, ZAllocWindow, ZSlabAllocator, ZReferenceCounter,
ZSmartPointer, ZWeakPointer
**I/O** -- JSON, XML, INI readers/writers, binary data writer
**Concurrency** -- threads, task streams
**Utilities** -- assertions, ZName, ZRegistry, random generation, simplex noise

45
ZUtil/README.md Normal file
View File

@@ -0,0 +1,45 @@
# ZUtil
C++ utility library providing RAII wrappers around the libsst C modules, plus
custom containers, serialization, and logging.
## Memory management
- `ZAlloc` / `ZAllocWindow` -- tracked allocation with checkpoint support
- `ZSlabAllocator` -- slab-based allocator
- `ZSmartPointer<T>` (alias `ZPtr<T>`) -- thread-safe reference-counted smart pointer
- `ZWeakPointer<T>` -- weak references
- `ZReferenceCounter`, `ZReferenceBuffer`
## Containers (ZSTL)
- `ZArray` -- dynamic array with sort/search algorithms
- `ZList` -- linked list with algorithms
- `ZHashMap` -- hash table
- `ZRingBuffer` -- circular buffer
- `ZBasicString` / `ZString` -- string with algorithms
- `ZName` -- immutable string with hash-cached comparison
- `ZKVTree` -- hierarchical key-value tree (path-addressable)
- `ZRegistry` -- thread-safe key-value store
## Threading
- `ZThread` -- base class with `run()` override and request marshaling
- `ZMutex` / `ZLock` -- RAII mutex and scoped lock
- `ZEvent`, `ZSemaphore`, `ZReadWriteLock` -- RAII sync wrappers
- `ZTaskStream` -- multi-threaded task execution with `ZFuture<R,A>`
## Serialization
- `ZBinaryReader` / `ZBinaryWriter` -- abstract binary I/O
- `ZBinaryBufferReader` / `ZBinaryBufferWriter` -- in-memory binary streams
- `ZBinaryFileReader` / `ZBinaryFileWriter` -- file-backed binary streams
- `ZXMLReader` / `ZXMLWriter` -- XML via ZKVTree
- `ZJSONReader` / `ZJSONWriter` -- JSON via ZKVTree
- `ZIniReader` / `ZIniWriter` -- INI format
## Logging
- `ZLog` -- thread-safe, multi-file logging with severity levels
- Macros: `SystemLogError`, `SystemLogWarning`, `SystemLogInfo`, `SystemLogSpam`
## Utilities
- `ZRandomGenerator` -- PRNG wrapper with Gaussian support
- `ZSimplexNoise` / `ZSimplexNoiseMap` -- noise generation
- `ZAssert` -- debug/runtime assertion macros
- `ZBitmap` -- bitmap data structure

33
libsst-atomic/README.md Normal file
View File

@@ -0,0 +1,33 @@
# libsst-atomic
Cross-platform atomic operations implemented in hand-written assembly for
lock-free programming.
## API
All functions operate on `volatile int*` or `volatile void**`:
- **Add / AddPtr** -- atomic add (with optional return of new value)
- **And / Or / Xor / Not** -- atomic bitwise ops (with optional return)
- **Exchange / ExchangePtr** -- swap value, return old
- **ExchangeAdd / ExchangeAddPtr** -- add, return old value
- **CAS / CASPtr** -- compare-and-swap, return old value
- **LoadAcquire / LoadAcquirePtr** -- load with acquire semantics
- **StoreRelease / StoreReleasePtr** -- store with release semantics
## Architecture support
Each backend is a standalone `.asm` file:
| File | Architecture | ABI |
|---|---|---|
| SST_Atomic_x86.asm | x86 (32-bit) | cdecl |
| SST_Atomic_x86-64.asm | x86-64 | System V |
| SST_Atomic_x86-64-win64.asm | x86-64 | Microsoft x64 |
| SST_Atomic_arm.asm | ARMv6+ | ARM EABI |
| SST_Atomic_ia64.asm | Itanium | IA-64 |
| SST_Atomic_mips.asm | MIPS32R2+ | o32 |
| SST_Atomic_mips64.asm | MIPS64R2+ | n64 |
| SST_Atomic_ppc.asm | PowerPC 32 | SysV |
| SST_Atomic_sparc.asm | SPARCv9 32 | SPARC |
| SST_Atomic_sparc64.asm | SPARCv9 64 | SPARC |

View File

@@ -0,0 +1,30 @@
# libsst-concurrency
Cross-platform threading and synchronization primitives in C, with C++ RAII
wrappers in ZUtil.
## Primitives
| Primitive | C API prefix | C++ wrapper |
|---|---|---|
| Threads | `SST_Concurrency_*Thread*` | `ZThread` |
| Mutexes | `SST_Concurrency_*Mutex*` | `ZMutex` / `ZLock` |
| Events | `SST_Concurrency_*Event*` | `ZEvent` |
| Semaphores | `SST_Concurrency_*Semaphore*` | `ZSemaphore` |
| Thread-local storage | `SST_Concurrency_*TLS*` | -- |
| Read-write locks | `SST_Concurrency_*ReadWrite*` | `ZReadWriteLock` |
| One-time init | `SST_Concurrency_ExecOnce` | -- |
| Thread barriers | `SST_Concurrency_*ThreadBarrier*` | -- |
## Platform backends
| Primitive | POSIX | Win32 | Solaris | macOS |
|---|---|---|---|---|
| Thread | pthread | `_beginthreadex` | `thr_*` | pthread |
| Mutex | `pthread_mutex_t` | `CRITICAL_SECTION` | `mutex_t` | pthread |
| Event | `pthread_cond_t` | `CreateEvent` | `cond_t` | pthread |
| Semaphore | `sem_t` | `CreateSemaphore` | `sema_t` | Custom (cond+mutex) |
| TLS | `pthread_key_t` | `TlsAlloc` | `thr_keycreate` | pthread |
Read-write locks and thread barriers use atomic spinlocks on all platforms
(depends on libsst-atomic).

19
libsst-crypto/README.md Normal file
View File

@@ -0,0 +1,19 @@
# libsst-crypto
Lightweight string hashing functions for hash tables and name interning.
## Hash functions
| Function | Output | Description |
|---|---|---|
| `SST_Crypto_HashDJB2` | 64-bit | djb2 hash variant |
| `SST_Crypto_HashJ6` | 32-bit | Java 6 String hash |
| `SST_Crypto_HashJCR2` | 64-bit | Collision-free up to length 8 for ASCII |
| `SST_Crypto_HashSDBM` | 32-bit | sdbm hash (Berkeley DB) |
| `SST_Crypto_HashCRC32` | 32-bit | CRC-32C checksum |
All functions take `(const char* string, size_t len)`.
Types: `SST_HashValue32` (`uint32_t`), `SST_HashValue64` (`uint64_t`).
These are non-cryptographic hashes intended for fast lookups, not security.

40
libsst-glapi/README.md Normal file
View File

@@ -0,0 +1,40 @@
# libsst-glapi
Thread-safe OpenGL 3.3 function loader with per-thread context management.
## Usage
```c
#include <SST/SST_GLAPI.h>
SST_GLAPI_InitForThread(NULL); // NULL = platform default library
// Standard GL calls work via macros:
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES, 0, 3);
SST_GLAPI_ShutdownForThread();
```
The macros in `SST_GLAPIMacros.h` dispatch through a thread-local
`SST_GLAPI` struct containing 334 function pointers.
## API
- `SST_GLAPI_InitForThread(libName)` -- load GL library, resolve all symbols
- `SST_GLAPI_ShutdownForThread()` -- release resources
- `SST_GLAPI_GetThreadGLAPI()` -- get current thread's function table
- `SST_GLAPI_CopyForThread(api)` -- install a custom function table
## Platform backends
| Platform | Library | Symbol resolution |
|---|---|---|
| Windows | opengl32.dll | `wglGetProcAddress` + `GetProcAddress` |
| Linux/POSIX | libGL.so.1 | `glXGetProcAddressARB` |
| macOS | OpenGL.framework | `dlsym` |
## Code generation
`parsegl.c` reads `gl33.txt` and generates `SST_GLAPIStruct.h`,
`SST_GLAPIStruct.c`, and `SST_GLAPIMacros.h`.

48
libsst-math/README.md Normal file
View File

@@ -0,0 +1,48 @@
# libsst-math
Type-generic linear algebra library in C, covering vectors, matrices,
transforms, and geometric queries.
## Vectors
2D, 3D, and 4D vectors in four numeric types each:
- `SST_Vec{2,3,4}{f,d,i,u}` -- float, double, int, unsigned
Operations: add, subtract, multiply, divide, scale, dot, cross, magnitude,
normalize, project, lerp, weighted sum, negate, abs, reciprocal, sqrt, rotate,
min/max component, equality. Most have both output and in-place (`Local`)
variants.
A generic `SST_VectorNf_*` API handles arbitrary-dimension float vectors.
## Matrices
2x2, 3x3, and 4x4 matrices (column-major):
- `SST_Mat{22,33,44}{f,d,i,u}`
Operations: add, subtract, element-wise multiply, scalar multiply,
matrix-matrix multiply, matrix-vector multiply, transpose, determinant,
invert, LU decomposition and solve, orthonormality check.
## Transforms (SST_Transform)
4x4 float transform construction:
- Translation, scale, shear
- Euler rotation (X/Y/Z), quaternion rotation
- LookAt / LookDir view matrices
- Perspective and orthographic projection
- Chained variants (`*C`) for composing onto existing matrices
## Geometry (SST_Geo)
- 2D/3D line segment intersection
- Point-to-segment closest point and distance
- Ray-triangle intersection with barycentric coordinates
## Code generation
`VectorN.py` and `MatrixNxN.py` generate the type-specialized `.c` files
from templates.

38
libsst-net/README.md Normal file
View File

@@ -0,0 +1,38 @@
# libsst-net
Cross-platform BSD-style socket abstraction in C.
## API
### Initialization
- `SST_Net_Init()` / `SST_Net_Shutdown()` -- WinSock init on Windows, no-op on POSIX
### Socket operations
- `SST_Net_Socket()` -- create socket (TCP or UDP, IPv4 or IPv6)
- `SST_Net_Bind()`, `SST_Net_Listen()`, `SST_Net_Accept()`, `SST_Net_Connect()`
- `SST_Net_Send()` / `SST_Net_Recv()` -- stream I/O
- `SST_Net_SendTo()` / `SST_Net_RecvFrom()` -- datagram I/O
- `SST_Net_SetNonblock()` -- toggle non-blocking mode
- `SST_Net_GetSockOpt()` / `SST_Net_SetSockOpt()`
- `SST_Net_Close()`
### Address management
- `SST_Net_InitAddress()`, `SST_Net_SetAddressFromString()`
- `SST_Net_GetAddressFamily()`, `SST_Net_GetAddressPort()`
- `SST_Net_AddressCompare()`, `SST_Net_AddressIsLocalhost()`
### I/O multiplexing
- `SST_Net_Select()` -- fd_set-based (via `SST_NetSocketSet`)
- `SST_Net_Poll()` -- poll-based (via `SST_NetPollDescriptorSet`)
### DNS
- `SST_Net_GetAddrInfo()` / `SST_Net_FreeAddrInfo()` -- forward lookup
- `SST_Net_GetNameInfo()` -- reverse lookup
## Platform backends
- **Win32** -- Winsock2, `WSAPoll`, `InetPton`/`InetNtop`
- **POSIX** -- standard BSD sockets, `poll()`, `inet_pton`/`inet_ntop`
All platform-specific error codes map to a unified `SST_NetResult` enum
(40+ codes).

49
libsst-os/README.md Normal file
View File

@@ -0,0 +1,49 @@
# libsst-os
Cross-platform operating system abstractions in C.
## Subsystems
### Memory (`SST_Alloc`, `SST_SysMem`)
- Aligned allocation/free, safe malloc/realloc with overflow checking
- Page-level allocation, protection (`R/W/X`), and size queries
### File I/O (`SST_File`)
- Open, read, write, seek, flush, close
- Async and sequential/random hints
### File system (`SST_FileSys`)
- Directory listing, create, remove
### Memory-mapped files (`SST_Mmap`)
- Create/destroy mappings, sync to disk
### Dynamic libraries (`SST_DynLib`)
- Load, symbol lookup, close
- OS-specific name generation (`.dll` / `.so` / `.dylib`)
### CPU info (`SST_CPU`, `SST_CPUCache`)
- Physical/logical CPU counts, affinity get/set
- Cache line size, data cache flush, instruction cache invalidate
- Cache ops in per-architecture assembly (x86, ARM, IA-64, MIPS, PPC, SPARC)
### Timing (`SST_Time`)
- Microsecond, millisecond, and floating-point second resolution
### Endian (`SST_Endian`)
- Byte-swap 16/32/64, host-to-BE/LE conversion macros
### User info (`SST_User`)
- Username, real name, home directory
### Safe arithmetic (`SST_SafeArithmetic`)
- Overflow-checked add/multiply for all integer widths
### Assertions (`SST_Assert`)
- Debug and runtime assertion macros with pluggable handlers
## Platform backends
Each subsystem has separate `_Win32.c` and `_POSIX.c` implementations, with
additional Solaris and macOS variants where needed. CPU cache operations are
in per-architecture assembly files.

36
libsst-random/README.md Normal file
View File

@@ -0,0 +1,36 @@
# libsst-random
Pseudorandom number generation and simplex noise in C.
## PRNG algorithms
| Type | Enum | State size |
|---|---|---|
| Mersenne Twister | `SST_PRNG_MERSENNE` | 624 x 32-bit |
| CMWC | `SST_PRNG_CMWC` | 4096 x 32-bit |
| SmallPRNG | `SST_PRNG_SMALLPRNG` | 4 x 32-bit |
### Generic API
```c
SST_PRNG rng = SST_Random_CreatePRNGFromSeed(SST_PRNG_MERSENNE, 42);
float f = SST_Random_GetPRNGFloat(rng, 0.0f, 1.0f);
int i = SST_Random_GetPRNGInt(rng, 0, 100);
SST_Random_DestroyPRNG(rng);
```
Each algorithm also has direct-access functions
(`SST_Random_*SmallPRNG*`, `SST_Random_*CMWC*`).
Array-fill variants are provided for batch generation.
## Simplex noise
1D through 4D simplex noise, returning values in [-1, 1]:
- `SST_Random_MapSimplexNoise{1,2,3,4}D()`
- Array variants: `SST_Random_MapSimplexNoise{1,2,3,4}DFromArray()`
## C++ wrappers
- `ZRandomGenerator` -- RAII wrapper with Gaussian distribution support
- `ZSimplexNoise` -- RAII wrapper with `noise1`/`noise2`/`noise3`/`noise4`

40
libsst-wm/README.md Normal file
View File

@@ -0,0 +1,40 @@
# libsst-wm
Cross-platform window management, input events, and OpenGL context creation.
## API
### Window management
- `SST_WM_Init()` / `SST_WM_Shutdown()`
- `SST_WM_CreateWindowOnScreen()` / `SST_WM_DestroyWindow()`
- `SST_WM_SetWindowText()`, `SST_WM_GetWindowRect()`, `SST_WM_MoveWindowOnScreen()`, `SST_WM_ResizeWindow()`, `SST_WM_SetWindowState()`
- `SST_WM_ShowDialogBox()` -- native message dialog
### Display and video modes
- `SST_WM_CreateDisplayTarget()` / `SST_WM_DestroyDisplayTarget()`
- `SST_WM_CreateGraphicsEnumerator()` -- enumerate adapters, screens, video modes
- `SST_WM_SetVideoModeOnScreen()` / `SST_WM_GetVideoModeOnScreen()`
### Events
- `SST_WM_GetEvent()` -- dequeue next input/window event
- `SST_WM_SendUserEvent()` -- post custom event
### OpenGL
- `SST_WM_CreateOpenGLContext()` / `SST_WM_CreateSlaveOpenGLContext()` -- shared contexts for multi-threaded rendering
- `SST_WM_BindOpenGLContext()`, `SST_WM_SwapOpenGLBuffers()`, `SST_WM_DestroyOpenGLContext()`
### Software rendering
- `SST_WM_EnableSoftwareRendering()` / `SST_WM_DisableSoftwareRendering()`
- `SST_WM_LockBackbuffer()` / `SST_WM_UnlockBackbuffer()`
## Platform backends
| Backend | Windowing | GL context | Input |
|---|---|---|---|
| Win32 | Win32 API | WGL | Win32 messages |
| Xlib | X11 | GLX | Xlib / XInput2 |
| RaspPi | DispmanX | EGL (partial) | -- |
| macOS | -- | -- | -- (stub) |
Internally uses a driver function-table architecture; each backend registers
its implementation at init time.