diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2023-08-17 00:35:58 -0600 |
|---|---|---|
| committer | KiritoDv <kiritodev01@gmail.com> | 2023-08-17 00:35:58 -0600 |
| commit | 6fd8e5ee43dd0f87eb4e57b86e84770fcd95db25 (patch) | |
| tree | 6a22e06c6105b63a0ae560f571f6d4e2522ba364 /lib/binarytools/MemoryStream.cpp | |
Added StormLib, nlohmann, BinaryTools and CLI11
Diffstat (limited to 'lib/binarytools/MemoryStream.cpp')
| -rw-r--r-- | lib/binarytools/MemoryStream.cpp | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/lib/binarytools/MemoryStream.cpp b/lib/binarytools/MemoryStream.cpp new file mode 100644 index 0000000..d94b7d3 --- /dev/null +++ b/lib/binarytools/MemoryStream.cpp @@ -0,0 +1,83 @@ +#include "MemoryStream.h" +#include <cstring> + +#ifndef _MSC_VER +#define memcpy_s(dest, destSize, source, sourceSize) memcpy(dest, source, destSize) +#endif + +LUS::MemoryStream::MemoryStream() { + mBuffer = std::vector<char>(); + // mBuffer.reserve(1024 * 16); + mBufferSize = 0; + mBaseAddress = 0; +} + +LUS::MemoryStream::MemoryStream(char* nBuffer, size_t nBufferSize) : MemoryStream() { + mBuffer = std::vector<char>(nBuffer, nBuffer + nBufferSize); + mBufferSize = nBufferSize; + mBaseAddress = 0; +} + +LUS::MemoryStream::~MemoryStream() { +} + +uint64_t LUS::MemoryStream::GetLength() { + return mBuffer.size(); +} + +void LUS::MemoryStream::Seek(int32_t offset, SeekOffsetType seekType) { + if (seekType == SeekOffsetType::Start) { + mBaseAddress = offset; + } else if (seekType == SeekOffsetType::Current) { + mBaseAddress += offset; + } else if (seekType == SeekOffsetType::End) { + mBaseAddress = mBufferSize - 1 - offset; + } +} + +std::unique_ptr<char[]> LUS::MemoryStream::Read(size_t length) { + std::unique_ptr<char[]> result = std::make_unique<char[]>(length); + + memcpy_s(result.get(), length, &mBuffer[mBaseAddress], length); + mBaseAddress += length; + + return result; +} + +void LUS::MemoryStream::Read(const char* dest, size_t length) { + memcpy_s((void*)dest, length, &mBuffer[mBaseAddress], length); + mBaseAddress += length; +} + +int8_t LUS::MemoryStream::ReadByte() { + return mBuffer[mBaseAddress++]; +} + +void LUS::MemoryStream::Write(char* srcBuffer, size_t length) { + if (mBaseAddress + length >= mBuffer.size()) { + mBuffer.resize(mBaseAddress + length); + mBufferSize += length; + } + + memcpy_s(&mBuffer[mBaseAddress], length, srcBuffer, length); + mBaseAddress += length; +} + +void LUS::MemoryStream::WriteByte(int8_t value) { + if (mBaseAddress >= mBuffer.size()) { + mBuffer.resize(mBaseAddress + 1); + mBufferSize = mBaseAddress; + } + + mBuffer[mBaseAddress++] = value; +} + +std::vector<char> LUS::MemoryStream::ToVector() { + return mBuffer; +} + +void LUS::MemoryStream::Flush() { +} + +void LUS::MemoryStream::Close() { +} |
