Plasma Engine  2.0
Loading...
Searching...
No Matches
VisualScriptData.h
1#pragma once
2
3#include <Foundation/Containers/Blob.h>
4#include <Foundation/Types/SharedPtr.h>
5#include <VisualScriptPlugin/Runtime/VisualScriptDataType.h>
6
7struct PL_VISUALSCRIPTPLUGIN_DLL plVisualScriptDataDescription : public plRefCounted
8{
9 struct DataOffset
10 {
11 PL_DECLARE_POD_TYPE();
12
13 struct PL_VISUALSCRIPTPLUGIN_DLL Source
14 {
15 enum Enum
16 {
17 Local,
18 Instance,
19 Constant,
20
21 Count
22 };
23
24 static const char* GetName(Enum source);
25 };
26
27 enum
28 {
29 BYTE_OFFSET_BITS = 24,
30 TYPE_BITS = 6,
31 SOURCE_BITS = 2,
32 INVALID_BYTE_OFFSET = PL_BIT(BYTE_OFFSET_BITS) - 1
33 };
34
35 PL_ALWAYS_INLINE DataOffset()
36 {
37 m_uiByteOffset = INVALID_BYTE_OFFSET;
38 m_uiType = plVisualScriptDataType::Invalid;
39 m_uiSource = Source::Local;
40 }
41
42 PL_ALWAYS_INLINE DataOffset(plUInt32 uiOffset, plVisualScriptDataType::Enum dataType, Source::Enum source)
43 {
44 m_uiByteOffset = uiOffset;
45 m_uiType = dataType;
46 m_uiSource = source;
47 }
48
49 PL_ALWAYS_INLINE bool IsValid() const
50 {
51 return m_uiByteOffset != INVALID_BYTE_OFFSET &&
52 m_uiType != plVisualScriptDataType::Invalid;
53 }
54
55 PL_ALWAYS_INLINE plVisualScriptDataType::Enum GetType() const { return static_cast<plVisualScriptDataType::Enum>(m_uiType); }
56 PL_ALWAYS_INLINE Source::Enum GetSource() const { return static_cast<Source::Enum>(m_uiSource); }
57 PL_ALWAYS_INLINE bool IsLocal() const { return m_uiSource == Source::Local; }
58 PL_ALWAYS_INLINE bool IsInstance() const { return m_uiSource == Source::Instance; }
59 PL_ALWAYS_INLINE bool IsConstant() const { return m_uiSource == Source::Constant; }
60
61 PL_ALWAYS_INLINE plResult Serialize(plStreamWriter& inout_stream) const { return inout_stream.WriteDWordValue(this); }
62 PL_ALWAYS_INLINE plResult Deserialize(plStreamReader& inout_stream) { return inout_stream.ReadDWordValue(this); }
63
64 plUInt32 m_uiByteOffset : BYTE_OFFSET_BITS;
65 plUInt32 m_uiType : TYPE_BITS;
66 plUInt32 m_uiSource : SOURCE_BITS;
67 };
68
70 {
71 PL_DECLARE_POD_TYPE();
72
73 plUInt32 m_uiStartOffset = 0;
74 plUInt32 m_uiCount = 0;
75 };
76
77 OffsetAndCount m_PerTypeInfo[plVisualScriptDataType::Count];
78 plUInt32 m_uiStorageSizeNeeded = 0;
79
80 plResult Serialize(plStreamWriter& inout_stream) const;
81 plResult Deserialize(plStreamReader& inout_stream);
82
83 void Clear();
84 void CalculatePerTypeStartOffsets();
85 void CheckOffset(DataOffset dataOffset, const plRTTI* pType) const;
86
87 DataOffset GetOffset(plVisualScriptDataType::Enum dataType, plUInt32 uiIndex, DataOffset::Source::Enum source) const;
88};
89
90class PL_VISUALSCRIPTPLUGIN_DLL plVisualScriptDataStorage : public plRefCounted
91{
92public:
95
96 bool IsAllocated() const;
97 void AllocateStorage();
98 void DeallocateStorage();
99
100 plResult Serialize(plStreamWriter& inout_stream) const;
101 plResult Deserialize(plStreamReader& inout_stream);
102
104
105 template <typename T>
106 const T& GetData(DataOffset dataOffset) const;
107
108 template <typename T>
109 T& GetWritableData(DataOffset dataOffset);
110
111 template <typename T>
112 void SetData(DataOffset dataOffset, const T& value);
113
114 plTypedPointer GetPointerData(DataOffset dataOffset, plUInt32 uiExecutionCounter) const;
115
116 template <typename T>
117 void SetPointerData(DataOffset dataOffset, T ptr, const plRTTI* pType, plUInt32 uiExecutionCounter);
118
119 plVariant GetDataAsVariant(DataOffset dataOffset, const plRTTI* pExpectedType, plUInt32 uiExecutionCounter) const;
120 void SetDataFromVariant(DataOffset dataOffset, const plVariant& value, plUInt32 uiExecutionCounter);
121
122private:
124 plBlob m_Storage;
125};
126
128{
130 plVariant m_DefaultValue;
131
132 plResult Serialize(plStreamWriter& inout_stream) const;
133 plResult Deserialize(plStreamReader& inout_stream);
134};
135
137
138#include <VisualScriptPlugin/Runtime/VisualScriptData_inl.h>
plBlob allows to store simple binary data larger than 4GB. This storage class is used by plImage to a...
Definition Blob.h:319
This class holds information about reflected types. Each instance represents one type that is known t...
Definition RTTI.h:30
Base class for reference counted objects.
Definition RefCounted.h:52
A Shared ptr manages a shared object and destroys that object when no one references it anymore....
Definition SharedPtr.h:10
Interface for binary in (read) streams.
Definition Stream.h:22
plResult ReadDWordValue(T *pDWordValue)
Helper method to read a dword value correctly (copes with potentially different endianess)
Definition Stream_inl.h:96
Interface for binary out (write) streams.
Definition Stream.h:107
plResult WriteDWordValue(const T *pDWordValue)
Helper method to write a dword value correctly (copes with potentially different endianess)
Definition Stream_inl.h:126
plVariant is a class that can store different types of variables, which is useful in situations where...
Definition Variant.h:44
Definition VisualScriptData.h:91
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54
A typed raw pointer.
Definition TypedPointer.h:13
Definition VisualScriptData.h:10
Definition VisualScriptData.h:70
Definition VisualScriptData.h:8
Definition VisualScriptData.h:128