Files
armorpaint/base/sources/iron_armpack.h
T
luboslenco 47bc985b42 Cleanup
2025-02-26 08:47:09 +01:00

100 lines
2.3 KiB
C

// .arm file format parser
// msgpack with typed arrays
#pragma once
#include <stdint.h>
#include <stdbool.h>
#include "iron_array.h"
#include "iron_map.h"
void *armpack_decode(buffer_t *b);
void armpack_encode_start(void *encoded);
int armpack_encode_end();
void armpack_encode_map(uint32_t count);
void armpack_encode_array(uint32_t count);
void armpack_encode_array_f32(f32_array_t *f32a);
void armpack_encode_array_i32(i32_array_t *i32a);
void armpack_encode_array_i16(i16_array_t *i16a);
void armpack_encode_array_u8(u8_array_t *u8a);
void armpack_encode_array_string(char_ptr_array_t *strings);
void armpack_encode_string(char *str);
void armpack_encode_i32(int32_t i);
void armpack_encode_f32(float f);
void armpack_encode_bool(bool b);
void armpack_encode_null();
uint32_t armpack_size_map();
uint32_t armpack_size_array();
uint32_t armpack_size_array_f32(f32_array_t *f32a);
uint32_t armpack_size_array_u8(u8_array_t *u8a);
uint32_t armpack_size_string(char *str);
uint32_t armpack_size_i32();
uint32_t armpack_size_f32();
uint32_t armpack_size_bool();
any_map_t *armpack_decode_to_map(buffer_t *b);
float armpack_map_get_f32(any_map_t *map, char *key);
int armpack_map_get_i32(any_map_t *map, char *key);
/* JS object:
let test = {
name: "test",
point: { x: 2, y: 4 },
array: i32_array_create([1, 2, 3])
};
*/
/* C struct:
typedef struct point {
int x;
int y;
} point_t;
typedef struct test {
char *name;
point_t point;
int32_array_t *array;
// Optional pointer for storing runtime data
void *_;
} test_t;
*/
/*
void encode_decode_test() {
point_t a;
a.x = 3;
a.y = 9;
uint32_t size = 0;
size += armpack_size_map();
size += armpack_size_string("x");
size += armpack_size_i32();
size += armpack_size_string("y");
size += armpack_size_i32();
void *encoded = malloc(size);
armpack_encode_start(encoded);
armpack_encode_map(2);
armpack_encode_string("x");
armpack_encode_i32(a.x);
armpack_encode_string("y");
armpack_encode_i32(a.y);
buffer_t b = { .buffer = encoded, .length = size };
point_t *decoded = armpack_decode(b);
}
*/
// #ifdef __GNUC__
// #define PACK(__Declaration__) __Declaration__ __attribute__((__packed__))
// #endif
// #ifdef _MSC_VER
// #define PACK(__Declaration__) __pragma(pack(push, 1)) __Declaration__ __pragma(pack(pop))
// #endif