diff options
| author | Nicholas Estelami <NEstelami@users.noreply.github.com> | 2021-08-08 13:51:51 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-08 13:51:51 -0400 |
| commit | 0fb7568ec0d07ea414f8c3f286de352e9606d016 (patch) | |
| tree | deba58f4cf06f669aa14e85462055d63b4bc6e99 /ZAPDUtils/Utils/MemoryStream.cpp | |
| parent | 82bd27604a4c8f8c1f01f9c2f54c87fab103c39f (diff) | |
Moved utility code into its own library (#162)
* Initial exporter implementation
* Updated to use static library.
* minor cleanup
* Cleaned things up a bit
* Fixed merge issues
* Minor commenting
* Added Begin and End functions, and removed HL stuff (to be turned into an exporter at a later date)
* Cleaned some stuff up
* Additional cleanup
* Removed some commented out code
* Fixed compilation issues
* Cleanup
* Fixed merge issues
* Got rid of unused windows.h includes
* Cleanup
* Fixed warning
* Removed additional redundancies
* Cleanup
* Fixed merge issues
* Fixed some compiler issues, added makefile for exportertest.
* Removed redundancies and clang formatted
* Made sure exportertest compiles with C++17
* Moved certain files into new "Utils" folder.
* GetExporterMap uses a reference now
* Minor fixes and updates.
* Moved utility code into its own library
* Fixed merge issues
* Fixed compilation issue
* Added missing classes
* Updated makefile
* Minor update
* Forgot to make an enum an 'enum class'
* Minor fix
* Few more adjustments
* Bug fix
* Another bug fix
* Bug fix again
* added comment
* New functions added for exporters
* Made certain fields public
Co-authored-by: Jack Walker <7463599+Jack-Walker@users.noreply.github.com>
Diffstat (limited to 'ZAPDUtils/Utils/MemoryStream.cpp')
| -rw-r--r-- | ZAPDUtils/Utils/MemoryStream.cpp | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/ZAPDUtils/Utils/MemoryStream.cpp b/ZAPDUtils/Utils/MemoryStream.cpp new file mode 100644 index 0000000..6c27399 --- /dev/null +++ b/ZAPDUtils/Utils/MemoryStream.cpp @@ -0,0 +1,96 @@ +#include "MemoryStream.h" +#include <string.h> + +#ifndef _MSC_VER +#define memcpy_s(dest, destSize, source, sourceSize) memcpy(dest, source, destSize) +#endif + +MemoryStream::MemoryStream() +{ + buffer = std::vector<char>(); + bufferSize = 0; + baseAddress = 0; +} + +MemoryStream::MemoryStream(char* nBuffer, size_t nBufferSize) : MemoryStream() +{ + buffer = std::vector<char>(nBuffer, nBuffer + nBufferSize); + bufferSize = nBufferSize; + baseAddress = 0; +} + +MemoryStream::~MemoryStream() +{ +} + +uint64_t MemoryStream::GetLength() +{ + return buffer.size(); +} + +void MemoryStream::Seek(int32_t offset, SeekOffsetType seekType) +{ + if (seekType == SeekOffsetType::Start) + baseAddress = offset; + else if (seekType == SeekOffsetType::Current) + baseAddress += offset; + else if (seekType == SeekOffsetType::End) + baseAddress = bufferSize - 1 - offset; +} + +std::unique_ptr<char[]> MemoryStream::Read(size_t length) +{ + std::unique_ptr<char[]> result = std::make_unique<char[]>(length); + + memcpy_s(result.get(), length, &buffer[baseAddress], length); + baseAddress += length; + + return result; +} + +void MemoryStream::Read(const char* dest, size_t length) +{ + memcpy_s((void*)dest, length, &buffer[baseAddress], length); + baseAddress += length; +} + +int8_t MemoryStream::ReadByte() +{ + return buffer[baseAddress++]; +} + +void MemoryStream::Write(char* srcBuffer, size_t length) +{ + if (baseAddress + length >= buffer.size()) + { + buffer.resize(baseAddress + length); + bufferSize += length; + } + + memcpy_s(&buffer[baseAddress], length, srcBuffer, length); + baseAddress += length; +} + +void MemoryStream::WriteByte(int8_t value) +{ + if (baseAddress >= buffer.size()) + { + buffer.resize(baseAddress + 1); + bufferSize = baseAddress; + } + + buffer[baseAddress++] = value; +} + +std::vector<char> MemoryStream::ToVector() +{ + return buffer; +} + +void MemoryStream::Flush() +{ +} + +void MemoryStream::Close() +{ +}
\ No newline at end of file |
