diff options
author | Freya Murphy <freya@freyacat.org> | 2023-12-17 11:10:04 -0500 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2023-12-17 11:10:04 -0500 |
commit | e0eacfa9773c83850ed5169d1e889ff845180581 (patch) | |
tree | 9f8bb433404ce7e4dda1b86ca4dd5d5a2fba10e9 /nbt/nbt.c | |
parent | snbt (diff) | |
download | nbtvis-e0eacfa9773c83850ed5169d1e889ff845180581.tar.gz nbtvis-e0eacfa9773c83850ed5169d1e889ff845180581.tar.bz2 nbtvis-e0eacfa9773c83850ed5169d1e889ff845180581.zip |
Diffstat (limited to 'nbt/nbt.c')
-rw-r--r-- | nbt/nbt.c | 65 |
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; + } +} |