permanent-satori-hole/src/pack.c
2023-12-27 01:35:22 +01:00

159 lines
4.8 KiB
C

#include "pack.h"
static inline void sat_pack_16be(uint8_t *buffer, uint16_t num) {
*buffer++ = num >> 8;
*buffer++ = num;
}
static inline void sat_pack_16le(uint8_t *buffer, uint16_t num) {
*buffer++ = num;
*buffer++ = num >> 8;
}
static inline void sat_pack_32be(uint8_t *buffer, uint32_t num) {
*buffer++ = num >> 24;
*buffer++ = num >> 16;
*buffer++ = num >> 8;
*buffer++ = num;
}
static inline void sat_pack_32le(uint8_t *buffer, uint32_t num) {
*buffer++ = num;
*buffer++ = num >> 8;
*buffer++ = num >> 16;
*buffer++ = num >> 24;
}
static inline void sat_pack_64be(uint8_t *buffer, uint64_t num) {
*buffer++ = num >> 56;
*buffer++ = num >> 48;
*buffer++ = num >> 40;
*buffer++ = num >> 32;
*buffer++ = num >> 24;
*buffer++ = num >> 16;
*buffer++ = num >> 8;
*buffer++ = num;
}
static inline void sat_pack_64le(uint8_t *buffer, uint64_t num) {
*buffer++ = num;
*buffer++ = num >> 8;
*buffer++ = num >> 16;
*buffer++ = num >> 24;
*buffer++ = num >> 32;
*buffer++ = num >> 40;
*buffer++ = num >> 48;
*buffer++ = num >> 56;
}
void sat_pack_i16be(uint8_t *buffer, int16_t num) { sat_pack_16be(buffer, num); }
void sat_pack_u16be(uint8_t *buffer, uint16_t num) { sat_pack_16be(buffer, num); }
void sat_pack_i32be(uint8_t *buffer, int32_t num) { sat_pack_32be(buffer, num); }
void sat_pack_u32be(uint8_t *buffer, uint32_t num) { sat_pack_32be(buffer, num); }
void sat_pack_i64be(uint8_t *buffer, int64_t num) { sat_pack_64be(buffer, num); }
void sat_pack_u64be(uint8_t *buffer, uint64_t num) { sat_pack_64be(buffer, num); }
void sat_pack_i16le(uint8_t *buffer, int16_t num) { sat_pack_16le(buffer, num); }
void sat_pack_u16le(uint8_t *buffer, uint16_t num) { sat_pack_16le(buffer, num); }
void sat_pack_i32le(uint8_t *buffer, int32_t num) { sat_pack_32le(buffer, num); }
void sat_pack_u32le(uint8_t *buffer, uint32_t num) { sat_pack_32le(buffer, num); }
void sat_pack_i64le(uint8_t *buffer, int64_t num) { sat_pack_64le(buffer, num); }
void sat_pack_u64le(uint8_t *buffer, uint64_t num) { sat_pack_64le(buffer, num); }
static inline uint16_t sat_unpack_16be(uint8_t *buffer) {
return ((uint16_t)buffer[0] << 8) | buffer[1];
}
static inline uint16_t sat_unpack_16le(uint8_t *buffer) {
return ((uint16_t)buffer[1] << 8) | buffer[0];
}
static inline uint32_t sat_unpack_32be(uint8_t *buffer) {
return ((uint32_t)buffer[0] << 24) | ((uint32_t)buffer[1] << 16)
| ((uint32_t)buffer[2] << 8) | buffer[3];
}
static inline uint32_t sat_unpack_32le(uint8_t *buffer) {
return ((uint32_t)buffer[3] << 24) | ((uint32_t)buffer[2] << 16)
| ((uint32_t)buffer[1] << 8) | buffer[0];
}
static inline uint64_t sat_unpack_64be(uint8_t *buffer) {
return ((uint64_t)buffer[0] << 56) | ((uint64_t)buffer[1] << 48)
| ((uint64_t)buffer[2] << 40) | ((uint64_t)buffer[3] << 32)
| ((uint64_t)buffer[4] << 24) | ((uint64_t)buffer[5] << 16)
| ((uint64_t)buffer[6] << 8) | buffer[7];
}
static inline uint64_t sat_unpack_64le(uint8_t *buffer) {
return ((uint64_t)buffer[7] << 56) | ((uint64_t)buffer[6] << 48)
| ((uint64_t)buffer[5] << 40) | ((uint64_t)buffer[4] << 32)
| ((uint64_t)buffer[3] << 24) | ((uint64_t)buffer[2] << 16)
| ((uint64_t)buffer[1] << 8) | buffer[0];
}
static inline int16_t sat_sign_i16(uint16_t num) {
if(num <= 0x7FFFu)
return num;
return -1 - (int16_t)(0xFFFF - num);
}
static inline int32_t sat_sign_i32(uint32_t num) {
if(num <= 0x7FFFFFFFu)
return num;
return -1 - (int32_t)(0xFFFFFFFFu - num);
}
static inline int64_t sat_sign_i64(uint64_t num) {
if(num <= 0x7FFFFFFFFFFFFFFFu)
return num;
return -1 - (int64_t)(0xFFFFFFFFFFFFFFFFu - num);
}
int16_t sat_unpack_i16be(uint8_t *buffer) {
return sat_sign_i16(sat_unpack_16be(buffer));
}
uint16_t sat_unpack_u16be(uint8_t *buffer) {
return sat_unpack_16be(buffer);
}
int32_t sat_unpack_i32be(uint8_t *buffer) {
return sat_sign_i32(sat_unpack_32be(buffer));
}
uint32_t sat_unpack_u32be(uint8_t *buffer) {
return sat_unpack_32be(buffer);
}
int64_t sat_unpack_i64be(uint8_t *buffer) {
return sat_sign_i64(sat_unpack_64be(buffer));
}
uint64_t sat_unpack_u64be(uint8_t *buffer) {
return sat_unpack_64be(buffer);
}
int16_t sat_unpack_i16le(uint8_t *buffer) {
return sat_sign_i16(sat_unpack_16le(buffer));
}
uint16_t sat_unpack_u16le(uint8_t *buffer) {
return sat_unpack_16le(buffer);
}
int32_t sat_unpack_i32le(uint8_t *buffer) {
return sat_sign_i32(sat_unpack_32le(buffer));
}
uint32_t sat_unpack_u32le(uint8_t *buffer) {
return sat_unpack_32le(buffer);
}
int64_t sat_unpack_i64le(uint8_t *buffer) {
return sat_sign_i64(sat_unpack_64le(buffer));
}
uint64_t sat_unpack_u64le(uint8_t *buffer) {
return sat_unpack_64le(buffer);
}