159static inline uint8_t tiny_clamp_u8(int32_t v) {
160 return (uint8_t) (v < 0 ? 0 : (v > 255 ? 255 : v));
169static inline uint8_t tiny_clamp_u8f(
float v) {
170 return (uint8_t) (v <= 0.0f ? 0
171 : (v >= 255.0f ? 255 : (int32_t) (v + 0.5f)));
182static inline float tiny_clampf(
float v,
float lo,
float hi) {
183 return v < lo ? lo : (v > hi ? hi : v);
194static inline int32_t tiny_clampi(int32_t v, int32_t lo, int32_t hi) {
195 return v < lo ? lo : (v > hi ? hi : v);
205static inline uint32_t tiny_min_u32(uint32_t a, uint32_t b) {
206 return a < b ? a : b;
216static inline uint32_t tiny_max_u32(uint32_t a, uint32_t b) {
217 return a > b ? a : b;
222#pragma region lookup tables
269 uint8_t* out,
const uint8_t* first,
const uint8_t* second
274#pragma region checksums
290uint32_t
tiny_crc32(uint32_t crc,
const uint8_t* data,
size_t size);
305uint32_t
tiny_adler32(uint32_t adler,
const uint8_t* data,
size_t size);
309#pragma region strings
344#pragma region huffman
374 const uint32_t* frequencies, uint32_t count, uint32_t limit,
380#pragma region byte writer
Reads a bitstream out of a byte buffer.
Definition util.h:547
uint32_t count
Definition util.h:557
const uint8_t * data
Definition util.h:549
uint32_t phantom
How many of those bits came from past the end of the buffer.
Definition util.h:564
int overrun
Definition util.h:566
size_t pos
Definition util.h:553
size_t size
Definition util.h:551
uint32_t accumulator
Definition util.h:555
Writes a bitstream into a TinyWriter.
Definition util.h:669
uint32_t count
Definition util.h:675
TinyWriter * out
Definition util.h:671
uint32_t accumulator
Definition util.h:673
A grow on demand byte sink.
Definition util.h:389
size_t capacity
Definition util.h:395
uint8_t * data
Definition util.h:391
size_t size
Definition util.h:393
int error
Definition util.h:397
void tiny_bitwriter_lsb(TinyBitWriter *writer, uint32_t value, uint32_t count)
Writes bits, least significant first.
uint32_t tiny_writer_sizeof(void)
Size of a TinyWriter, for a host allocating one across the ABI.
uint8_t * tiny_writer_data(const TinyWriter *writer)
Pointer to a writer's bytes.
float tiny_expf(float x)
Exponential of x.
float tiny_floorf(float x)
Largest integral value not greater than x.
float tiny_fabsf(float x)
Absolute value of a float.
int tiny_writer_write(TinyWriter *writer, const void *bytes, size_t size)
Appends raw bytes.
void tiny_lut_srgb(uint8_t *lut, int encode)
Fills a 256 entry table with the sRGB transfer function.
float tiny_truncf(float x)
Integral part of x, discarding the fraction.
int tiny_writer_le16(TinyWriter *writer, uint16_t value)
Appends a 16 bit value, little endian.
int tiny_writer_le32(TinyWriter *writer, uint32_t value)
Appends a 32 bit value, little endian.
size_t tiny_bits_remaining(const TinyBitReader *reader)
Bytes not yet consumed, counting only whole bytes past the head.
void tiny_lut_identity(uint8_t *lut)
Fills a 256 entry table with the identity mapping.
void tiny_bits_skip_lsb(TinyBitReader *reader, uint32_t count)
Discards bits already examined with a least significant first peek.
uint32_t tiny_bits_msb(TinyBitReader *reader, uint32_t count)
Reads bits, most significant first.
float tiny_ceilf(float x)
Smallest integral value not less than x.
int tiny_huffman_lengths(const uint32_t *frequencies, uint32_t count, uint32_t limit, uint8_t *lengths)
Builds length limited Huffman code lengths from symbol frequencies.
void tiny_bitwriter_init(TinyBitWriter *writer, TinyWriter *out)
Points a bit writer at a byte sink.
int tiny_writer_be16(TinyWriter *writer, uint16_t value)
Appends a 16 bit value, big endian.
uint32_t tiny_bits_lsb(TinyBitReader *reader, uint32_t count)
Reads bits, least significant first.
int tiny_writer_be32(TinyWriter *writer, uint32_t value)
Appends a 32 bit value, big endian.
size_t tiny_strlen(const char *s)
Length of a NUL terminated string.
uint8_t * tiny_writer_detach(TinyWriter *writer, size_t *size)
Detaches a writer's buffer, handing ownership to the caller.
void tiny_writer_free(TinyWriter *writer)
Releases a writer's buffer.
void tiny_bits_align_lsb(TinyBitReader *reader)
Drops the partial byte at the read head of a least significant first stream.
void tiny_bits_skip_msb(TinyBitReader *reader, uint32_t count)
Discards bits already examined with a most significant first peek.
int tiny_writer_init(TinyWriter *writer, size_t initial)
Prepares a writer, optionally reserving space up front.
int tiny_strcmp(const char *a, const char *b)
Compares two NUL terminated strings.
void tiny_lut_compose(uint8_t *out, const uint8_t *first, const uint8_t *second)
Composes two 256 entry tables into one.
int tiny_writer_fill(TinyWriter *writer, uint8_t value, size_t count)
Appends the same byte repeatedly.
uint32_t tiny_crc32(uint32_t crc, const uint8_t *data, size_t size)
Computes a running CRC-32 over a buffer.
void tiny_bits_align_msb(TinyBitReader *reader)
Drops the partial byte at the read head of a most significant first stream.
float tiny_roundf(float x)
Nearest integral value, halfway cases rounded away from zero.
float tiny_sinf(float x)
Sine of x.
void tiny_bits_init(TinyBitReader *reader, const uint8_t *data, size_t size)
Points a bit reader at a buffer.
void tiny_bitwriter_flush_msb(TinyBitWriter *writer)
Flushes a most significant bit first stream, padding with one bits.
int tiny_writer_u8(TinyWriter *writer, uint8_t value)
Appends one byte.
void tiny_lut_gamma(uint8_t *lut, float gamma)
Fills a 256 entry table with a gamma curve.
float tiny_fmodf(float x, float y)
Floating point remainder of x/y, with the sign of x.
uint32_t tiny_adler32(uint32_t adler, const uint8_t *data, size_t size)
Computes a running Adler-32 over a buffer.
float tiny_cosf(float x)
Cosine of x.
uint32_t tiny_bits_peek_msb(TinyBitReader *reader, uint32_t count)
Reads bits without consuming them, most significant first.
float tiny_atan2f(float y, float x)
Angle of the vector (x, y) from the positive x axis.
uint32_t tiny_writer_size(const TinyWriter *writer)
Number of bytes a writer holds.
void tiny_bitwriter_msb(TinyBitWriter *writer, uint32_t value, uint32_t count)
Writes bits, most significant first.
float tiny_sqrtf(float x)
Square root of a float.
float tiny_powf(float x, float y)
x raised to the power y.
int tiny_strcopy(char *dest, const char *src, size_t capacity)
Copies a string into a fixed buffer, always terminating it.
float tiny_logf(float x)
Natural logarithm of x.
void tiny_bitwriter_flush_lsb(TinyBitWriter *writer)
Flushes a least significant bit first stream, padding with zero bits.
uint32_t tiny_bits_peek_lsb(TinyBitReader *reader, uint32_t count)
Reads bits without consuming them, least significant first.
int tiny_writer_reserve(TinyWriter *writer, size_t extra)
Reserves capacity for at least extra more bytes.