diff options
Diffstat (limited to 'byte_stream.gd')
-rw-r--r-- | byte_stream.gd | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/byte_stream.gd b/byte_stream.gd new file mode 100644 index 0000000..df55a7d --- /dev/null +++ b/byte_stream.gd @@ -0,0 +1,72 @@ +class_name ByteStream + + +var bytes: PackedByteArray + +var position: int = 0 + + +@warning_ignore("shadowed_variable") +static func from_bytes(bytes: PackedByteArray): + var byte_stream = ByteStream.new() + + byte_stream.bytes = bytes + + return byte_stream + + +@warning_ignore("shadowed_variable") +func seek(position: int): + if position > 0: + assert(position < bytes.size()) + + self.position = position + + +func decode_u8(): + var result = bytes.decode_u8(position) + seek(position + 1) + + return result + +func decode_u16(): + var result = bytes.decode_u16(position) + seek(position + 2) + + return result + +func decode_u32(): + var result = bytes.decode_u32(position) + seek(position + 4) + + return result + +func decode_u64(): + var result = bytes.decode_u64(position) + seek(position + 8) + + return result + +func decode_s8(): + var result = bytes.decode_s8(position) + seek(position + 1) + + return result + +func decode_s16(): + var result = bytes.decode_s16(position) + seek(position + 2) + + return result + +func decode_s32(): + var result = bytes.decode_s32(position) + seek(position + 4) + + return result + +func decode_s64(): + var result = bytes.decode_s64(position) + seek(position + 8) + + return result |