Plasma Engine  2.0
Loading...
Searching...
No Matches
ExpressionVM.h
1#pragma once
2
3#include <Foundation/CodeUtils/Expression/ExpressionByteCode.h>
4#include <Foundation/Types/UniquePtr.h>
5
6class PL_FOUNDATION_DLL plExpressionVM
7{
8public:
11
12 void RegisterFunction(const plExpressionFunction& func);
13 void UnregisterFunction(const plExpressionFunction& func);
14
15 struct Flags
16 {
17 using StorageType = plUInt32;
18
19 enum Enum
20 {
21 MapStreamsByName = PL_BIT(0),
22 ScalarizeStreams = PL_BIT(1),
23
24 UserFriendly = MapStreamsByName | ScalarizeStreams,
25 BestPerformance = 0,
26
27 Default = UserFriendly
28 };
29
30 struct Bits
31 {
32 StorageType MapStreamsByName : 1;
33 StorageType ScalarizeStreams : 1;
34 };
35 };
36
37 plResult Execute(const plExpressionByteCode& byteCode, plArrayPtr<const plProcessingStream> inputs, plArrayPtr<plProcessingStream> outputs, plUInt32 uiNumInstances, const plExpression::GlobalData& globalData = plExpression::GlobalData(), plBitflags<Flags> flags = Flags::Default);
38
39private:
40 void RegisterDefaultFunctions();
41
42 static plResult ScalarizeStreams(plArrayPtr<const plProcessingStream> streams, plDynamicArray<plProcessingStream>& out_ScalarizedStreams);
43 static plResult AreStreamsScalarized(plArrayPtr<const plProcessingStream> streams);
44 static plResult ValidateStream(const plProcessingStream& stream, const plExpression::StreamDesc& streamDesc, plStringView sStreamType, plUInt32 uiNumInstances);
45
46 template <typename T>
47 static plResult MapStreams(plArrayPtr<const plExpression::StreamDesc> streamDescs, plArrayPtr<T> streams, plStringView sStreamType, plUInt32 uiNumInstances, plBitflags<Flags> flags, plDynamicArray<T*>& out_MappedStreams);
48 plResult MapFunctions(plArrayPtr<const plExpression::FunctionDesc> functionDescs, const plExpression::GlobalData& globalData);
49
51
52 plDynamicArray<plProcessingStream> m_ScalarizedInputs;
53 plDynamicArray<plProcessingStream> m_ScalarizedOutputs;
54
58
60 plHashTable<plHashedString, plUInt32> m_FunctionNamesToIndex;
61};
This class encapsulates an array and it's size. It is recommended to use this class instead of plain ...
Definition ArrayPtr.h:37
Definition DynamicArray.h:81
Definition ExpressionByteCode.h:10
Definition ExpressionVM.h:7
A single stream in a stream group holding contiguous data of a given type.
Definition ProcessingStream.h:8
plStringView represent a read-only sub-string of a larger string, as it can store a dedicated string ...
Definition StringView.h:34
The plBitflags class allows you to work with type-safe bitflags.
Definition Bitflags.h:82
Describes an input or output stream for a expression VM.
Definition ExpressionDeclarations.h:57
Describes an external function that can be called in expressions. These functions need to be state-le...
Definition ExpressionDeclarations.h:102
Definition ExpressionVM.h:31
Definition ExpressionVM.h:16
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54