#pragma once #include "allocator.h" #include #include enum { IDX_TYPE_UNKNOWN = -1, IDX_TYPE_UNSIGNED_BYTE, IDX_TYPE_SIGNED_BYTE, IDX_TYPE_SHORT, IDX_TYPE_INT, IDX_TYPE_FLOAT, IDX_TYPE_DOUBLE, IDX_TYPE_COUNT, }; enum { IDX_OK, IDX_BAD_PARAM, IDX_FILE_ACCESS, IDX_FILE_BAD_MAGIC, IDX_FILE_BAD_TYPE, IDX_FILE_BAD_DIMS, IDX_FILE_WRITE_MAGIC, IDX_FILE_WRITE_DIMS, IDX_FILE_WRITE_DATA, IDX_FILE_READ_MAGIC, IDX_FILE_READ_DIMS, IDX_FILE_READ_DATA, }; struct idx { struct { int val; uint8_t size; } type; struct { void *data; size_t len; } buf; struct { uint8_t count; uint32_t *sizes; } dims; const struct allocator *allocator; }; int idx_new(struct idx *idx, uint8_t dims_count, uint32_t *dims, int data_type, const struct allocator *allocator); int idx_wrap(struct idx *idx, void *data, uint8_t dims_count, uint32_t *dims, int data_type); int idx_load(struct idx *idx, const char *filename, const struct allocator *allocator); int idx_save(struct idx *idx, const char *filename); int idx_deinit(struct idx *idx); void *idx_get(struct idx *idx, int dims, ...);