mirror of
https://github.com/JorjBauer/aiie.git
synced 2024-12-01 14:50:54 +00:00
143 lines
3.5 KiB
C
143 lines
3.5 KiB
C
|
#ifndef __SERIALIZE_H
|
||
|
#define __SERIALIZE_H
|
||
|
|
||
|
#define serialize8(var) { uint8_t buf = (uint8_t)var; \
|
||
|
if (g_filemanager->write(fd, &buf, 1) != 1) { \
|
||
|
printf("Failed to write 1 byte\n"); \
|
||
|
goto err; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
#define serializeMagic(var) { \
|
||
|
printf("Serializing magic '%d'\n", var); \
|
||
|
uint8_t buf = var; \
|
||
|
if (g_filemanager->write(fd, &buf, 1) != 1) { \
|
||
|
printf("Failed to write 1 byte of magic\n"); \
|
||
|
goto err; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
#define serialize16(var) { \
|
||
|
uint8_t buf[2]; \
|
||
|
uint8_t ptr = 0; \
|
||
|
buf[ptr++] = ((var >> 8) & 0xFF); \
|
||
|
buf[ptr++] = ((var ) & 0xFF); \
|
||
|
if (g_filemanager->write(fd, buf, 2) != 2) { \
|
||
|
printf("Failed to write 2 bytes\n"); \
|
||
|
goto err; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
#define serialize32(var) { \
|
||
|
uint8_t buf[4]; \
|
||
|
uint8_t ptr = 0; \
|
||
|
buf[ptr++] = ((var >> 24) & 0xFF); \
|
||
|
buf[ptr++] = ((var >> 16) & 0xFF); \
|
||
|
buf[ptr++] = ((var >> 8) & 0xFF); \
|
||
|
buf[ptr++] = ((var ) & 0xFF); \
|
||
|
if (g_filemanager->write(fd, buf, 4) != 4) { \
|
||
|
printf("Failed to write 4 bytes\n"); \
|
||
|
goto err; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
#define serialize64(var) { \
|
||
|
uint8_t buf[8]; \
|
||
|
uint8_t ptr = 0; \
|
||
|
buf[ptr++] = ((var >> 56) & 0xFF); \
|
||
|
buf[ptr++] = ((var >> 48) & 0xFF); \
|
||
|
buf[ptr++] = ((var >> 40) & 0xFF); \
|
||
|
buf[ptr++] = ((var >> 32) & 0xFF); \
|
||
|
buf[ptr++] = ((var >> 24) & 0xFF); \
|
||
|
buf[ptr++] = ((var >> 16) & 0xFF); \
|
||
|
buf[ptr++] = ((var >> 8) & 0xFF); \
|
||
|
buf[ptr++] = ((var ) & 0xFF); \
|
||
|
if (g_filemanager->write(fd, buf, 8) != 8) { \
|
||
|
printf("Failed to write 8 bytes\n"); \
|
||
|
goto err; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
#define serializeString(s) { \
|
||
|
if (g_filemanager->write(fd, s, strlen(s)+1) != strlen(s)+1) { \
|
||
|
printf("Failed to write string '%s'\n", s); \
|
||
|
goto err; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
#define deserialize8(var) { \
|
||
|
uint8_t buf; \
|
||
|
if (g_filemanager->read(fd, &buf, 1) != 1) { \
|
||
|
printf("Failed to deserialize 1 byte\n"); \
|
||
|
goto err; \
|
||
|
} \
|
||
|
var = buf; \
|
||
|
}
|
||
|
|
||
|
#define deserializeMagic(expect) { \
|
||
|
uint8_t buf; \
|
||
|
printf("Deserializing magic, expecting 0x%X\n", expect); \
|
||
|
if (g_filemanager->read(fd, &buf, 1) != 1) { \
|
||
|
printf("Failed to deserialize 1 byte of magic\n"); \
|
||
|
goto err; \
|
||
|
} \
|
||
|
if (buf != expect) { \
|
||
|
printf("magic error: 0x%X does not match expected 0x%X\n", buf, expect); \
|
||
|
goto err; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
#define deserialize16(var) { \
|
||
|
uint8_t buf[2]; \
|
||
|
uint8_t ptr = 0; \
|
||
|
if (g_filemanager->read(fd, buf, 2) != 2) { \
|
||
|
printf("Failed to deserialize 2 bytes\n"); \
|
||
|
goto err; \
|
||
|
} \
|
||
|
var = buf[ptr++]; \
|
||
|
var <<= 8; var |= buf[ptr++]; }
|
||
|
|
||
|
#define deserialize32(var) { \
|
||
|
uint8_t buf[4]; \
|
||
|
uint8_t ptr = 0; \
|
||
|
if (g_filemanager->read(fd, buf, 4) != 4) { \
|
||
|
printf("Failed to deserialize 4 bytes\n"); \
|
||
|
goto err; \
|
||
|
} \
|
||
|
var = buf[ptr++]; \
|
||
|
var <<= 8; var |= buf[ptr++]; \
|
||
|
var <<= 8; var |= buf[ptr++]; \
|
||
|
var <<= 8; var |= buf[ptr++]; }
|
||
|
|
||
|
#define deserialize64(var) { \
|
||
|
uint8_t buf[8]; \
|
||
|
uint8_t ptr = 0; \
|
||
|
if (g_filemanager->read(fd, buf, 8) != 8) { \
|
||
|
printf("Failed to deserialize 8 bytes\n"); \
|
||
|
goto err; \
|
||
|
} \
|
||
|
var = buf[ptr++]; \
|
||
|
var <<= 8; var |= buf[ptr++]; \
|
||
|
var <<= 8; var |= buf[ptr++]; \
|
||
|
var <<= 8; var |= buf[ptr++]; \
|
||
|
var <<= 8; var |= buf[ptr++]; \
|
||
|
var <<= 8; var |= buf[ptr++]; \
|
||
|
var <<= 8; var |= buf[ptr++]; \
|
||
|
var <<= 8; var |= buf[ptr++]; }
|
||
|
|
||
|
#define deserializeString(var) { \
|
||
|
uint8_t c; \
|
||
|
char *ptr = var; \
|
||
|
while (1) { \
|
||
|
if (g_filemanager->read(fd, &c, 1) != 1) { \
|
||
|
printf("Failed to read string byte\n"); \
|
||
|
goto err; \
|
||
|
} \
|
||
|
printf(". "); \
|
||
|
*(ptr++) = c; \
|
||
|
if (c == 0) { break; } \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
#endif
|