# 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`
