diff options
| author | Marijn Tamis <[email protected]> | 2018-05-03 18:22:48 +0200 |
|---|---|---|
| committer | Marijn Tamis <[email protected]> | 2018-05-03 18:22:48 +0200 |
| commit | ca32c59a58d37c1822e185a2d5f3d0d3e8943593 (patch) | |
| tree | b06b9eec03f34344ef8fc31aa147b2714d3962ee /NvCloth/samples/SampleBase/utils/DataStream.h | |
| parent | Forced rename of platform folders in cmake dir. Git didn't pick this up before. (diff) | |
| download | nvcloth-ca32c59a58d37c1822e185a2d5f3d0d3e8943593.tar.xz nvcloth-ca32c59a58d37c1822e185a2d5f3d0d3e8943593.zip | |
NvCloth 1.1.4 Release. (24070740)
Diffstat (limited to 'NvCloth/samples/SampleBase/utils/DataStream.h')
| -rw-r--r-- | NvCloth/samples/SampleBase/utils/DataStream.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/NvCloth/samples/SampleBase/utils/DataStream.h b/NvCloth/samples/SampleBase/utils/DataStream.h new file mode 100644 index 0000000..c47da39 --- /dev/null +++ b/NvCloth/samples/SampleBase/utils/DataStream.h @@ -0,0 +1,72 @@ +/* +* Copyright (c) 2008-2017, NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA CORPORATION and its licensors retain all intellectual property +* and proprietary rights in and to this software, related documentation +* and any modifications thereto. Any use, reproduction, disclosure or +* distribution of this software and related documentation without an express +* license agreement from NVIDIA CORPORATION is strictly prohibited. +*/ + +#pragma once +#include <vector> +#include <string> +#include <assert.h> + +class DataStream +{ +public: + DataStream(); + DataStream(void* data, int sizeInBytes); + DataStream(const char* filename); + static bool fileExists(const char* filename); + + void saveToFile(const char* filename); + + template<typename T> + void write(T& value) + { + if(mBuffer.size() < mWritePos + sizeof(T)) + mBuffer.resize(mWritePos + sizeof(T)); + memcpy(&mBuffer[mWritePos], &value, sizeof(T)); + mWritePos += sizeof(T); + } + template<> + void write<std::string>(std::string& value) + { + int len = (int)value.length(); + if(mBuffer.size() < mWritePos + len + sizeof(int)) + mBuffer.resize(mWritePos + len + sizeof(int)); + memcpy(&mBuffer[mWritePos], &len, sizeof(int)); + mWritePos += sizeof(int); + memcpy(&mBuffer[mWritePos], value.c_str(), len); + mWritePos += len; + } + + void write(void* data, int sizeInBytes); + + template<typename T> + T read() + { + T value; + assert(mReadPos + sizeof(T) <= mBuffer.size()); + memcpy(&value, &mBuffer[mReadPos], sizeof(T)); + mReadPos += sizeof(T); + return value; + } + template<> + std::string read<std::string>() + { + int len = read<int>(); + std::string value; + value.resize(len); + assert(mReadPos + len < (int)mBuffer.size()); + memcpy(&value[0], &mBuffer[mReadPos], len); + mReadPos += len; + return value; + } +private: + std::vector<unsigned char> mBuffer; + int mReadPos; + int mWritePos; +};
\ No newline at end of file |