1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
5 #include <CrySchematyc2/GUID.h> // #SchematycTODO : Remove this include?
13 PUSH
= 0, // Push value onto top of stack.
14 SET
, // Set value at given position on stack.
15 COPY
, // Copy value on stack.
16 POP
, // Pop value from top of stack.
17 COLLAPSE
, // Collapse stack to a specified size.
18 LOAD
, // Load variable to top of stack.
19 STORE
, // Store value at top of stack in variable.
20 CONTAINER_ADD
, // Add value at top of stack in container.
21 CONTAINER_REMOVE_BY_INDEX
, // Remove index at top of stack from container.
22 CONTAINER_REMOVE_BY_VALUE
, // Remove value at top of stack from container.
23 CONTAINER_CLEAR
, // Clear container.
24 CONTAINER_SIZE
, // Copy size of container to top of stack.
25 CONTAINER_GET
, // Copy element at given index from container to top of stack.
26 CONTAINER_SET
, // Set value to container. Container index and value are at top of stack.
27 CONTAINER_FIND_BY_VALUE
, // Find value's index in container by value at top of stack.
28 COMPARE
, // Compare two values on stack.
29 INCREMENT_INT32
, // Increment int32.
30 LESS_THAN_INT32
, // Compare two int32s.
31 GREATER_THAN_INT32
, // Compare two int32s.
32 BRANCH
, // Branch to another location.
33 BRANCH_IF_ZERO
, // Branch to another location if the value at the top of the stack is zero.
34 BRANCH_IF_NOT_ZERO
, // Branch to another location if the value at the top of the stack is not zero.
35 GET_OBJECT
, // Copy object id to stack.
36 START_TIMER
, // Start a timer.
37 STOP_TIMER
, // Stop a timer.
38 RESET_TIMER
, // Reset a timer.
39 SEND_SIGNAL
, // Send a signal.
40 BROADCAST_SIGNAL
, // Broadcast a signal.
41 CALL_GLOBAL_FUNCTION
, // Call a global function.
42 CALL_ENV_ABSTRACT_INTERFACE_FUNCTION
, // Call an environment abstract interface function.
43 CALL_LIB_ABSTRACT_INTERFACE_FUNCTION
, // Call a library abstract interface function.
44 CALL_COMPONENT_MEMBER_FUNCTION
, // Call a component function.
45 CALL_ACTION_MEMBER_FUNCTION
, // Call a action function.
46 CALL_LIB_FUNCTION
, // Call a library function.
47 RETURN
// Exit the current function.
50 inline SVMOp(SVMOp::EOpCode _opCode
, size_t _size
)
55 SVMOp::EOpCode opCode
;
59 struct SVMPushOp
: public SVMOp
61 inline SVMPushOp(size_t _iConstValue
)
62 : SVMOp(SVMOp::PUSH
, sizeof(*this))
63 , iConstValue(_iConstValue
)
69 struct SVMSetOp
: public SVMOp
71 inline SVMSetOp(size_t _pos
, size_t _iConstValue
)
72 : SVMOp(SVMOp::SET
, sizeof(*this))
74 , iConstValue(_iConstValue
)
81 struct SVMCopyOp
: public SVMOp
83 inline SVMCopyOp(size_t _srcPos
, size_t _dstPos
)
84 : SVMOp(SVMOp::COPY
, sizeof(*this))
93 struct SVMPopOp
: public SVMOp
95 inline SVMPopOp(size_t _count
)
96 : SVMOp(SVMOp::POP
, sizeof(*this))
103 struct SVMCollapseOp
: public SVMOp
105 inline SVMCollapseOp(size_t _pos
)
106 : SVMOp(SVMOp::COLLAPSE
, sizeof(*this))
113 struct SVMLoadOp
: public SVMOp
115 inline SVMLoadOp(size_t _pos
, size_t _count
)
116 : SVMOp(SVMOp::LOAD
, sizeof(*this))
125 struct SVMStoreOp
: public SVMOp
127 inline SVMStoreOp(size_t _pos
, size_t _count
)
128 : SVMOp(SVMOp::STORE
, sizeof(*this))
137 struct SVMContainerAddOp
: public SVMOp
139 inline SVMContainerAddOp(size_t _iContainer
, size_t _count
)
140 : SVMOp(SVMOp::CONTAINER_ADD
, sizeof(*this))
141 , iContainer(_iContainer
)
149 struct SVMContainerRemoveByIndexOp
: public SVMOp
151 inline SVMContainerRemoveByIndexOp(size_t _iContainer
, size_t _count
)
152 : SVMOp(SVMOp::CONTAINER_REMOVE_BY_INDEX
, sizeof(*this))
153 , iContainer(_iContainer
)
161 struct SVMContainerRemoveByValueOp
: public SVMOp
163 inline SVMContainerRemoveByValueOp(size_t _iContainer
, size_t _count
)
164 : SVMOp(SVMOp::CONTAINER_REMOVE_BY_VALUE
, sizeof(*this))
165 , iContainer(_iContainer
)
173 struct SVMContainerClearOp
: public SVMOp
175 inline SVMContainerClearOp(size_t _iContainer
)
176 : SVMOp(SVMOp::CONTAINER_CLEAR
, sizeof(*this))
177 , iContainer(_iContainer
)
183 struct SVMContainerSizeOp
: public SVMOp
185 inline SVMContainerSizeOp(size_t _iContainer
, size_t _divisor
)
186 : SVMOp(SVMOp::CONTAINER_SIZE
, sizeof(*this))
187 , iContainer(_iContainer
)
195 struct SVMContainerGetOp
: public SVMOp
197 inline SVMContainerGetOp(size_t _iContainer
, size_t _count
)
198 : SVMOp(SVMOp::CONTAINER_GET
, sizeof(*this))
199 , iContainer(_iContainer
)
207 struct SVMContainerSetOp
: public SVMOp
209 inline SVMContainerSetOp(size_t _iContainer
, size_t _count
)
210 : SVMOp(SVMOp::CONTAINER_SET
, sizeof(*this))
211 , iContainer(_iContainer
)
219 struct SVMContainerFindByValueOp
: public SVMOp
221 inline SVMContainerFindByValueOp(size_t _iContainer
, size_t _count
)
222 : SVMOp(SVMOp::CONTAINER_FIND_BY_VALUE
, sizeof(*this))
223 , iContainer(_iContainer
)
231 struct SVMCompareOp
: public SVMOp
233 inline SVMCompareOp(size_t _lhsPos
, size_t _rhsPos
, size_t _count
)
234 : SVMOp(SVMOp::COMPARE
, sizeof(*this))
245 struct SVMIncrementInt32Op
: public SVMOp
247 inline SVMIncrementInt32Op(size_t _pos
)
248 : SVMOp(SVMOp::INCREMENT_INT32
, sizeof(*this))
255 struct SVMLessThanInt32Op
: public SVMOp
257 inline SVMLessThanInt32Op(size_t _lhsPos
, size_t _rhsPos
)
258 : SVMOp(SVMOp::LESS_THAN_INT32
, sizeof(*this))
267 struct SVMGreaterThanInt32Op
: public SVMOp
269 inline SVMGreaterThanInt32Op(size_t _lhsPos
, size_t _rhsPos
)
270 : SVMOp(SVMOp::GREATER_THAN_INT32
, sizeof(*this))
279 struct SVMBranchOp
: public SVMOp
281 inline SVMBranchOp(size_t _pos
)
282 : SVMOp(SVMOp::BRANCH
, sizeof(*this))
289 struct SVMBranchIfZeroOp
: public SVMOp
291 inline SVMBranchIfZeroOp(size_t _pos
)
292 : SVMOp(SVMOp::BRANCH_IF_ZERO
, sizeof(*this))
299 struct SVMBranchIfNotZeroOp
: public SVMOp
301 inline SVMBranchIfNotZeroOp(size_t _pos
)
302 : SVMOp(SVMOp::BRANCH_IF_NOT_ZERO
, sizeof(*this))
309 struct SVMGetObjectOp
: public SVMOp
311 inline SVMGetObjectOp()
312 : SVMOp(SVMOp::GET_OBJECT
, sizeof(*this))
316 struct SVMSendSignalOp
: public SVMOp
318 inline SVMSendSignalOp(const SGUID
& _guid
)
319 : SVMOp(SVMOp::SEND_SIGNAL
, sizeof(*this))
326 struct SVMBroadcastSignalOp
: public SVMOp
328 inline SVMBroadcastSignalOp(const SGUID
& _guid
)
329 : SVMOp(SVMOp::BROADCAST_SIGNAL
, sizeof(*this))
336 struct SVMCallGlobalFunctionOp
: public SVMOp
338 inline SVMCallGlobalFunctionOp(const uint32 _iGlobalFunction
)
339 : SVMOp(SVMOp::CALL_GLOBAL_FUNCTION
, sizeof(*this))
340 , iGlobalFunction(_iGlobalFunction
)
343 uint32 iGlobalFunction
;
346 struct SVMCallEnvAbstractInterfaceFunctionOp
: public SVMOp
348 inline SVMCallEnvAbstractInterfaceFunctionOp(const SGUID
& _abstractInterfaceGUID
, const SGUID
& _functionGUID
)
349 : SVMOp(SVMOp::CALL_ENV_ABSTRACT_INTERFACE_FUNCTION
, sizeof(*this))
350 , abstractInterfaceGUID(_abstractInterfaceGUID
)
351 , functionGUID(_functionGUID
)
354 const SGUID abstractInterfaceGUID
;
355 const SGUID functionGUID
;
358 struct SVMCallLibAbstractInterfaceFunctionOp
: public SVMOp
360 inline SVMCallLibAbstractInterfaceFunctionOp(const SGUID
& _abstractInterfaceGUID
, const SGUID
& _functionGUID
)
361 : SVMOp(SVMOp::CALL_LIB_ABSTRACT_INTERFACE_FUNCTION
, sizeof(*this))
362 , abstractInterfaceGUID(_abstractInterfaceGUID
)
363 , functionGUID(_functionGUID
)
366 const SGUID abstractInterfaceGUID
;
367 const SGUID functionGUID
;
370 struct SVMCallComponentMemberFunctionOp
: public SVMOp
372 inline SVMCallComponentMemberFunctionOp(const uint32 _iComponentMemberFunction
)
373 : SVMOp(SVMOp::CALL_COMPONENT_MEMBER_FUNCTION
, sizeof(*this))
374 , iComponentMemberFunction(_iComponentMemberFunction
)
377 uint32 iComponentMemberFunction
;
380 struct SVMCallActionMemberFunctionOp
: public SVMOp
382 inline SVMCallActionMemberFunctionOp(const uint32 _iActionMemberFunction
)
383 : SVMOp(SVMOp::CALL_ACTION_MEMBER_FUNCTION
, sizeof(*this))
384 , iActionMemberFunction(_iActionMemberFunction
)
387 uint32 iActionMemberFunction
;
390 struct SVMCallLibFunctionOp
: public SVMOp
392 inline SVMCallLibFunctionOp(const LibFunctionId
& _functionId
)
393 : SVMOp(SVMOp::CALL_LIB_FUNCTION
, sizeof(*this))
394 , functionId(_functionId
)
397 LibFunctionId functionId
;
400 struct SVMStartTimerOp
: public SVMOp
402 inline SVMStartTimerOp(const SGUID
& _guid
)
403 : SVMOp(SVMOp::START_TIMER
, sizeof(*this))
410 struct SVMStopTimerOp
: public SVMOp
412 inline SVMStopTimerOp(const SGUID
& _guid
)
413 : SVMOp(SVMOp::STOP_TIMER
, sizeof(*this))
420 struct SVMResetTimerOp
: public SVMOp
422 inline SVMResetTimerOp(const SGUID
& _guid
)
423 : SVMOp(SVMOp::RESET_TIMER
, sizeof(*this))
430 struct SVMReturnOp
: public SVMOp
433 : SVMOp(SVMOp::RETURN
, sizeof(*this))