summaryrefslogtreecommitdiff
path: root/ZAPDUtils/Utils/MemoryStream.cpp
diff options
context:
space:
mode:
authorNicholas Estelami <NEstelami@users.noreply.github.com>2021-08-08 13:51:51 -0400
committerGitHub <noreply@github.com>2021-08-08 13:51:51 -0400
commit0fb7568ec0d07ea414f8c3f286de352e9606d016 (patch)
treedeba58f4cf06f669aa14e85462055d63b4bc6e99 /ZAPDUtils/Utils/MemoryStream.cpp
parent82bd27604a4c8f8c1f01f9c2f54c87fab103c39f (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.cpp96
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