12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #pragma once
- #include "foundation/types.h"
- #include "foundation/endian.h"
- typedef struct ByteWriter
- {
- uint8_t *data;
- size_t data_length;
- size_t offset;
- } ByteWriter, *nu_bytewriter_t;
- #define BYTEWRITER_INIT(data, length) { (uint8_t *)data, length, 0 }
- inline static uint32_t bw_bytes_written(nu_bytewriter_t bw)
- {
- return bw->offset;
- }
- inline static void bytewriter_fourcc_string(nu_bytewriter_t bw, const char *fourcc)
- {
- bw->data[bw->offset] = fourcc[0];
- bw->data[bw->offset+1] = fourcc[1];
- bw->data[bw->offset+2] = fourcc[2];
- bw->data[bw->offset+3] = fourcc[3];
- bw->offset += 4;
- }
- inline static void bytewriter_uint32_le(nu_bytewriter_t bw, uint32_t value)
- {
- *(uint32_t *)(&bw->data[bw->offset]) = value;
- bw->offset+=4;
- }
- inline static void bytewriter_uint16_le(nu_bytewriter_t bw, uint16_t value)
- {
- *(uint16_t *)(&bw->data[bw->offset]) = value;
- bw->offset+=2;
- }
- inline static void bytewriter_uint32_be(nu_bytewriter_t bw, uint32_t value)
- {
- *(uint32_t *)(&bw->data[bw->offset]) = _byteswap_ulong(value);
- bw->offset+=4;
- }
- inline static void bytewriter_uint24_be(nu_bytewriter_t bw, uint32_t value)
- {
- bw->data[bw->offset] = (uint8_t)(value >> 16) & 0xFF;
- bw->data[bw->offset+1] = (uint8_t)(value >> 8) & 0xFF;
- bw->data[bw->offset+2] = (uint8_t)value & 0xFF;
- bw->offset+=3;
- }
- inline static void bytewriter_uint16_le(nu_bytewriter_t bw, uint16_t value)
- {
- *(uint16_t *)(&bw->data[bw->offset]) = value;
- bw->offset+=2;
- }
- inline static void bytewriter_uint32_zero(nu_bytewriter_t bw)
- {
- *(uint32_t *)(&bw->data[bw->offset]) = 0;
- bw->offset+=4;
- }
- inline static void bytewriter_uint32_nzero(nu_bytewriter_t bw, uint32_t num_zeroes)
- {
- memset(bw->data, 0, num_zeroes*4);
- bw->offset+=num_zeroes*4;
- }
- inline static void bytewriter_uint8(nu_bytewriter_t bw, uint8_t value)
- {
- *(uint8_t *)&bw->data[bw->offset] = value;
- bw->offset++;
- }
|