summaryrefslogtreecommitdiff
path: root/source/slang-capture-replay/parameter-encoder.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang-capture-replay/parameter-encoder.h')
-rw-r--r--source/slang-capture-replay/parameter-encoder.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/source/slang-capture-replay/parameter-encoder.h b/source/slang-capture-replay/parameter-encoder.h
new file mode 100644
index 000000000..c7c2d959a
--- /dev/null
+++ b/source/slang-capture-replay/parameter-encoder.h
@@ -0,0 +1,51 @@
+#ifndef PARAMETER_ENCODER_H
+#define PARAMETER_ENCODER_H
+
+#include <cstdio>
+#include <cinttypes>
+#include <cstdint>
+
+#include "output-stream.h"
+
+namespace SlangCapture
+{
+ class ParameterEncoder
+ {
+ public:
+ ParameterEncoder(OutputStream* stream) : m_stream(stream) {};
+ void encodeInt8(int8_t value) { encodeValue(value); }
+ void encodeUint8(uint8_t value) { encodeValue(value); }
+ void encodeInt16(int16_t value) { encodeValue(value); }
+ void encodeUint16(uint16_t value) { encodeValue(value); }
+ void encodeInt32(int32_t value) { encodeValue(value); }
+ void encodeUint32(uint32_t value) { encodeValue(value); }
+ void encodeInt64(int64_t value) { encodeValue(value); }
+ void encodeUint64(uint64_t value) { encodeValue(value); }
+ void encodeFloat(float value) { encodeValue(value); }
+ void encodeDouble(double value) { encodeValue(value); }
+ void encodeBool(bool value) { encodeValue(value); }
+
+ template<typename T>
+ void encodeEnumValue(T value) { encodeValue(static_cast<uint32_t>(value)); }
+
+ void encodeString(const char* value);
+ void encodePointer(const void* value, bool omitData = false, size_t size = 0);
+ void encodeAddress(const void* value) { encodeValue(reinterpret_cast<uint64_t>(value)); }
+
+ void encodeStruct(slang::SessionDesc const& desc);
+ void encodeStruct(slang::PreprocessorMacroDesc const& desc);
+ void encodeStruct(slang::CompilerOptionEntry const& entry);
+ void encodeStruct(slang::CompilerOptionValue const& value);
+ void encodeStruct(slang::TargetDesc const& targetDesc);
+
+ private:
+ template <typename T>
+ void encodeValue(T value)
+ {
+ m_stream->write(&value, sizeof(T));
+ }
+ OutputStream* m_stream;
+ };
+} // namespace SlangCapture
+
+#endif // PARAMETER_ENCODER_H