mirror of
https://github.com/vgmstream/vgmstream.git
synced 2025-02-21 04:48:21 +01:00
cleanup: reader helpers
This commit is contained in:
parent
5231825ddb
commit
881883d194
@ -3,32 +3,32 @@
|
||||
#include "reader_sf.h"
|
||||
#include "endianness.h"
|
||||
|
||||
void put_8bit(uint8_t* buf, int8_t i) {
|
||||
buf[0] = i;
|
||||
void put_u8(uint8_t* buf, uint8_t v) {
|
||||
buf[0] = v;
|
||||
}
|
||||
|
||||
void put_16bitLE(uint8_t* buf, int16_t i) {
|
||||
buf[0] = (i & 0xFF);
|
||||
buf[1] = i >> 8;
|
||||
void put_u16le(uint8_t* buf, uint16_t v) {
|
||||
buf[0] = (uint8_t)((v >> 0) & 0xFF);
|
||||
buf[1] = (uint8_t)((v >> 8) & 0xFF);
|
||||
}
|
||||
|
||||
void put_32bitLE(uint8_t* buf, int32_t i) {
|
||||
buf[0] = (uint8_t)(i & 0xFF);
|
||||
buf[1] = (uint8_t)((i >> 8) & 0xFF);
|
||||
buf[2] = (uint8_t)((i >> 16) & 0xFF);
|
||||
buf[3] = (uint8_t)((i >> 24) & 0xFF);
|
||||
void put_u32le(uint8_t* buf, uint32_t v) {
|
||||
buf[0] = (uint8_t)((v >> 0) & 0xFF);
|
||||
buf[1] = (uint8_t)((v >> 8) & 0xFF);
|
||||
buf[2] = (uint8_t)((v >> 16) & 0xFF);
|
||||
buf[3] = (uint8_t)((v >> 24) & 0xFF);
|
||||
}
|
||||
|
||||
void put_16bitBE(uint8_t* buf, int16_t i) {
|
||||
buf[0] = i >> 8;
|
||||
buf[1] = (i & 0xFF);
|
||||
void put_u16be(uint8_t* buf, uint16_t v) {
|
||||
buf[0] = (uint8_t)((v >> 8) & 0xFF);
|
||||
buf[1] = (uint8_t)((v >> 0) & 0xFF);
|
||||
}
|
||||
|
||||
void put_32bitBE(uint8_t* buf, int32_t i) {
|
||||
buf[0] = (uint8_t)((i >> 24) & 0xFF);
|
||||
buf[1] = (uint8_t)((i >> 16) & 0xFF);
|
||||
buf[2] = (uint8_t)((i >> 8) & 0xFF);
|
||||
buf[3] = (uint8_t)(i & 0xFF);
|
||||
void put_u32be(uint8_t* buf, uint32_t v) {
|
||||
buf[0] = (uint8_t)((v >> 24) & 0xFF);
|
||||
buf[1] = (uint8_t)((v >> 16) & 0xFF);
|
||||
buf[2] = (uint8_t)((v >> 8) & 0xFF);
|
||||
buf[3] = (uint8_t)((v >> 0) & 0xFF);
|
||||
}
|
||||
|
||||
/* **************************************************** */
|
||||
|
@ -7,45 +7,39 @@
|
||||
|
||||
/* host endian independent multi-byte integer reading */
|
||||
|
||||
static inline int16_t get_16bitBE(const uint8_t* p) {
|
||||
return ((uint16_t)p[0]<<8) | ((uint16_t)p[1]);
|
||||
}
|
||||
|
||||
static inline int16_t get_16bitLE(const uint8_t* p) {
|
||||
return ((uint16_t)p[0]) | ((uint16_t)p[1]<<8);
|
||||
}
|
||||
|
||||
static inline int32_t get_32bitBE(const uint8_t* p) {
|
||||
return ((uint32_t)p[0]<<24) | ((uint32_t)p[1]<<16) | ((uint32_t)p[2]<<8) | ((uint32_t)p[3]);
|
||||
}
|
||||
|
||||
static inline int32_t get_32bitLE(const uint8_t* p) {
|
||||
return ((uint32_t)p[0]) | ((uint32_t)p[1]<<8) | ((uint32_t)p[2]<<16) | ((uint32_t)p[3]<<24);
|
||||
}
|
||||
|
||||
static inline int64_t get_64bitBE(const uint8_t* p) {
|
||||
return (uint64_t)(((uint64_t)p[0]<<56) | ((uint64_t)p[1]<<48) | ((uint64_t)p[2]<<40) | ((uint64_t)p[3]<<32) | ((uint64_t)p[4]<<24) | ((uint64_t)p[5]<<16) | ((uint64_t)p[6]<<8) | ((uint64_t)p[7]));
|
||||
}
|
||||
|
||||
static inline int64_t get_64bitLE(const uint8_t* p) {
|
||||
return (uint64_t)(((uint64_t)p[0]) | ((uint64_t)p[1]<<8) | ((uint64_t)p[2]<<16) | ((uint64_t)p[3]<<24) | ((uint64_t)p[4]<<32) | ((uint64_t)p[5]<<40) | ((uint64_t)p[6]<<48) | ((uint64_t)p[7]<<56));
|
||||
}
|
||||
|
||||
/* alias of the above */
|
||||
static inline int8_t get_s8 (const uint8_t* p) { return ( int8_t)p[0]; }
|
||||
static inline uint8_t get_u8 (const uint8_t* p) { return (uint8_t)p[0]; }
|
||||
static inline int16_t get_s16le(const uint8_t* p) { return ( int16_t)get_16bitLE(p); }
|
||||
static inline uint16_t get_u16le(const uint8_t* p) { return (uint16_t)get_16bitLE(p); }
|
||||
static inline int16_t get_s16be(const uint8_t* p) { return ( int16_t)get_16bitBE(p); }
|
||||
static inline uint16_t get_u16be(const uint8_t* p) { return (uint16_t)get_16bitBE(p); }
|
||||
static inline int32_t get_s32le(const uint8_t* p) { return ( int32_t)get_32bitLE(p); }
|
||||
static inline uint32_t get_u32le(const uint8_t* p) { return (uint32_t)get_32bitLE(p); }
|
||||
static inline int32_t get_s32be(const uint8_t* p) { return ( int32_t)get_32bitBE(p); }
|
||||
static inline uint32_t get_u32be(const uint8_t* p) { return (uint32_t)get_32bitBE(p); }
|
||||
static inline int64_t get_s64le(const uint8_t* p) { return ( int64_t)get_64bitLE(p); }
|
||||
static inline uint64_t get_u64le(const uint8_t* p) { return (uint64_t)get_64bitLE(p); }
|
||||
static inline int64_t get_s64be(const uint8_t* p) { return ( int64_t)get_64bitBE(p); }
|
||||
static inline uint64_t get_u64be(const uint8_t* p) { return (uint64_t)get_64bitBE(p); }
|
||||
|
||||
static inline int16_t get_s16be(const uint8_t* p) {
|
||||
return ((uint16_t)p[0]<<8) | ((uint16_t)p[1]);
|
||||
}
|
||||
static inline uint16_t get_u16be(const uint8_t* p) { return (uint16_t)get_s16be(p); }
|
||||
|
||||
static inline int16_t get_s16le(const uint8_t* p) {
|
||||
return ((uint16_t)p[0]) | ((uint16_t)p[1]<<8);
|
||||
}
|
||||
static inline uint16_t get_u16le(const uint8_t* p) { return (uint16_t)get_s16le(p); }
|
||||
|
||||
static inline int32_t get_s32be(const uint8_t* p) {
|
||||
return ((uint32_t)p[0]<<24) | ((uint32_t)p[1]<<16) | ((uint32_t)p[2]<<8) | ((uint32_t)p[3]);
|
||||
}
|
||||
static inline uint32_t get_u32be(const uint8_t* p) { return (uint32_t)get_s32be(p); }
|
||||
|
||||
static inline int32_t get_s32le(const uint8_t* p) {
|
||||
return ((uint32_t)p[0]) | ((uint32_t)p[1]<<8) | ((uint32_t)p[2]<<16) | ((uint32_t)p[3]<<24);
|
||||
}
|
||||
static inline uint32_t get_u32le(const uint8_t* p) { return (uint32_t)get_s32le(p); }
|
||||
|
||||
static inline int64_t get_s64be(const uint8_t* p) {
|
||||
return (uint64_t)(((uint64_t)p[0]<<56) | ((uint64_t)p[1]<<48) | ((uint64_t)p[2]<<40) | ((uint64_t)p[3]<<32) | ((uint64_t)p[4]<<24) | ((uint64_t)p[5]<<16) | ((uint64_t)p[6]<<8) | ((uint64_t)p[7]));
|
||||
}
|
||||
static inline uint64_t get_u64be(const uint8_t* p) { return (uint64_t)get_s64be(p); }
|
||||
|
||||
static inline int64_t get_s64le(const uint8_t* p) {
|
||||
return (uint64_t)(((uint64_t)p[0]) | ((uint64_t)p[1]<<8) | ((uint64_t)p[2]<<16) | ((uint64_t)p[3]<<24) | ((uint64_t)p[4]<<32) | ((uint64_t)p[5]<<40) | ((uint64_t)p[6]<<48) | ((uint64_t)p[7]<<56));
|
||||
}
|
||||
static inline uint64_t get_u64le(const uint8_t* p) { return (uint64_t)get_s64le(p); }
|
||||
|
||||
|
||||
/* The recommended int-to-float type punning in C is through union, but pointer casting
|
||||
* works too (though less portable due to aliasing rules?). For C++ memcpy seems
|
||||
@ -58,6 +52,7 @@ static inline float get_f32be(const uint8_t* p) {
|
||||
temp.u32 = get_u32be(p);
|
||||
return temp.f32;
|
||||
}
|
||||
|
||||
static inline float get_f32le(const uint8_t* p) {
|
||||
union {
|
||||
uint32_t u32;
|
||||
@ -66,6 +61,7 @@ static inline float get_f32le(const uint8_t* p) {
|
||||
temp.u32 = get_u32le(p);
|
||||
return temp.f32;
|
||||
}
|
||||
|
||||
static inline double get_d64be(const uint8_t* p) {
|
||||
union {
|
||||
uint64_t u64;
|
||||
@ -74,6 +70,7 @@ static inline double get_d64be(const uint8_t* p) {
|
||||
temp.u64 = get_u64be(p);
|
||||
return temp.d64;
|
||||
}
|
||||
|
||||
static inline double get_d64le(const uint8_t* p) {
|
||||
union {
|
||||
uint64_t u64;
|
||||
@ -82,6 +79,7 @@ static inline double get_d64le(const uint8_t* p) {
|
||||
temp.u64 = get_u64le(p);
|
||||
return temp.d64;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static inline float get_f32be_cast(const uint8_t* p) {
|
||||
uint32_t sample_int = get_u32be(p);
|
||||
|
@ -3,23 +3,17 @@
|
||||
|
||||
#include "../streamtypes.h"
|
||||
|
||||
|
||||
void put_8bit(uint8_t* buf, int8_t i);
|
||||
void put_16bitLE(uint8_t* buf, int16_t i);
|
||||
void put_32bitLE(uint8_t* buf, int32_t i);
|
||||
void put_16bitBE(uint8_t* buf, int16_t i);
|
||||
void put_32bitBE(uint8_t* buf, int32_t i);
|
||||
void put_u8(uint8_t* buf, uint8_t v);
|
||||
void put_u16le(uint8_t* buf, uint16_t v);
|
||||
void put_u32le(uint8_t* buf, uint32_t v);
|
||||
void put_u16be(uint8_t* buf, uint16_t v);
|
||||
void put_u32be(uint8_t* buf, uint32_t v);
|
||||
|
||||
/* alias of the above */ //TODO: improve
|
||||
#define put_u8 put_8bit
|
||||
#define put_u16le put_16bitLE
|
||||
#define put_u32le put_32bitLE
|
||||
#define put_u16be put_16bitBE
|
||||
#define put_u32be put_32bitBE
|
||||
#define put_s8 put_8bit
|
||||
#define put_s16le put_16bitLE
|
||||
#define put_s32le put_32bitLE
|
||||
#define put_s16be put_16bitBE
|
||||
#define put_s32be put_32bitBE
|
||||
#define put_s8 put_u8
|
||||
#define put_s16le put_u16le
|
||||
#define put_s32le put_u32le
|
||||
#define put_s16be put_u16be
|
||||
#define put_s32be put_u32be
|
||||
|
||||
#endif
|
||||
|
@ -31,18 +31,22 @@ static inline int32_t read_32bitBE(off_t offset, STREAMFILE* sf) {
|
||||
if (read_streamfile(buf,offset,4,sf)!=4) return -1;
|
||||
return get_s32be(buf);
|
||||
}
|
||||
static inline int64_t read_64bitLE(off_t offset, STREAMFILE* sf) {
|
||||
static inline int64_t read_s64le(off_t offset, STREAMFILE* sf) {
|
||||
uint8_t buf[8];
|
||||
|
||||
if (read_streamfile(buf,offset,8,sf)!=8) return -1;
|
||||
return get_s64le(buf);
|
||||
}
|
||||
static inline int64_t read_64bitBE(off_t offset, STREAMFILE* sf) {
|
||||
static inline uint64_t read_u64le(off_t offset, STREAMFILE* sf) { return (uint64_t)read_s64le(offset, sf); }
|
||||
|
||||
static inline int64_t read_s64be(off_t offset, STREAMFILE* sf) {
|
||||
uint8_t buf[8];
|
||||
|
||||
if (read_streamfile(buf,offset,8,sf)!=8) return -1;
|
||||
return get_s64be(buf);
|
||||
}
|
||||
static inline uint64_t read_u64be(off_t offset, STREAMFILE* sf) { return (uint64_t)read_s64be(offset, sf); }
|
||||
|
||||
static inline int8_t read_8bit(off_t offset, STREAMFILE* sf) {
|
||||
uint8_t buf[1];
|
||||
|
||||
@ -61,10 +65,6 @@ static inline int32_t read_s32le(off_t offset, STREAMFILE* sf) { return
|
||||
static inline uint32_t read_u32le(off_t offset, STREAMFILE* sf) { return (uint32_t)read_32bitLE(offset, sf); }
|
||||
static inline int32_t read_s32be(off_t offset, STREAMFILE* sf) { return read_32bitBE(offset, sf); }
|
||||
static inline uint32_t read_u32be(off_t offset, STREAMFILE* sf) { return (uint32_t)read_32bitBE(offset, sf); }
|
||||
static inline int64_t read_s64be(off_t offset, STREAMFILE* sf) { return read_64bitBE(offset, sf); }
|
||||
static inline uint64_t read_u64be(off_t offset, STREAMFILE* sf) { return (uint64_t)read_64bitBE(offset, sf); }
|
||||
static inline int64_t read_s64le(off_t offset, STREAMFILE* sf) { return read_64bitLE(offset, sf); }
|
||||
static inline uint64_t read_u64le(off_t offset, STREAMFILE* sf) { return (uint64_t)read_64bitLE(offset, sf); }
|
||||
|
||||
static inline float read_f32be(off_t offset, STREAMFILE* sf) {
|
||||
uint8_t buf[4];
|
||||
|
Loading…
x
Reference in New Issue
Block a user