summaryrefslogtreecommitdiffstats
path: root/external/optick/optick_serialization.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'external/optick/optick_serialization.cpp')
-rw-r--r--external/optick/optick_serialization.cpp178
1 files changed, 178 insertions, 0 deletions
diff --git a/external/optick/optick_serialization.cpp b/external/optick/optick_serialization.cpp
new file mode 100644
index 0000000..a47a9b7
--- /dev/null
+++ b/external/optick/optick_serialization.cpp
@@ -0,0 +1,178 @@
+#include "optick.config.h"
+
+#if USE_OPTICK
+
+#include "optick_common.h"
+#include "optick_serialization.h"
+
+namespace Optick
+{
+ string OutputDataStream::GetData()
+ {
+ flush();
+ return str();
+ }
+
+ OutputDataStream & OutputDataStream::Write(const char * buffer, size_t size)
+ {
+ write(buffer, size);
+ return *this;
+ }
+
+ OutputDataStream OutputDataStream::Empty;
+
+ OutputDataStream &operator << ( OutputDataStream &stream, const char* val )
+ {
+ uint32 length = val == nullptr ? 0 : (uint32)strlen(val);
+ stream << length;
+
+ if (length > 0)
+ {
+ stream.write( val, length );
+ }
+ return stream;
+ }
+
+ OutputDataStream &operator << ( OutputDataStream &stream, int val )
+ {
+ stream.write( (char*)&val, sizeof(int) );
+ return stream;
+ }
+
+ OutputDataStream &operator << ( OutputDataStream &stream, int64 val )
+ {
+ stream.write( (char*)&val, sizeof(int64) );
+ return stream;
+ }
+
+ OutputDataStream &operator << ( OutputDataStream &stream, char val )
+ {
+ stream.write( (char*)&val, sizeof(char) );
+ return stream;
+ }
+
+ OutputDataStream &operator << (OutputDataStream &stream, int8 val)
+ {
+ stream.write((char*)&val, sizeof(val));
+ return stream;
+ }
+
+ OutputDataStream &operator << ( OutputDataStream &stream, byte val )
+ {
+ stream.write( (char*)&val, sizeof(byte) );
+ return stream;
+ }
+
+ OutputDataStream & operator<<(OutputDataStream &stream, uint64 val)
+ {
+ stream.write( (char*)&val, sizeof(uint64) );
+ return stream;
+ }
+
+ OutputDataStream & operator<<(OutputDataStream &stream, uint32 val)
+ {
+ stream.write( (char*)&val, sizeof(uint32) );
+ return stream;
+ }
+
+ OutputDataStream & operator<<(OutputDataStream &stream, float val)
+ {
+ stream.write((char*)&val, sizeof(float));
+ return stream;
+ }
+
+ OutputDataStream & operator<<(OutputDataStream &stream, const string& val)
+ {
+ stream << (uint32)val.length();
+ if (!val.empty())
+ stream.write(&val[0], sizeof(val[0]) * val.length());
+ return stream;
+ }
+
+ OutputDataStream & operator<<(OutputDataStream &stream, const wstring& val)
+ {
+ size_t count = val.length() * sizeof(wchar_t);
+ stream << (uint32)count;
+ if (!val.empty())
+ stream.write((char*)(&val[0]), count);
+ return stream;
+ }
+
+ InputDataStream &operator >> (InputDataStream &stream, int16 &val)
+ {
+ stream.read((char*)&val, sizeof(int16));
+ return stream;
+ }
+
+ InputDataStream &operator >> ( InputDataStream &stream, int32 &val )
+ {
+ stream.read( (char*)&val, sizeof(int) );
+ return stream;
+ }
+
+ InputDataStream &operator >> ( InputDataStream &stream, int64 &val )
+ {
+ stream.read( (char*)&val, sizeof(int64) );
+ return stream;
+ }
+
+ InputDataStream & operator>>( InputDataStream &stream, byte &val )
+ {
+ stream.read( (char*)&val, sizeof(byte) );
+ return stream;
+ }
+
+ InputDataStream & operator >> (InputDataStream &stream, uint16 &val)
+ {
+ stream.read((char*)&val, sizeof(uint16));
+ return stream;
+ }
+
+ InputDataStream & operator>>( InputDataStream &stream, uint32 &val )
+ {
+ stream.read( (char*)&val, sizeof(uint32) );
+ return stream;
+ }
+
+ InputDataStream & operator>>( InputDataStream &stream, uint64 &val )
+ {
+ stream.read( (char*)&val, sizeof(uint64) );
+ return stream;
+ }
+
+ InputDataStream & operator >> ( InputDataStream &stream, string &val)
+ {
+ int32 length = 0;
+ stream >> length;
+ val.resize(length + 1);
+ stream.read( (char*)&val[0], length);
+ return stream;
+ }
+
+ InputDataStream::InputDataStream() :
+ stringstream( ios_base::in | ios_base::out )
+ {
+ }
+
+ void InputDataStream::Append(const char *buffer, size_t length)
+ {
+ write( buffer, length );
+ }
+
+ size_t InputDataStream::Length()
+ {
+ return (size_t)(tellp() - tellg());
+ }
+
+ bool InputDataStream::Skip(size_t length)
+ {
+ bool result = Length() <= length;
+ seekg(length, ios_base::cur);
+ return result;
+ }
+
+
+
+}
+
+#endif //USE_OPTICK \ No newline at end of file