Commit Graph

50 Commits (fc2caf3bc0cc3124ade91572e856b2f9a4a93c28)

Author SHA1 Message Date
BodgeMaster fc2caf3bc0 lib/nbt: Implement more member functions for tag types 2022-10-01 04:51:53 +02:00
BodgeMaster 434c976cc5 lib/nbt: Continue implementing in-memory NBT tag data types
This is still all unvalidated work.
For all I know it might cause your computer to burst into flames,
grow an arm and a leg and an eye, and attack you with a sword.
But probably, it will just not work and I will realize that sleepy
past me was a fucking idiot (as always).
2022-09-28 03:43:54 +02:00
BodgeMaster 10b1d9fa0c lib/nbt: Start implementing NBT data types, make NBT::Helper::writeString() return an error instead of aborting the program
The former is finally some progress on getting NBT going,
though at this point it is all unvalidated work.
For all I know it might cause your computer to burst into flames,
grow an arm and a leg and an eye, and attack you with a sword.
But probably, it won’t do that and instead start working after I
have debugged it so much that I wish I could attack my PC with a sword.

The latter is the implementation of a change I prepared in a previous commit
when i added ErrorOrVoid.
2022-09-26 03:11:44 +02:00
BodgeMaster 53878c3e2b lib/nbt: Start implementing the in-memory data structure for NBT 2022-09-15 06:06:47 +02:00
BodgeMaster ad291ee77d lib/nbt: Capitalize NBT::Helper because I feel like it 2022-09-15 02:00:07 +02:00
BodgeMaster aab91a2523 lib/nbt: Fix NBT::validateRawNBTData() and NBT::validateRawListContents closing #52 and #53 2022-09-11 09:14:32 +02:00
BodgeMaster 629c999336 lib/nbt: Return correct error code from read functions (fixes #17) 2022-08-27 22:35:10 +02:00
BodgeMaster a1fc0ce4b4 lib/nbt: Fix a possible buffer overflow in readString() 2022-08-15 12:02:58 +02:00
BodgeMaster 25bec4c587 lib/nbt: Validator: Fix bytes not being added up correctly in multiple places 2022-08-15 10:51:50 +02:00
BodgeMaster 589cf1ddaf lib/nbt: NBT validator: Fix wrong function declaration in the header, fix not using the currentPosition variable when accessing data 2022-08-15 09:53:06 +02:00
BodgeMaster 884a5239c6 lib/nbt: fix a bug in NBT::helper::readString() which caused it to asuume that dataSize is the size of the string 2022-08-15 09:51:46 +02:00
BodgeMaster 9190cad80d lib/nbt: finish implementation of validateRawNBTData() and fix a critical macro-induced bug
I did a `#define return` and then tried to `if () return;` everywhere...
2022-08-15 08:50:07 +02:00
BodgeMaster a862590370 lib/nbt: Start implementing the NBT validator
In theory, this is it. It’s just missing the portion that deals with lists
and unit tests. Both will each likely require similar effort to this.
2022-08-15 05:20:05 +02:00
BodgeMaster acc19ae100 lib/nbt: Change behavior of totalTagSize to treat encounters of compounds and lists as errors
I stumbled over this when writing the unit test. Previously, it would return
an error code but explicitly mark it as not being an error. This was intended
behavior but I decided to change it because I didn’t anticipate it when writing
the test.

Technically `ErrorOr<T>` can be used to pass any message alongside `T`,
but practically, it is reasonable to assume that the error code is
`ErrorCodes::SUCCESS` when `isError` is false. Therefore, this feature
should be really only used in the weirdest edge cases - if at all.
Even then, it is most likely still preferable to flag it as an error and
just hand the resulting `T` back using the long constructor
`ErrorOr<T>(bool, uint8_t, T)`.
2022-08-13 17:32:47 +02:00
BodgeMaster 149285c357 lib/nbt: Finish implementing containedDataLength, rename nextTagTotalSize->totalTagSize and nextTagDataLength->containedDataLength 2022-08-13 17:32:47 +02:00
BodgeMaster 86f1ef596f lib/nbt: Begin implementing nextTagDataLength 2022-08-13 17:32:47 +02:00
BodgeMaster 027f324f03 lib/nbt: Fix a bug in nextTagTotalSize and significantly improve readability by removing redundant code 2022-08-13 17:32:47 +02:00
BodgeMaster f5d85da98c lib/nbt: Move the functions for getting tag sizes into the helper namespace, give up on handling lists the same as all other tags
I tried dealing with lists in the same way as with other more basic tags
but came to the conclusion that this is most likely not feasible in the same
way that it is not feasible for compounds. It would require a mini-parser
that can deal with all sorts of tags (including nested lists and compounds).

Instead, an approach more similar to the recursion for compound tags will
be used (using its own function to deal with the missing tag headers ofc).
2022-08-13 17:32:47 +02:00
BodgeMaster 396b9673fd lib/nbt: Various minor fixes to get the program to compile properly 2022-08-13 17:32:47 +02:00
BodgeMaster 68fbf3ae20 lib/nbt: remove a function used to get the next tag type which introduced unnecessary complexity 2022-08-13 17:32:47 +02:00
BodgeMaster c7dd5471dd lib/nbt: Start implementing NBT validator 2022-08-13 17:32:47 +02:00
BodgeMaster 4af9003761 Code style: I just decided to accept that float and double exist and that we can just assume they are 32 and 64 bits repectively.
This isn't going to run on an Arduino or anything like that anyway.
2022-08-04 07:47:24 +02:00
Milan Suman 704b440d5a lib/nbt: Add tag classes 2022-08-04 00:01:12 +05:30
BodgeMaster 5c73308934 Rename all headers from .h++ to .hpp
Idk why I did that in the first place. Probably bc hpp looks stupid.
But having a + in a file name bugs me just as much. And other ppl as well.
So I changed it.
2022-08-02 03:35:08 +02:00
Milan Suman 4f1ad714bd lib/nbt.cpp: Implement writeString function 2022-07-28 17:15:04 +05:30
Milan Suman b5312aeb58 lib/nbt: implement readString NBT helper function 2022-07-20 12:08:04 +05:30
BodgeMaster 7e049fcfd1 lib/error: rename and add error constants 2022-07-13 22:01:18 +02:00
Shwoomple 68484c6a20 NBT: Moar nbt helper functions. Add all functions in issue #18 except writeString 2022-07-06 18:28:02 +05:30
Shwoomple 847b73c6ae NBT: implement the overloaded writeInt8Array 2022-07-06 17:16:47 +05:30
Shwoomple b0ccc74409 NBT: Added writeInt8Array. 2022-07-06 16:27:32 +05:30
BodgeMaster 762ba7f089 NBT: add write helpers for float types 2022-07-04 19:43:31 +02:00
BodgeMaster 8c7be385ae NBT: add write helpers for int32 and int64 2022-07-04 18:29:38 +02:00
BodgeMaster 6d62d995df NBT: implement write helpers for int8 and int16 2022-07-04 18:03:40 +02:00
BodgeMaster 044593e081 NBT: add compiler errors to the endian specific sections 2022-07-02 16:41:54 +02:00
BodgeMaster 664632d111 NBT: add stub write helper functions 2022-07-02 02:08:32 +02:00
BodgeMaster 4f9577eb36 NBT: implement readFloat helpers 2022-07-01 21:15:18 +02:00
BodgeMaster 975cdd309d NBT: implement NBT::helper::readInt64Array 2022-06-30 11:02:30 +02:00
BodgeMaster edcf40d5a5 NBT: implement NBT::helper::readInt32Array 2022-06-30 10:45:12 +02:00
BodgeMaster c87c519bb5 NBT: implement NBT::helper::readInt8Array 2022-06-29 12:22:54 +02:00
BodgeMaster d43ef67ed1 NBT: fix bug in readInt64, improve readability 2022-06-29 00:05:02 +02:00
BodgeMaster 7c12a92b2a NBT: implement the integer helper functions 2022-06-28 22:04:04 +02:00
BodgeMaster 4f760f44be NBT: Implement readInt8 helper closing #2 2022-06-28 16:58:31 +02:00
BodgeMaster 12e9533772 apparently that's not how cpp works (I stole it from somewhere lol) 2022-06-28 16:51:52 +02:00
BodgeMaster 8594f4cbb0 NBT: Fix ambiguity between int types and bool when calling the ErrorOr<> constructor 2022-06-28 16:13:33 +02:00
BodgeMaster 081035db32 expose helpers in the header, rename NBT::helpers to NBT::helper 2022-06-28 15:19:47 +02:00
BodgeMaster ab920a114b comply with code style guidelines, also minor fix to them 2022-06-28 14:25:32 +02:00
BodgeMaster 9b58d165c0 We have a suitable string type for UTF-8 now. 2022-06-27 18:15:01 +02:00
BodgeMaster b0bd027898 Add license and copyright notices 2022-06-27 11:46:13 +02:00
BodgeMaster f80a33ddb0 start implementation of NBT parser 2022-06-27 04:50:32 +02:00
BodgeMaster 0d10af1bd6 do not use the lib prefix for library names 2022-06-24 16:50:41 +02:00