diff options
| author | briaguya <70942617+briaguya-ai@users.noreply.github.com> | 2024-05-01 22:25:33 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-01 22:25:33 -0400 |
| commit | 222cb8a23bd0fa8b901b1654ac5d6cc2ecb25a2e (patch) | |
| tree | 41d4324876aa3c0c296a83a5a87910220919b0a9 /ZAPD/Utils/BinaryWriter.cpp | |
| parent | 9f9d0be3c914354ecabab3695581f1123c13ac20 (diff) | |
detangle utils (#21)
Diffstat (limited to 'ZAPD/Utils/BinaryWriter.cpp')
| -rw-r--r-- | ZAPD/Utils/BinaryWriter.cpp | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/ZAPD/Utils/BinaryWriter.cpp b/ZAPD/Utils/BinaryWriter.cpp new file mode 100644 index 0000000..34bcad0 --- /dev/null +++ b/ZAPD/Utils/BinaryWriter.cpp @@ -0,0 +1,148 @@ +#include "BinaryWriter.h" + +BinaryWriter::BinaryWriter(Stream* nStream) +{ + stream.reset(nStream); +} + +BinaryWriter::BinaryWriter(std::shared_ptr<Stream> nStream) +{ + stream = nStream; +} + +void BinaryWriter::SetEndianness(Endianness endianness) +{ + this->endianness = endianness; +} + +void BinaryWriter::Close() +{ + stream->Close(); +} + +std::shared_ptr<Stream> BinaryWriter::GetStream() +{ + return stream; +} + +uint64_t BinaryWriter::GetBaseAddress() +{ + return stream->GetBaseAddress(); +} + +uint64_t BinaryWriter::GetLength() +{ + return stream->GetLength(); +} + +void BinaryWriter::Seek(int32_t offset, SeekOffsetType seekType) +{ + stream->Seek(offset, seekType); +} + +void BinaryWriter::Write(int8_t value) +{ + stream->Write((char*)&value, sizeof(int8_t)); +} + +void BinaryWriter::Write(uint8_t value) +{ + stream->Write((char*)&value, sizeof(uint8_t)); +} + +void BinaryWriter::Write(int16_t value) +{ + if (endianness != Endianness::Native) + value = BSWAP16(value); + + stream->Write((char*)&value, sizeof(int16_t)); +} + +void BinaryWriter::Write(uint16_t value) +{ + if (endianness != Endianness::Native) + value = BSWAP16(value); + + stream->Write((char*)&value, sizeof(uint16_t)); +} + +void BinaryWriter::Write(int32_t value) +{ + if (endianness != Endianness::Native) + value = BSWAP32(value); + + stream->Write((char*)&value, sizeof(int32_t)); +} + +void BinaryWriter::Write(int32_t valueA, int32_t valueB) +{ + Write(valueA); + Write(valueB); +} + +void BinaryWriter::Write(uint32_t value) +{ + if (endianness != Endianness::Native) + value = BSWAP32(value); + + stream->Write((char*)&value, sizeof(uint32_t)); +} + +void BinaryWriter::Write(int64_t value) +{ + if (endianness != Endianness::Native) + value = BSWAP64(value); + + stream->Write((char*)&value, sizeof(int64_t)); +} + +void BinaryWriter::Write(uint64_t value) +{ + if (endianness != Endianness::Native) + value = BSWAP64(value); + + stream->Write((char*)&value, sizeof(uint64_t)); +} + +void BinaryWriter::Write(float value) +{ + if (endianness != Endianness::Native) + { + float tmp; + char* dst = (char*)&tmp; + char* src = (char*)&value; + dst[3] = src[0]; dst[2] = src[1]; dst[1] = src[2]; dst[0] = src[3]; + value = tmp; + } + + stream->Write((char*)&value, sizeof(float)); +} + +void BinaryWriter::Write(double value) +{ + if (endianness != Endianness::Native) + { + double tmp; + char* dst = (char*)&tmp; + char* src = (char*)&value; + dst[7] = src[0]; dst[6] = src[1]; dst[5] = src[2]; dst[4] = src[3]; + dst[3] = src[4]; dst[2] = src[5]; dst[1] = src[6]; dst[0] = src[7]; + value = tmp; + } + + stream->Write((char*)&value, sizeof(double)); +} + +void BinaryWriter::Write(const std::string& str) +{ + int strLen = str.size(); + Write(strLen); + + for (char c : str) + stream->WriteByte(c); +} + +void BinaryWriter::Write(char* srcBuffer, size_t length) +{ + stream->Write(srcBuffer, length); +} |
