#include "tag.h" #include "nbt/nbt.h" #include "json/json.h" #include void tag_free(tag_t *tag) { if (tag->name_len > 0 && tag->name != NULL) free(tag->name); switch(tag->type) { case TAG_END: case TAG_BYTE: case TAG_SHORT: case TAG_INT: case TAG_LONG: case TAG_FLOAT: case TAG_DOUBLE: break; case TAG_BYTE_ARRAY: free(tag->data.b_arr.data); break; case TAG_STRING: free(tag->data.string.data); break; case TAG_LIST: for (int32_t i = 0; i < tag->data.list.size; i++) tag_free(&tag->data.list.tags[i]); free(tag->data.list.tags); break; case TAG_COMPOUND: for (int32_t i = 0; i < tag->data.compound.size; i++) tag_free(&tag->data.compound.tags[i]); free(tag->data.compound.tags); break; case TAG_INT_ARRAY: free(tag->data.i_arr.data); break; case TAG_LONG_ARRAY: free(tag->data.l_arr.data); break; } } bool tag_read(tag_t *tag, const stream_t *stream, format_t format) { switch (format) { case JSON: return json_read(tag, stream); case NBT: return nbt_read(tag, stream); case SNBT: default: return false; } } bool tag_print(tag_t *tag, const stream_t *stream, format_t format) { switch (format) { case JSON: return json_print(tag, stream); case NBT: return nbt_print(tag, stream); case SNBT: default: return false; } }