From e0eacfa9773c83850ed5169d1e889ff845180581 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Sun, 17 Dec 2023 11:10:04 -0500 Subject: refactor --- nbt/nbt.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 nbt/nbt.c (limited to 'nbt/nbt.c') diff --git a/nbt/nbt.c b/nbt/nbt.c new file mode 100644 index 0000000..a2a21d5 --- /dev/null +++ b/nbt/nbt.c @@ -0,0 +1,65 @@ +#include "nbt.h" +#include "map.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: + map_free(&tag->data.compound); + 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: + return snbt_read(tag, stream); + 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: + return snbt_print(tag, stream); + default: + return false; + } +} -- cgit v1.2.3-freya