yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Ellie Hermaszewskaformatf65d756bf

master
2.5 KiB90 linesraw
1#ifndef SLANG_COMPILER_CORE_JSON_NATIVE_H
2#define SLANG_COMPILER_CORE_JSON_NATIVE_H
3
4#include "slang-com-helper.h"
5#include "slang-com-ptr.h"
6#include "slang-json-value.h"
7#include "slang.h"
8
9namespace Slang
10{
11
12struct JSONToNativeConverter
13{
14    SlangResult convert(const JSONValue& value, const RttiInfo* rttiInfo, void* out);
15    template<typename T>
16    SlangResult convert(const JSONValue& value, T* in)
17    {
18        return convert(value, GetRttiInfo<T>::get(), (void*)in);
19    }
20
21    template<typename T>
22    SlangResult convertArrayToStruct(const JSONValue& value, T* in)
23    {
24        return convertArrayToStruct(value, GetRttiInfo<T>::get(), (void*)in);
25    }
26    SlangResult convertArrayToStruct(const JSONValue& value, const RttiInfo* rttiInfo, void* out);
27
28    JSONToNativeConverter(JSONContainer* container, RttiTypeFuncsMap* typeMap, DiagnosticSink* sink)
29        : m_container(container), m_typeMap(typeMap), m_sink(sink)
30    {
31    }
32
33protected:
34    static Index _getFieldCount(const StructRttiInfo* structRttiInfo);
35    static Index _findFieldIndex(
36        const StructRttiInfo* structRttiInfo,
37        const UnownedStringSlice& fieldName);
38
39    SlangResult _structToNative(
40        const ConstArrayView<JSONKeyValue>& pairs,
41        const StructRttiInfo* structRttiInfo,
42        void* out,
43        Index& outFieldCount);
44
45    DiagnosticSink* m_sink;
46    RttiTypeFuncsMap* m_typeMap;
47    JSONContainer* m_container;
48};
49
50struct NativeToJSONConverter
51{
52    SlangResult convert(const RttiInfo* rttiInfo, const void* in, JSONValue& out);
53
54    template<typename T>
55    SlangResult convert(T* in, JSONValue& out)
56    {
57        return convert(GetRttiInfo<T>::get(), (const void*)in, out);
58    }
59
60    SlangResult convertStructToArray(const RttiInfo* rttiInfo, const void* in, JSONValue& out);
61    template<typename T>
62    SlangResult convertStructToArray(T* in, JSONValue& out)
63    {
64        return convertStructToArray(GetRttiInfo<T>::get(), (const void*)in, out);
65    }
66
67    NativeToJSONConverter(JSONContainer* container, RttiTypeFuncsMap* typeMap, DiagnosticSink* sink)
68        : m_container(container), m_typeMap(typeMap), m_sink(sink)
69    {
70    }
71
72protected:
73    SlangResult _structToJSON(
74        const StructRttiInfo* structRttiInfo,
75        const void* src,
76        List<JSONKeyValue>& outPairs);
77
78    DiagnosticSink* m_sink;
79    RttiTypeFuncsMap* m_typeMap;
80    JSONContainer* m_container;
81};
82
83struct JSONNativeUtil
84{
85    static RttiTypeFuncsMap getTypeFuncsMap();
86};
87
88} // namespace Slang
89
90#endif // SLANG_COMPILER_CORE_JSON_NATIVE_H