base layer, mostly stolen
This commit is contained in:
+89
@@ -0,0 +1,89 @@
|
||||
#include "all.h"
|
||||
|
||||
fn u64 writeU64ToBufferLE(u8* buffer, u64 value) {
|
||||
buffer[0] = (u8)(value & 0xFF);
|
||||
buffer[1] = (u8)((value >> 8) & 0xFF);
|
||||
buffer[2] = (u8)((value >> 16) & 0xFF);
|
||||
buffer[3] = (u8)((value >> 24) & 0xFF);
|
||||
buffer[4] = (u8)((value >> 32) & 0xFF);
|
||||
buffer[5] = (u8)((value >> 40) & 0xFF);
|
||||
buffer[6] = (u8)((value >> 48) & 0xFF);
|
||||
buffer[7] = (u8)((value >> 56) & 0xFF);
|
||||
return 8;// number of bytes written
|
||||
}
|
||||
|
||||
fn u64 writeU32ToBufferLE(u8* buffer, u32 value) {
|
||||
buffer[0] = (u8)(value & 0xFF);
|
||||
buffer[1] = (u8)((value >> 8) & 0xFF);
|
||||
buffer[2] = (u8)((value >> 16) & 0xFF);
|
||||
buffer[3] = (u8)((value >> 24) & 0xFF);
|
||||
return 4;// number of bytes written
|
||||
}
|
||||
|
||||
fn u64 writeI32ToBufferLE(u8* buffer, i32 value) {
|
||||
buffer[0] = (u8)(value & 0xFF);
|
||||
buffer[1] = (u8)((value >> 8) & 0xFF);
|
||||
buffer[2] = (u8)((value >> 16) & 0xFF);
|
||||
buffer[3] = (u8)((value >> 24) & 0xFF);
|
||||
return 4;// number of bytes written
|
||||
}
|
||||
|
||||
fn u64 writeU16ToBufferLE(u8* buffer, u16 value) {
|
||||
buffer[0] = (u8)(value & 0xFF);
|
||||
buffer[1] = (u8)((value >> 8) & 0xFF);
|
||||
return 2;// number of bytes written
|
||||
}
|
||||
|
||||
fn u64 writeF32ToBufferLE(u8* buffer, f32 value) {
|
||||
u32 bits;
|
||||
memcpy(&bits, &value, sizeof(u32)); // reinterpret float bits as integer
|
||||
|
||||
buffer[0] = (u8)(bits & 0xFF);
|
||||
buffer[1] = (u8)((bits >> 8) & 0xFF);
|
||||
buffer[2] = (u8)((bits >> 16) & 0xFF);
|
||||
buffer[3] = (u8)((bits >> 24) & 0xFF);
|
||||
return 4;// number of bytes written
|
||||
}
|
||||
|
||||
fn u64 readU64FromBufferLE(u8 *buffer) {
|
||||
return (u64)buffer[0] |
|
||||
((u64)buffer[1] << 8) |
|
||||
((u64)buffer[2] << 16) |
|
||||
((u64)buffer[3] << 24) |
|
||||
((u64)buffer[4] << 32) |
|
||||
((u64)buffer[5] << 40) |
|
||||
((u64)buffer[6] << 48) |
|
||||
((u64)buffer[7] << 56);
|
||||
}
|
||||
|
||||
fn u32 readU32FromBufferLE(u8 *buffer) {
|
||||
return (u32)buffer[0] |
|
||||
((u32)buffer[1] << 8) |
|
||||
((u32)buffer[2] << 16) |
|
||||
((u32)buffer[3] << 24);
|
||||
}
|
||||
|
||||
fn i32 readI32FromBufferLE(u8 *buffer) {
|
||||
return (i32)buffer[0] |
|
||||
((i32)buffer[1] << 8) |
|
||||
((i32)buffer[2] << 16) |
|
||||
((i32)buffer[3] << 24);
|
||||
}
|
||||
|
||||
fn u16 readU16FromBufferLE(u8 *buffer) {
|
||||
return (u16)buffer[0] |
|
||||
((u16)buffer[1] << 8);
|
||||
}
|
||||
|
||||
fn f32 readF32FromBufferLE(u8 *buf) {
|
||||
u32 bits = 0;
|
||||
bits |= (u32)(u8)buf[0] << 0;
|
||||
bits |= (u32)(u8)buf[1] << 8;
|
||||
bits |= (u32)(u8)buf[2] << 16;
|
||||
bits |= (u32)(u8)buf[3] << 24;
|
||||
|
||||
f32 value;
|
||||
memcpy(&value, &bits, sizeof(f32));
|
||||
return value;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user