summaryrefslogtreecommitdiff
path: root/nbt/nbt.c
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2023-12-17 11:10:04 -0500
committerFreya Murphy <freya@freyacat.org>2023-12-17 11:10:04 -0500
commite0eacfa9773c83850ed5169d1e889ff845180581 (patch)
tree9f8bb433404ce7e4dda1b86ca4dd5d5a2fba10e9 /nbt/nbt.c
parentsnbt (diff)
downloadnbtvis-e0eacfa9773c83850ed5169d1e889ff845180581.tar.gz
nbtvis-e0eacfa9773c83850ed5169d1e889ff845180581.tar.bz2
nbtvis-e0eacfa9773c83850ed5169d1e889ff845180581.zip
refactorHEADmain
Diffstat (limited to 'nbt/nbt.c')
-rw-r--r--nbt/nbt.c65
1 files changed, 65 insertions, 0 deletions
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 <stdlib.h>
+
+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;
+ }
+}