1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
6 #include <CrySerialization/BlackBox.h>
7 #include <CrySerialization/IArchiveHost.h>
8 #include <CrySerialization/STL.h>
9 #include <CrySchematyc2/ILibRegistry.h>
10 #include <CrySchematyc2/LibUtils.h>
11 #include <CrySchematyc2/Deprecated/IGlobalFunction.h>
12 #include <CrySchematyc2/Env/IEnvRegistry.h>
13 #include <CrySchematyc2/Utils/StringUtils.h>
14 #include <CrySchematyc2/Serialization/Resources/IResourceCollectorArchive.h>
17 SERIALIZATION_ENUM_BEGIN_NESTED2(Schematyc2
, CLibClassProperties
, EInternalOverridePolicy
, "Schematyc Library Class Property Override Policy")
18 SERIALIZATION_ENUM(Schematyc2::CLibClassProperties::EInternalOverridePolicy::UseDefault
, "UseDefault", "Default")
19 SERIALIZATION_ENUM(Schematyc2::CLibClassProperties::EInternalOverridePolicy::OverrideDefault
, "OverrideDefault", "Override")
20 SERIALIZATION_ENUM_END()
24 const size_t CLibFunction::MIN_CAPACITY
= 512;
25 const size_t CLibFunction::GROWTH_FACTOR
= 8;
27 struct SComponentInstanceSortRef
29 inline SComponentInstanceSortRef(size_t _iComponentInstance
)
30 : iComponentInstance(_iComponentInstance
)
34 size_t iComponentInstance
;
36 TSizeTVector dependencies
;
39 typedef std::vector
<SComponentInstanceSortRef
> TComponentInstanceSortRefVector
;
41 struct SComponentInstanceSortPredicate
43 inline bool operator () (const SComponentInstanceSortRef
& lhs
, const SComponentInstanceSortRef
& rhs
) const
45 if (lhs
.priority
!= rhs
.priority
)
47 return lhs
.priority
> rhs
.priority
;
49 return lhs
.iComponentInstance
< rhs
.iComponentInstance
;
53 //////////////////////////////////////////////////////////////////////////
54 CLibAbstractInterfaceFunction::CLibAbstractInterfaceFunction(const SGUID
& guid
, const char* szName
)
59 //////////////////////////////////////////////////////////////////////////
60 SGUID
CLibAbstractInterfaceFunction::GetGUID() const
65 //////////////////////////////////////////////////////////////////////////
66 const char* CLibAbstractInterfaceFunction::GetName() const
68 return m_name
.c_str();
71 //////////////////////////////////////////////////////////////////////////
72 TVariantConstArray
CLibAbstractInterfaceFunction::GetVariantInputs() const
74 return m_variantInputs
;
77 //////////////////////////////////////////////////////////////////////////
78 TVariantConstArray
CLibAbstractInterfaceFunction::GetVariantOutputs() const
80 return m_variantOutputs
;
83 //////////////////////////////////////////////////////////////////////////
84 void CLibAbstractInterfaceFunction::AddInput(const IAny
& value
)
86 CVariantVectorOutputArchive
archive(m_variantInputs
);
87 archive(value
, "", "");
90 //////////////////////////////////////////////////////////////////////////
91 void CLibAbstractInterfaceFunction::AddOutput(const IAny
& value
)
93 CVariantVectorOutputArchive
archive(m_variantOutputs
);
94 archive(value
, "", "");
97 //////////////////////////////////////////////////////////////////////////
98 CLibAbstractInterface::CLibAbstractInterface(const SGUID
& guid
, const char* szName
)
103 //////////////////////////////////////////////////////////////////////////
104 SGUID
CLibAbstractInterface::GetGUID() const
109 //////////////////////////////////////////////////////////////////////////
110 const char* CLibAbstractInterface::GetName() const
112 return m_name
.c_str();
115 //////////////////////////////////////////////////////////////////////////
116 CLibStateMachine::CLibStateMachine(const SGUID
& guid
, const char* szName
, const EStateMachineLifetime lifetime
, const EStateMachineNetAuthority netType
)
119 , m_lifetime(lifetime
)
120 , m_netAuthority(netType
)
121 , m_iPartner(INVALID_INDEX
)
124 //////////////////////////////////////////////////////////////////////////
125 SGUID
CLibStateMachine::GetGUID() const
130 //////////////////////////////////////////////////////////////////////////
131 const char* CLibStateMachine::GetName() const
133 return m_name
.c_str();
136 //////////////////////////////////////////////////////////////////////////
137 EStateMachineLifetime
CLibStateMachine::GetLifetime() const
142 Schematyc2::EStateMachineNetAuthority
CLibStateMachine::GetNetAuthority() const
144 return m_netAuthority
;
147 //////////////////////////////////////////////////////////////////////////
148 size_t CLibStateMachine::GetPartner() const
153 //////////////////////////////////////////////////////////////////////////
154 size_t CLibStateMachine::GetListenerCount() const
156 return m_listeners
.size();
159 //////////////////////////////////////////////////////////////////////////
160 size_t CLibStateMachine::GetListener(size_t iListener
) const
162 return iListener
< m_listeners
.size() ? m_listeners
[iListener
] : INVALID_INDEX
;
165 //////////////////////////////////////////////////////////////////////////
166 size_t CLibStateMachine::GetVariableCount() const
168 return m_variables
.size();
171 //////////////////////////////////////////////////////////////////////////
172 size_t CLibStateMachine::GetVariable(const size_t iVariable
) const
174 return iVariable
< m_variables
.size() ? m_variables
[iVariable
] : INVALID_INDEX
;
177 //////////////////////////////////////////////////////////////////////////
178 size_t CLibStateMachine::GetContainerCount() const
180 return m_containers
.size();
183 //////////////////////////////////////////////////////////////////////////
184 size_t CLibStateMachine::GetContainer(const size_t iContainer
) const
186 return iContainer
< m_containers
.size() ? m_containers
[iContainer
] : INVALID_INDEX
;
189 //////////////////////////////////////////////////////////////////////////
190 void CLibStateMachine::SetBeginFunction(const LibFunctionId
& functionId
)
192 m_beginFunctionId
= functionId
;
195 //////////////////////////////////////////////////////////////////////////
196 LibFunctionId
CLibStateMachine::GetBeginFunction() const
198 return m_beginFunctionId
;
201 //////////////////////////////////////////////////////////////////////////
202 void CLibStateMachine::SetPartner(size_t iPartner
)
204 m_iPartner
= iPartner
;
207 //////////////////////////////////////////////////////////////////////////
208 void CLibStateMachine::AddListener(size_t iListener
)
210 m_listeners
.push_back(iListener
);
213 //////////////////////////////////////////////////////////////////////////
214 void CLibStateMachine::AddVariable(const size_t iVariable
)
216 m_variables
.push_back(iVariable
);
219 //////////////////////////////////////////////////////////////////////////
220 void CLibStateMachine::AddContainer(const size_t iContainer
)
222 m_containers
.push_back(iContainer
);
225 //////////////////////////////////////////////////////////////////////////
226 void CLibStateMachine::CompactMemory()
228 m_listeners
.shrink_to_fit();
229 m_variables
.shrink_to_fit();
230 m_containers
.shrink_to_fit();
234 //////////////////////////////////////////////////////////////////////////
235 CLibState::CLibState(const SGUID
& guid
, const char* szName
)
238 , m_iParent(INVALID_INDEX
)
239 , m_iPartner(INVALID_INDEX
)
240 , m_iStateMachine(INVALID_INDEX
)
243 //////////////////////////////////////////////////////////////////////////
244 SGUID
CLibState::GetGUID() const
249 //////////////////////////////////////////////////////////////////////////
250 const char* CLibState::GetName() const
252 return m_name
.c_str();
255 //////////////////////////////////////////////////////////////////////////
256 size_t CLibState::GetParent() const
261 //////////////////////////////////////////////////////////////////////////
262 size_t CLibState::GetPartner() const
267 //////////////////////////////////////////////////////////////////////////
268 size_t CLibState::GetStateMachine() const
270 return m_iStateMachine
;
273 //////////////////////////////////////////////////////////////////////////
274 size_t CLibState::GetVariableCount() const
276 return m_variables
.size();
279 //////////////////////////////////////////////////////////////////////////
280 size_t CLibState::GetVariable(size_t iVariable
) const
282 return iVariable
< m_variables
.size() ? m_variables
[iVariable
] : INVALID_INDEX
;
285 //////////////////////////////////////////////////////////////////////////
286 size_t CLibState::GetContainerCount() const
288 return m_containers
.size();
291 //////////////////////////////////////////////////////////////////////////
292 size_t CLibState::GetContainer(size_t iContainer
) const
294 return iContainer
< m_containers
.size() ? m_containers
[iContainer
] : INVALID_INDEX
;
297 //////////////////////////////////////////////////////////////////////////
298 size_t CLibState::GetTimerCount() const
300 return m_timers
.size();
303 //////////////////////////////////////////////////////////////////////////
304 size_t CLibState::GetTimer(size_t iTimer
) const
306 return iTimer
< m_timers
.size() ? m_timers
[iTimer
] : INVALID_INDEX
;
309 //////////////////////////////////////////////////////////////////////////
310 size_t CLibState::GetActionInstanceCount() const
312 return m_actionInstances
.size();
315 //////////////////////////////////////////////////////////////////////////
316 size_t CLibState::GetActionInstance(size_t iActionInstance
) const
318 return iActionInstance
< m_actionInstances
.size() ? m_actionInstances
[iActionInstance
] : INVALID_INDEX
;
321 //////////////////////////////////////////////////////////////////////////
322 size_t CLibState::GetConstructorCount() const
324 return m_constructors
.size();
327 //////////////////////////////////////////////////////////////////////////
328 size_t CLibState::GetConstructor(size_t iConstructor
) const
330 return iConstructor
< m_constructors
.size() ? m_constructors
[iConstructor
] : INVALID_INDEX
;
333 //////////////////////////////////////////////////////////////////////////
334 size_t CLibState::GetDestructorCount() const
336 return m_destructors
.size();
339 //////////////////////////////////////////////////////////////////////////
340 size_t CLibState::GetDestructor(size_t iDestructor
) const
342 return iDestructor
< m_destructors
.size() ? m_destructors
[iDestructor
] : INVALID_INDEX
;
345 //////////////////////////////////////////////////////////////////////////
346 size_t CLibState::GetSignalReceiverCount() const
348 return m_signalReceivers
.size();
351 //////////////////////////////////////////////////////////////////////////
352 size_t CLibState::GetSignalReceiver(size_t iSignalReceiver
) const
354 return iSignalReceiver
< m_signalReceivers
.size() ? m_signalReceivers
[iSignalReceiver
] : INVALID_INDEX
;
357 ////////////////////////////////////////a//////////////////////////////////
358 size_t CLibState::GetTransitionCount() const
360 return m_transitions
.size();
363 //////////////////////////////////////////////////////////////////////////
364 size_t CLibState::GetTransition(size_t iTransition
) const
366 return iTransition
< m_transitions
.size() ? m_transitions
[iTransition
] : INVALID_INDEX
;
369 //////////////////////////////////////////////////////////////////////////
370 void CLibState::SetParent(size_t iParent
)
375 //////////////////////////////////////////////////////////////////////////
376 void CLibState::SetPartner(size_t iPartner
)
378 m_iPartner
= iPartner
;
381 //////////////////////////////////////////////////////////////////////////
382 void CLibState::SetStateMachine(size_t iStateMachine
)
384 m_iStateMachine
= iStateMachine
;
387 //////////////////////////////////////////////////////////////////////////
388 void CLibState::AddVariable(size_t iVariable
)
390 m_variables
.push_back(iVariable
);
393 //////////////////////////////////////////////////////////////////////////
394 void CLibState::AddContainer(size_t iContainer
)
396 m_containers
.push_back(iContainer
);
399 //////////////////////////////////////////////////////////////////////////
400 void CLibState::AddTimer(size_t iTimer
)
402 m_timers
.push_back(iTimer
);
405 //////////////////////////////////////////////////////////////////////////
406 void CLibState::AddActionInstance(size_t iActionInstance
)
408 m_actionInstances
.push_back(iActionInstance
);
411 //////////////////////////////////////////////////////////////////////////
412 void CLibState::AddConstructor(size_t iConstructor
)
414 m_constructors
.push_back(iConstructor
);
417 //////////////////////////////////////////////////////////////////////////
418 void CLibState::AddDestructor(size_t iDestructor
)
420 m_destructors
.push_back(iDestructor
);
423 //////////////////////////////////////////////////////////////////////////
424 void CLibState::AddSignalReceiver(size_t iSignalReceiver
)
426 m_signalReceivers
.push_back(iSignalReceiver
);
429 //////////////////////////////////////////////////////////////////////////
430 void CLibState::AddTransition(size_t iTransition
)
432 m_transitions
.push_back(iTransition
);
435 //////////////////////////////////////////////////////////////////////////
436 void CLibState::CompactMemory()
438 m_variables
.shrink_to_fit();
439 m_containers
.shrink_to_fit();
440 m_timers
.shrink_to_fit();
441 m_actionInstances
.shrink_to_fit();
442 m_constructors
.shrink_to_fit();
443 m_destructors
.shrink_to_fit();
444 m_signalReceivers
.shrink_to_fit();
445 m_transitions
.shrink_to_fit();
448 //////////////////////////////////////////////////////////////////////////
449 CLibVariable::CLibVariable(const SGUID
& guid
, const char* szName
, EOverridePolicy overridePolicy
, const IAny
& value
, size_t variantPos
, size_t variantCount
, ELibVariableFlags flags
)
452 , m_overridePolicy(overridePolicy
)
453 , m_pValue(value
.Clone())
454 , m_variantPos(variantPos
)
455 , m_variantCount(variantCount
)
459 //////////////////////////////////////////////////////////////////////////
460 SGUID
CLibVariable::GetGUID() const
465 //////////////////////////////////////////////////////////////////////////
466 const char* CLibVariable::GetName() const
468 return m_name
.c_str();
471 //////////////////////////////////////////////////////////////////////////
472 EOverridePolicy
CLibVariable::GetOverridePolicy() const
474 return m_overridePolicy
;
477 //////////////////////////////////////////////////////////////////////////
478 IAnyConstPtr
CLibVariable::GetValue() const
483 //////////////////////////////////////////////////////////////////////////
484 size_t CLibVariable::GetVariantPos() const
489 //////////////////////////////////////////////////////////////////////////
490 size_t CLibVariable::GetVariantCount() const
492 return m_variantCount
;
495 //////////////////////////////////////////////////////////////////////////
496 ELibVariableFlags
CLibVariable::GetFlags() const
501 //////////////////////////////////////////////////////////////////////////
502 void CLibVariable::SetOverridePolicy(EOverridePolicy overridePolicy
)
504 m_overridePolicy
= overridePolicy
;
507 //////////////////////////////////////////////////////////////////////////
508 CLibContainer::CLibContainer(const SGUID
& guid
, const char* name
, const SGUID
& typeGUID
)
511 , m_typeGUID(typeGUID
)
514 //////////////////////////////////////////////////////////////////////////
515 SGUID
CLibContainer::GetGUID() const
520 //////////////////////////////////////////////////////////////////////////
521 const char* CLibContainer::GetName() const
523 return m_name
.c_str();
526 //////////////////////////////////////////////////////////////////////////
527 SGUID
CLibContainer::GetTypeGUID() const
532 //////////////////////////////////////////////////////////////////////////
533 CLibTimer::CLibTimer(const SGUID
& guid
, const char* szName
, const STimerParams
& params
)
539 //////////////////////////////////////////////////////////////////////////
540 SGUID
CLibTimer::GetGUID() const
545 //////////////////////////////////////////////////////////////////////////
546 const char* CLibTimer::GetName() const
548 return m_name
.c_str();
551 //////////////////////////////////////////////////////////////////////////
552 const STimerParams
& CLibTimer::GetParams() const
557 //////////////////////////////////////////////////////////////////////////
558 CLibAbstractInterfaceImplementation::CLibAbstractInterfaceImplementation(const SGUID
& guid
, const char* name
, const SGUID
& interfaceGUID
)
561 , m_interfaceGUID(interfaceGUID
)
564 //////////////////////////////////////////////////////////////////////////
565 SGUID
CLibAbstractInterfaceImplementation::GetGUID() const
570 //////////////////////////////////////////////////////////////////////////
571 const char* CLibAbstractInterfaceImplementation::GetName() const
573 return m_name
.c_str();
576 //////////////////////////////////////////////////////////////////////////
577 SGUID
CLibAbstractInterfaceImplementation::GetInterfaceGUID() const
579 return m_interfaceGUID
;
582 //////////////////////////////////////////////////////////////////////////
583 size_t CLibAbstractInterfaceImplementation::GetFunctionCount() const
585 return m_functions
.size();
588 //////////////////////////////////////////////////////////////////////////
589 SGUID
CLibAbstractInterfaceImplementation::GetFunctionGUID(size_t iFunction
) const
591 return iFunction
< m_functions
.size() ? m_functions
[iFunction
].guid
: SGUID();
594 //////////////////////////////////////////////////////////////////////////
595 LibFunctionId
CLibAbstractInterfaceImplementation::GetFunctionId(size_t iFunction
) const
597 return iFunction
< m_functions
.size() ? m_functions
[iFunction
].functionId
: LibFunctionId();
600 //////////////////////////////////////////////////////////////////////////
601 void CLibAbstractInterfaceImplementation::AddFunction(const SGUID
& guid
, const LibFunctionId
& functionId
)
603 m_functions
.push_back(SFunction(guid
, functionId
));
606 //////////////////////////////////////////////////////////////////////////
607 CLibAbstractInterfaceImplementation::SFunction::SFunction(const SGUID
& _guid
, const LibFunctionId
& _functionId
)
609 , functionId(_functionId
)
612 //////////////////////////////////////////////////////////////////////////
613 CLibComponentInstance::CLibComponentInstance(const SGUID
& guid
, const char* szName
, const SGUID
& componentGUID
, const IPropertiesConstPtr
& pProperties
, uint32 propertyFunctionIdx
, uint32 parentIdx
)
616 , m_componentGUID(componentGUID
)
617 , m_pProperties(pProperties
)
618 , m_propertyFunctionIdx(propertyFunctionIdx
)
619 , m_parentIdx(parentIdx
)
622 //////////////////////////////////////////////////////////////////////////
623 SGUID
CLibComponentInstance::GetGUID() const
628 //////////////////////////////////////////////////////////////////////////
629 const char* CLibComponentInstance::GetName() const
631 return m_name
.c_str();
634 //////////////////////////////////////////////////////////////////////////
635 SGUID
CLibComponentInstance::GetComponentGUID() const
637 return m_componentGUID
;
640 //////////////////////////////////////////////////////////////////////////
641 IPropertiesConstPtr
CLibComponentInstance::GetProperties() const
643 return m_pProperties
;
646 //////////////////////////////////////////////////////////////////////////
647 uint32
CLibComponentInstance::GetPropertyFunctionIdx() const
649 return m_propertyFunctionIdx
;
652 //////////////////////////////////////////////////////////////////////////
653 uint32
CLibComponentInstance::GetParentIdx() const
658 //////////////////////////////////////////////////////////////////////////
659 CLibActionInstance::CLibActionInstance(const SGUID
& guid
, const char* name
, const SGUID
& actionGUID
, size_t iComponentInstance
, const IPropertiesPtr
& pProperties
)
662 , m_actionGUID(actionGUID
)
663 , m_iComponentInstance(iComponentInstance
)
664 , m_pProperties(pProperties
)
667 //////////////////////////////////////////////////////////////////////////
668 SGUID
CLibActionInstance::GetGUID() const
673 //////////////////////////////////////////////////////////////////////////
674 const char* CLibActionInstance::GetName() const
676 return m_name
.c_str();
679 //////////////////////////////////////////////////////////////////////////
680 SGUID
CLibActionInstance::GetActionGUID() const
685 //////////////////////////////////////////////////////////////////////////
686 size_t CLibActionInstance::GetComponentInstance() const
688 return m_iComponentInstance
;
691 //////////////////////////////////////////////////////////////////////////
692 IPropertiesConstPtr
CLibActionInstance::GetProperties() const
694 return m_pProperties
;
697 //////////////////////////////////////////////////////////////////////////
698 CLibConstructor::CLibConstructor(const SGUID
& guid
, const LibFunctionId
& functionId
)
700 , m_functionId(functionId
)
703 //////////////////////////////////////////////////////////////////////////
704 SGUID
CLibConstructor::GetGUID() const
709 //////////////////////////////////////////////////////////////////////////
710 LibFunctionId
CLibConstructor::GetFunctionId() const
715 //////////////////////////////////////////////////////////////////////////
716 CLibDestructor::CLibDestructor(const SGUID
& guid
, const LibFunctionId
& functionId
)
718 , m_functionId(functionId
)
721 //////////////////////////////////////////////////////////////////////////
722 SGUID
CLibDestructor::GetGUID() const
727 //////////////////////////////////////////////////////////////////////////
728 LibFunctionId
CLibDestructor::GetFunctionId() const
733 //////////////////////////////////////////////////////////////////////////
734 CLibSignalReceiver::CLibSignalReceiver(const SGUID
& guid
, const SGUID
& contextGUID
, const LibFunctionId
& functionId
)
736 , m_contextGUID(contextGUID
)
737 , m_functionId(functionId
)
740 //////////////////////////////////////////////////////////////////////////
741 SGUID
CLibSignalReceiver::GetGUID() const
746 //////////////////////////////////////////////////////////////////////////
747 SGUID
CLibSignalReceiver::GetContextGUID() const
749 return m_contextGUID
;
752 //////////////////////////////////////////////////////////////////////////
753 LibFunctionId
CLibSignalReceiver::GetFunctionId() const
758 //////////////////////////////////////////////////////////////////////////
759 CLibTransition::CLibTransition(const SGUID
& guid
, const SGUID
& contextGUID
, const LibFunctionId
& functionId
)
761 , m_contextGUID(contextGUID
)
762 , m_functionId(functionId
)
765 //////////////////////////////////////////////////////////////////////////
766 SGUID
CLibTransition::GetGUID() const
771 //////////////////////////////////////////////////////////////////////////
772 SGUID
CLibTransition::GetContextGUID() const
774 return m_contextGUID
;
777 //////////////////////////////////////////////////////////////////////////
778 LibFunctionId
CLibTransition::GetFunctionId() const
783 //////////////////////////////////////////////////////////////////////////
784 CLibFunction::CLibFunction()
787 , m_lastOpPos(INVALID_INDEX
)
789 , m_executionFilter(EGraphExecutionFilter::Always
)
792 //////////////////////////////////////////////////////////////////////////
793 CLibFunction::~CLibFunction()
798 //////////////////////////////////////////////////////////////////////////
799 SGUID
CLibFunction::GetGUID() const
804 //////////////////////////////////////////////////////////////////////////
805 SGUID
CLibFunction::GetClassGUID() const
810 //////////////////////////////////////////////////////////////////////////
811 void CLibFunction::SetName(const char* name
)
816 //////////////////////////////////////////////////////////////////////////
817 const char* CLibFunction::GetName() const
819 return m_name
.c_str();
822 //////////////////////////////////////////////////////////////////////////
823 void CLibFunction::SetScope(const char* scope
)
828 //////////////////////////////////////////////////////////////////////////
829 const char* CLibFunction::GetScope() const
831 return m_scope
.c_str();
834 //////////////////////////////////////////////////////////////////////////
835 void CLibFunction::SetFileName(const char* fileName
)
837 m_fileName
= fileName
;
840 //////////////////////////////////////////////////////////////////////////
841 const char* CLibFunction::GetFileName() const
843 return m_fileName
.c_str();
846 //////////////////////////////////////////////////////////////////////////
847 void CLibFunction::SetAuthor(const char* author
)
852 //////////////////////////////////////////////////////////////////////////
853 const char* CLibFunction::GetAuthor() const
855 return m_author
.c_str();
858 //////////////////////////////////////////////////////////////////////////
859 void CLibFunction::SetDescription(const char* szDescription
)
861 m_textDesc
= szDescription
;
864 //////////////////////////////////////////////////////////////////////////
865 const char* CLibFunction::GetDescription() const
867 return m_textDesc
.c_str();
870 //////////////////////////////////////////////////////////////////////////
871 void CLibFunction::AddInput(const char* name
, const char* textDesc
, const IAny
& value
)
873 m_inputs
.push_back(SParam(name
, textDesc
));
874 CVariantVectorOutputArchive
archive(m_variantInputs
);
875 archive(const_cast<IAny
&>(value
), "", "");
878 //////////////////////////////////////////////////////////////////////////
879 size_t CLibFunction::GetInputCount() const
881 return m_inputs
.size();
884 //////////////////////////////////////////////////////////////////////////
885 const char* CLibFunction::GetInputName(size_t iInput
) const
887 return iInput
< m_inputs
.size() ? m_inputs
[iInput
].name
.c_str() : "";
890 //////////////////////////////////////////////////////////////////////////
891 const char* CLibFunction::GetInputTextDesc(size_t iInput
) const
893 return iInput
< m_inputs
.size() ? m_inputs
[iInput
].textDesc
.c_str() : "";
896 //////////////////////////////////////////////////////////////////////////
897 TVariantConstArray
CLibFunction::GetVariantInputs() const
899 return m_variantInputs
;
902 //////////////////////////////////////////////////////////////////////////
903 void CLibFunction::AddOutput(const char* name
, const char* textDesc
, const IAny
& value
)
905 m_outputs
.push_back(SParam(name
, textDesc
));
906 CVariantVectorOutputArchive
archive(m_variantOutputs
);
907 archive(const_cast<IAny
&>(value
), "", "");
910 //////////////////////////////////////////////////////////////////////////
911 size_t CLibFunction::GetOutputCount() const
913 return m_outputs
.size();
916 //////////////////////////////////////////////////////////////////////////
917 const char* CLibFunction::GetOutputName(size_t iOutput
) const
919 return iOutput
< m_outputs
.size() ? m_outputs
[iOutput
].name
.c_str() : "";
922 //////////////////////////////////////////////////////////////////////////
923 const char* CLibFunction::GetOutputTextDesc(size_t iOutput
) const
925 return iOutput
< m_outputs
.size() ? m_outputs
[iOutput
].textDesc
.c_str() : "";
928 //////////////////////////////////////////////////////////////////////////
929 TVariantConstArray
CLibFunction::GetVariantOutputs() const
931 return m_variantOutputs
;
934 //////////////////////////////////////////////////////////////////////////
935 TVariantConstArray
CLibFunction::GetVariantConsts() const
937 return m_variantConsts
;
940 //////////////////////////////////////////////////////////////////////////
941 GlobalFunctionConstTable
CLibFunction::GetGlobalFunctionTable() const
943 return m_globalFunctionTable
;
946 //////////////////////////////////////////////////////////////////////////
947 ComponentMemberFunctionConstTable
CLibFunction::GetComponentMemberFunctionTable() const
949 return m_componentMemberFunctionTable
;
952 //////////////////////////////////////////////////////////////////////////
953 ActionMemberFunctionConstTable
CLibFunction::GetActionMemberFunctionTable() const
955 return m_actionMemberFunctionTable
;
958 //////////////////////////////////////////////////////////////////////////
959 size_t CLibFunction::GetSize() const
964 //////////////////////////////////////////////////////////////////////////
965 const SVMOp
* CLibFunction::GetOp(size_t pos
) const
967 CRY_ASSERT(pos
< m_size
);
968 return pos
< m_size
? reinterpret_cast<const SVMOp
*>(m_pBegin
+ pos
) : NULL
;
971 //////////////////////////////////////////////////////////////////////////
972 void CLibFunction::SetGUID(const SGUID
& guid
)
977 //////////////////////////////////////////////////////////////////////////
978 void CLibFunction::SetClassGUID(const SGUID
& classGUID
)
980 m_classGUID
= classGUID
;
983 //////////////////////////////////////////////////////////////////////////
984 size_t CLibFunction::AddConstValue(const CVariant
& value
)
986 TVariantVector::iterator iBeginConst
= m_variantConsts
.begin();
987 TVariantVector::iterator iEndConst
= m_variantConsts
.end();
988 TVariantVector::iterator iConst
= std::find(iBeginConst
, iEndConst
, value
);
989 if(iConst
!= iEndConst
)
991 return iConst
- iBeginConst
;
995 m_variantConsts
.push_back(value
);
996 return m_variantConsts
.size() - 1;
1000 //////////////////////////////////////////////////////////////////////////
1001 size_t CLibFunction::AddGlobalFunction(const IGlobalFunctionConstPtr
& pGlobalFunction
)
1003 GlobalFunctionTable::iterator iBeginGlobalFunction
= m_globalFunctionTable
.begin();
1004 GlobalFunctionTable::iterator iEndGlobalFunction
= m_globalFunctionTable
.end();
1005 GlobalFunctionTable::iterator iGlobalFunction
= std::find(iBeginGlobalFunction
, iEndGlobalFunction
, pGlobalFunction
);
1006 if(iGlobalFunction
!= iEndGlobalFunction
)
1008 return iGlobalFunction
- iBeginGlobalFunction
;
1012 m_globalFunctionTable
.push_back(pGlobalFunction
);
1013 return m_globalFunctionTable
.size() - 1;
1017 //////////////////////////////////////////////////////////////////////////
1018 size_t CLibFunction::AddComponentMemberFunction(const IComponentMemberFunctionConstPtr
& pComponentMemberFunction
)
1020 ComponentMemberFunctionTable::iterator iBeginComponentMemberFunction
= m_componentMemberFunctionTable
.begin();
1021 ComponentMemberFunctionTable::iterator iEndComponentMemberFunction
= m_componentMemberFunctionTable
.end();
1022 ComponentMemberFunctionTable::iterator iComponentMemberFunction
= std::find(iBeginComponentMemberFunction
, iEndComponentMemberFunction
, pComponentMemberFunction
);
1023 if(iComponentMemberFunction
!= iEndComponentMemberFunction
)
1025 return iComponentMemberFunction
- iBeginComponentMemberFunction
;
1029 m_componentMemberFunctionTable
.push_back(pComponentMemberFunction
);
1030 return m_componentMemberFunctionTable
.size() - 1;
1034 //////////////////////////////////////////////////////////////////////////
1035 size_t CLibFunction::AddActionMemberFunction(const IActionMemberFunctionConstPtr
& pActionMemberFunction
)
1037 ActionMemberFunctionTable::iterator iBeginActionMemberFunction
= m_actionMemberFunctionTable
.begin();
1038 ActionMemberFunctionTable::iterator iEndActionMemberFunction
= m_actionMemberFunctionTable
.end();
1039 ActionMemberFunctionTable::iterator iActionMemberFunction
= std::find(iBeginActionMemberFunction
, iEndActionMemberFunction
, pActionMemberFunction
);
1040 if(iActionMemberFunction
!= iEndActionMemberFunction
)
1042 return iActionMemberFunction
- iBeginActionMemberFunction
;
1046 m_actionMemberFunctionTable
.push_back(pActionMemberFunction
);
1047 return m_actionMemberFunctionTable
.size() - 1;
1051 //////////////////////////////////////////////////////////////////////////
1052 void CLibFunction::SetGraphExecutionFilter(EGraphExecutionFilter filter
)
1054 m_executionFilter
= filter
;
1057 void CLibFunction::AddDebugOperationSymbolNode(size_t pos
, const SGUID
& guid
)
1059 if (!guid
.cryGUID
.IsNull())
1061 DebugSymbolTable::iterator result
= m_debugSymbolTable
.find(pos
);
1063 if (result
== m_debugSymbolTable
.end())
1065 m_debugSymbolTable
.emplace(pos
, SDebugSymbol(guid
, "", ILibFunction::SDebugSymbol::EDebugSymbolType::Node
));
1069 if (result
->second
.type
== ILibFunction::SDebugSymbol::EDebugSymbolType::Input
)
1071 result
->second
.type
= ILibFunction::SDebugSymbol::EDebugSymbolType::NodeAndInput
;
1075 CRY_ASSERT(result
== m_debugSymbolTable
.end(), "[Schematyc Debugger] Trying to add a debug symbol (Node) already registred.");
1081 void CLibFunction::AddDebugOperationSymbolInput(size_t pos
, const SGUID
& guid
, const char* input
)
1083 if (!guid
.cryGUID
.IsNull())
1085 DebugSymbolTable::const_iterator result
= m_debugSymbolTable
.find(pos
);
1087 if (result
== m_debugSymbolTable
.end())
1089 m_debugSymbolTable
.emplace(pos
, SDebugSymbol(guid
, input
, ILibFunction::SDebugSymbol::EDebugSymbolType::Input
));
1092 CRY_ASSERT(result
== m_debugSymbolTable
.end(), "[Schematyc Debugger] Trying to add a debug symbol (Input) already registered.");
1096 const Schematyc2::ILibFunction::SDebugSymbol
* CLibFunction::GetDebugOperationSymbol(size_t pos
) const
1098 DebugSymbolTable::const_iterator result
= m_debugSymbolTable
.find(pos
);
1099 if (result
!= m_debugSymbolTable
.end())
1101 return &result
->second
;
1107 size_t CLibFunction::GetDebugOperationsSize() const
1109 return m_debugSymbolTable
.size();
1112 void CLibFunction::ClearDebugOperationSymbols()
1114 m_debugSymbolTable
.clear();
1117 //////////////////////////////////////////////////////////////////////////
1118 bool CLibFunction::IsGraphExecutionAllowed() const
1120 switch (m_executionFilter
)
1122 case EGraphExecutionFilter::Always
:
1125 case EGraphExecutionFilter::DevModeOrLoggingEnabled
:
1126 return gEnv
->pSystem
->IsDevMode() || CVars::sc2_LogToFile
!= 0;
1128 case EGraphExecutionFilter::DevModeOnly
:
1129 return gEnv
->pSystem
->IsDevMode();
1132 CRY_ASSERT(false, "Wrong execution filter value in schematyc function.");
1137 //////////////////////////////////////////////////////////////////////////
1138 size_t CLibFunction::AddOp(const SVMOp
& op
)
1140 if (op
.size
> (m_capacity
- m_size
))
1142 const size_t capacity
= /*std::*/max(m_capacity
* GROWTH_FACTOR
, /*std::*/max(op
.size
, MIN_CAPACITY
));
1143 if (uint8
* pBegin
= static_cast<uint8
*>(realloc(m_pBegin
, capacity
)))
1145 m_capacity
= capacity
;
1150 SCHEMATYC2_COMPILER_FATAL_ERROR("Unable to add operation");
1153 memcpy(m_pBegin
+ m_size
, &op
, op
.size
);
1154 m_lastOpPos
= m_size
;
1159 //////////////////////////////////////////////////////////////////////////
1160 SVMOp
* CLibFunction::GetOp(size_t pos
)
1162 CRY_ASSERT(pos
< m_size
);
1163 return pos
< m_size
? reinterpret_cast<SVMOp
*>(m_pBegin
+ pos
) : NULL
;
1166 //////////////////////////////////////////////////////////////////////////
1167 SVMOp
* CLibFunction::GetLastOp()
1169 return m_lastOpPos
!= INVALID_INDEX
? GetOp(m_lastOpPos
) : NULL
;
1172 //////////////////////////////////////////////////////////////////////////
1173 void CLibFunction::Release()
1181 m_lastOpPos
= INVALID_INDEX
;
1184 ClearDebugOperationSymbols();
1187 //////////////////////////////////////////////////////////////////////////
1188 void CLibFunction::CompactMemory()
1190 if (m_size
< m_capacity
)
1192 if (uint8
* pBegin
= static_cast<uint8
*>(realloc(m_pBegin
, m_size
)))
1195 m_capacity
= m_size
;
1199 m_inputs
.shrink_to_fit();
1200 m_variantInputs
.shrink_to_fit();
1201 m_outputs
.shrink_to_fit();
1202 m_variantOutputs
.shrink_to_fit();
1203 m_variantConsts
.shrink_to_fit();
1204 m_globalFunctionTable
.shrink_to_fit();
1205 m_componentMemberFunctionTable
.shrink_to_fit();
1206 m_actionMemberFunctionTable
.shrink_to_fit();
1209 //////////////////////////////////////////////////////////////////////////
1210 CLibFunction::SParam::SParam(const char* _name
, const char* _textDesc
)
1212 , textDesc(_textDesc
)
1215 //////////////////////////////////////////////////////////////////////////
1216 CLibClassProperties::SProperty::SProperty()
1217 : overridePolicy(EInternalOverridePolicy::UseDefault
)
1220 //////////////////////////////////////////////////////////////////////////
1221 CLibClassProperties::SProperty::SProperty(const char* _szLabel
, const IAnyPtr
& _pValue
, EInternalOverridePolicy _overridePolicy
)
1224 , overridePolicy(_overridePolicy
)
1227 //////////////////////////////////////////////////////////////////////////
1228 CLibClassProperties::SProperty::SProperty(const SProperty
& rhs
)
1230 , pValue(rhs
.pValue
->Clone())
1231 , overridePolicy(rhs
.overridePolicy
)
1234 //////////////////////////////////////////////////////////////////////////
1235 void CLibClassProperties::SProperty::Serialize(Serialization::IArchive
& archive
)
1237 const bool isPrecaching
= archive
.caps(Schematyc2::IResourceCollectorArchive::ArchiveCaps
);
1238 if(archive
.isEdit() || isPrecaching
)
1240 archive(overridePolicy
, "overridePolicy", "Override");
1241 if(overridePolicy
== EInternalOverridePolicy::OverrideDefault
)
1243 archive(*pValue
, "value", "Value");
1248 archive(*pValue
, "value");
1249 archive(overridePolicy
, "overridePolicy");
1253 //////////////////////////////////////////////////////////////////////////
1254 CLibClassProperties::CLibClassProperties(const LibVariables
& variables
)
1256 for(const CLibVariable
& variable
: variables
)
1258 if(variable
.GetOverridePolicy() != EOverridePolicy::Finalize
)
1260 if((variable
.GetFlags() & ELibVariableFlags::ClassProperty
) != 0)
1262 IAnyConstPtr pVariableValue
= variable
.GetValue();
1265 m_properties
.insert(Properties::value_type(variable
.GetGUID(), SProperty(variable
.GetName(), pVariableValue
->Clone(), EInternalOverridePolicy::UseDefault
)));
1272 //////////////////////////////////////////////////////////////////////////
1273 CLibClassProperties::CLibClassProperties(const CLibClassProperties
& rhs
)
1274 : m_properties(rhs
.m_properties
)
1277 //////////////////////////////////////////////////////////////////////////
1278 ILibClassPropertiesPtr
CLibClassProperties::Clone() const
1280 return std::make_shared
<CLibClassProperties
>(*this);
1283 //////////////////////////////////////////////////////////////////////////
1284 void CLibClassProperties::Serialize(Serialization::IArchive
& archive
)
1286 if(archive
.isEdit())
1288 PropertiesByLabel propertiesByLabel
;
1289 for(Properties::value_type
& property
: m_properties
)
1291 propertiesByLabel
.insert(PropertiesByLabel::value_type(property
.second
.label
.c_str(), property
.second
));
1293 for(PropertiesByLabel::value_type
& property
: propertiesByLabel
)
1295 archive(property
.second
, property
.first
, property
.first
);
1298 else if(archive
.isInput() && !archive
.caps(Serialization::IArchive::BINARY
)) // Check for binary archive because binary archives do not currently support black box serialization.
1300 typedef std::map
<SGUID
, Serialization::SBlackBox
> BlackBoxProperties
;
1302 BlackBoxProperties blackBoxProperties
;
1303 archive(blackBoxProperties
, "properties");
1304 for(BlackBoxProperties::value_type
& blackBoxProperty
: blackBoxProperties
)
1306 Properties::iterator itProperty
= m_properties
.find(blackBoxProperty
.first
);
1307 if(itProperty
!= m_properties
.end())
1309 Serialization::LoadBlackBox(itProperty
->second
, blackBoxProperty
.second
);
1315 archive(m_properties
, "properties");
1319 //////////////////////////////////////////////////////////////////////////
1320 IAnyConstPtr
CLibClassProperties::GetProperty(const SGUID
& guid
) const
1322 Properties::const_iterator itProperty
= m_properties
.find(guid
);
1323 if((itProperty
!= m_properties
.end()))
1325 if(itProperty
->second
.overridePolicy
== EInternalOverridePolicy::OverrideDefault
)
1327 return itProperty
->second
.pValue
;
1330 return IAnyConstPtr();
1333 //////////////////////////////////////////////////////////////////////////
1334 void CLibClassProperties::VisitProperties(const LibClassPropertyVisitor
& visitor
) const
1336 SCHEMATYC2_SYSTEM_ASSERT(visitor
);
1339 for(const Properties::value_type
& property
: m_properties
)
1341 visitor(property
.first
, property
.second
.label
.c_str(), property
.second
.pValue
);
1346 //////////////////////////////////////////////////////////////////////////
1347 void CLibClassProperties::OverrideProperty(const SGUID
& guid
, const IAny
& value
)
1349 Properties::iterator itProperty
= m_properties
.find(guid
);
1350 if((itProperty
!= m_properties
.end()))
1352 SProperty
& property
= itProperty
->second
;
1355 *property
.pValue
= value
;
1356 property
.overridePolicy
= EInternalOverridePolicy::OverrideDefault
;
1361 //////////////////////////////////////////////////////////////////////////
1362 CLibClass::CLibClass(const ILib
& lib
, const SGUID
& guid
, const char* szName
, const SGUID
& foundationGUID
, const IPropertiesConstPtr
& pFoundationProperties
)
1366 , m_foundationGUID(foundationGUID
)
1367 , m_pFoundationProperties(pFoundationProperties
? pFoundationProperties
->Clone() : IPropertiesPtr())
1368 , m_nextFunctionId(1)
1371 //////////////////////////////////////////////////////////////////////////
1372 const ILib
& CLibClass::GetLib() const
1377 //////////////////////////////////////////////////////////////////////////
1378 SGUID
CLibClass::GetGUID() const
1383 //////////////////////////////////////////////////////////////////////////
1384 const char* CLibClass::GetName() const
1386 return m_name
.c_str();
1389 //////////////////////////////////////////////////////////////////////////
1390 SGUID
CLibClass::GetFoundationGUID() const
1392 return m_foundationGUID
;
1395 //////////////////////////////////////////////////////////////////////////
1396 IPropertiesConstPtr
CLibClass::GetFoundationProperties() const
1398 return m_pFoundationProperties
;
1401 //////////////////////////////////////////////////////////////////////////
1402 ILibClassPropertiesPtr
CLibClass::CreateProperties() const
1404 return std::make_shared
<CLibClassProperties
>(m_variables
);
1407 //////////////////////////////////////////////////////////////////////////
1408 size_t CLibClass::GetStateMachineCount() const
1410 return m_stateMachines
.size();
1413 //////////////////////////////////////////////////////////////////////////
1414 const ILibStateMachine
* CLibClass::GetStateMachine(size_t iStateMachine
) const
1416 return iStateMachine
< m_stateMachines
.size() ? &m_stateMachines
[iStateMachine
] : NULL
;
1419 //////////////////////////////////////////////////////////////////////////
1420 size_t CLibClass::GetStateCount() const
1422 return m_states
.size();
1425 //////////////////////////////////////////////////////////////////////////
1426 const ILibState
* CLibClass::GetState(size_t iState
) const
1428 return iState
< m_states
.size() ? &m_states
[iState
] : NULL
;
1431 //////////////////////////////////////////////////////////////////////////
1432 size_t CLibClass::GetVariableCount() const
1434 return m_variables
.size();
1437 //////////////////////////////////////////////////////////////////////////
1438 const ILibVariable
* CLibClass::GetVariable(size_t iVariable
) const
1440 return iVariable
< m_variables
.size() ? &m_variables
[iVariable
] : NULL
;
1443 //////////////////////////////////////////////////////////////////////////
1444 TVariantConstArray
CLibClass::GetVariants() const
1449 //////////////////////////////////////////////////////////////////////////
1450 size_t CLibClass::GetContainerCount() const
1452 return m_containers
.size();
1455 //////////////////////////////////////////////////////////////////////////
1456 const ILibContainer
* CLibClass::GetContainer(size_t iContainer
) const
1458 return iContainer
< m_containers
.size() ? &m_containers
[iContainer
] : NULL
;
1461 //////////////////////////////////////////////////////////////////////////
1462 size_t CLibClass::GetTimerCount() const
1464 return m_timers
.size();
1467 //////////////////////////////////////////////////////////////////////////
1468 const ILibTimer
* CLibClass::GetTimer(size_t iTimer
) const
1470 return iTimer
< m_timers
.size() ? &m_timers
[iTimer
] : NULL
;
1473 //////////////////////////////////////////////////////////////////////////
1474 size_t CLibClass::GetPersistentTimerCount() const
1476 return m_persistentTimers
.size();
1479 //////////////////////////////////////////////////////////////////////////
1480 size_t CLibClass::GetPersistentTimer(size_t iPersistentTimer
) const
1482 return iPersistentTimer
< m_persistentTimers
.size() ? m_persistentTimers
[iPersistentTimer
] : INVALID_INDEX
;
1485 //////////////////////////////////////////////////////////////////////////
1486 size_t CLibClass::GetAbstractInterfaceImplementationCount() const
1488 return m_abstractInterfaceImplementations
.size();
1491 //////////////////////////////////////////////////////////////////////////
1492 const ILibAbstractInterfaceImplementation
* CLibClass::GetAbstractInterfaceImplementation(size_t iAbstractInterfaceImplementation
) const
1494 return iAbstractInterfaceImplementation
< m_abstractInterfaceImplementations
.size() ? &m_abstractInterfaceImplementations
[iAbstractInterfaceImplementation
] : NULL
;
1497 //////////////////////////////////////////////////////////////////////////
1498 size_t CLibClass::GetComponentInstanceCount() const
1500 return m_componentInstances
.size();
1503 //////////////////////////////////////////////////////////////////////////
1504 const ILibComponentInstance
* CLibClass::GetComponentInstance(size_t iComponentInstance
) const
1506 return iComponentInstance
< m_componentInstances
.size() ? &m_componentInstances
[iComponentInstance
] : NULL
;
1509 //////////////////////////////////////////////////////////////////////////
1510 size_t CLibClass::GetActionInstanceCount() const
1512 return m_actionInstances
.size();
1515 //////////////////////////////////////////////////////////////////////////
1516 const ILibActionInstance
* CLibClass::GetActionInstance(size_t iActionInstance
) const
1518 return iActionInstance
< m_actionInstances
.size() ? &m_actionInstances
[iActionInstance
] : NULL
;
1521 //////////////////////////////////////////////////////////////////////////
1522 size_t CLibClass::GetPersistentActionInstanceCount() const
1524 return m_persistentActionInstances
.size();
1527 //////////////////////////////////////////////////////////////////////////
1528 size_t CLibClass::GetPersistentActionInstance(size_t iPersistentActionInstance
) const
1530 return iPersistentActionInstance
< m_persistentActionInstances
.size() ? m_persistentActionInstances
[iPersistentActionInstance
] : INVALID_INDEX
;
1533 //////////////////////////////////////////////////////////////////////////
1534 size_t CLibClass::GetConstructorCount() const
1536 return m_constructors
.size();
1539 //////////////////////////////////////////////////////////////////////////
1540 const ILibConstructor
* CLibClass::GetConstructor(size_t iConstructor
) const
1542 return iConstructor
< m_constructors
.size() ? &m_constructors
[iConstructor
] : NULL
;
1545 //////////////////////////////////////////////////////////////////////////
1546 size_t CLibClass::GetPersistentConstructorCount() const
1548 return m_persistentConstructors
.size();
1551 //////////////////////////////////////////////////////////////////////////
1552 size_t CLibClass::GetPersistentConstructor(size_t iPersistentConstructor
) const
1554 return iPersistentConstructor
< m_persistentConstructors
.size() ? m_persistentConstructors
[iPersistentConstructor
] : INVALID_INDEX
;
1557 //////////////////////////////////////////////////////////////////////////
1558 size_t CLibClass::GetDestructorCount() const
1560 return m_destructors
.size();
1563 //////////////////////////////////////////////////////////////////////////
1564 const ILibDestructor
* CLibClass::GetDestructor(size_t iDestructor
) const
1566 return iDestructor
< m_destructors
.size() ? &m_destructors
[iDestructor
] : NULL
;
1569 //////////////////////////////////////////////////////////////////////////
1570 size_t CLibClass::GetPersistentDestructorCount() const
1572 return m_persistentDestructors
.size();
1575 //////////////////////////////////////////////////////////////////////////
1576 size_t CLibClass::GetPersistentDestructor(size_t iPersistentDestructor
) const
1578 return iPersistentDestructor
< m_persistentDestructors
.size() ? m_persistentDestructors
[iPersistentDestructor
] : INVALID_INDEX
;
1581 //////////////////////////////////////////////////////////////////////////
1582 size_t CLibClass::GetSignalReceiverCount() const
1584 return m_signalReceivers
.size();
1587 //////////////////////////////////////////////////////////////////////////
1588 const ILibSignalReceiver
* CLibClass::GetSignalReceiver(size_t iSignalReceiver
) const
1590 return iSignalReceiver
< m_signalReceivers
.size() ? &m_signalReceivers
[iSignalReceiver
] : NULL
;
1593 //////////////////////////////////////////////////////////////////////////
1594 size_t CLibClass::GetPersistentSignalReceiverCount() const
1596 return m_persistentSignalReceivers
.size();
1599 //////////////////////////////////////////////////////////////////////////
1600 size_t CLibClass::GetPersistentSignalReceiver(size_t iPersistentSignalReceiver
) const
1602 return iPersistentSignalReceiver
< m_persistentSignalReceivers
.size() ? m_persistentSignalReceivers
[iPersistentSignalReceiver
] : INVALID_INDEX
;
1605 //////////////////////////////////////////////////////////////////////////
1606 size_t CLibClass::GetTransitionCount() const
1608 return m_transitions
.size();
1611 //////////////////////////////////////////////////////////////////////////
1612 const ILibTransition
* CLibClass::GetTransition(size_t iTransition
) const
1614 return iTransition
< m_transitions
.size() ? &m_transitions
[iTransition
] : NULL
;
1617 //////////////////////////////////////////////////////////////////////////
1618 LibFunctionId
CLibClass::GetFunctionId(const SGUID
& guid
) const
1620 TFunctionIdByGUIDMap::const_iterator iFunctionId
= m_functionIdsByGUID
.find(guid
);
1621 return iFunctionId
!= m_functionIdsByGUID
.end() ? iFunctionId
->second
: LibFunctionId::s_invalid
;
1624 //////////////////////////////////////////////////////////////////////////
1625 const ILibFunction
* CLibClass::GetFunction(const LibFunctionId
& functionId
) const
1627 TFunctionMap::const_iterator iFunction
= m_functions
.find(functionId
);
1628 return iFunction
!= m_functions
.end() ? &iFunction
->second
.function
: NULL
;
1631 const SGUID
CLibClass::GetFunctionGUID(const LibFunctionId
& functionId
) const
1633 TFunctionMap::const_iterator iFunction
= m_functions
.find(functionId
);
1634 return iFunction
!= m_functions
.end() ? iFunction
->second
.function
.GetGUID() : SGUID();
1637 //////////////////////////////////////////////////////////////////////////
1638 const CRuntimeFunction
* CLibClass::GetFunction_New(uint32 functionIdx
) const
1640 return functionIdx
< m_functions_New
.size() ? m_functions_New
[functionIdx
].get() : nullptr;
1643 //////////////////////////////////////////////////////////////////////////
1644 void CLibClass::PreviewGraphFunctions(const SGUID
& graphGUID
, const StringStreamOutCallback
& stringStreamOutCallback
) const
1646 for(TFunctionMap::const_iterator iFunction
= m_functions
.begin(), iEndFunction
= m_functions
.end(); iFunction
!= iEndFunction
; ++ iFunction
)
1648 const SFunction
& function
= iFunction
->second
;
1649 if(function
.function
.GetGUID() == graphGUID
)
1651 PreviewFunction(function
.function
, stringStreamOutCallback
);
1656 //////////////////////////////////////////////////////////////////////////
1657 size_t CLibClass::AddStateMachine(const SGUID
& guid
, const char* name
, EStateMachineLifetime lifetime
, EStateMachineNetAuthority netType
)
1659 m_stateMachines
.push_back(CLibStateMachine(guid
, name
, lifetime
, netType
));
1660 return m_stateMachines
.size() - 1;
1663 //////////////////////////////////////////////////////////////////////////
1664 CLibStateMachine
* CLibClass::GetStateMachine(size_t iStateMachine
)
1666 return iStateMachine
< m_stateMachines
.size() ? &m_stateMachines
[iStateMachine
] : nullptr;
1669 //////////////////////////////////////////////////////////////////////////
1670 size_t CLibClass::AddState(const SGUID
& guid
, const char* name
)
1672 m_states
.push_back(CLibState(guid
, name
));
1673 return m_states
.size() - 1;
1676 //////////////////////////////////////////////////////////////////////////
1677 CLibState
* CLibClass::GetState(size_t iState
)
1679 return iState
< m_states
.size() ? &m_states
[iState
] : nullptr;
1682 //////////////////////////////////////////////////////////////////////////
1683 size_t CLibClass::AddVariable(const SGUID
& guid
, const char* szName
, EOverridePolicy overridePolicy
, const IAny
& value
, size_t variantPos
, size_t variantCount
, ELibVariableFlags flags
)
1685 m_variables
.push_back(CLibVariable(guid
, szName
, overridePolicy
, value
, variantPos
, variantCount
, flags
));
1686 return m_variables
.size() - 1;
1689 //////////////////////////////////////////////////////////////////////////
1690 CLibVariable
* CLibClass::GetVariable(size_t iVariable
)
1692 return iVariable
< m_variables
.size() ? &m_variables
[iVariable
] : nullptr;
1695 //////////////////////////////////////////////////////////////////////////
1696 size_t CLibClass::AddContainer(const SGUID
& guid
, const char* szName
, const SGUID
& typeGUID
)
1698 m_containers
.push_back(CLibContainer(guid
, szName
, typeGUID
));
1699 return m_containers
.size() - 1;
1702 //////////////////////////////////////////////////////////////////////////
1703 CLibContainer
* CLibClass::GetContainer(size_t iContainer
)
1705 return iContainer
< m_containers
.size() ? &m_containers
[iContainer
] : nullptr;
1708 //////////////////////////////////////////////////////////////////////////
1709 TVariantVector
& CLibClass::GetVariants()
1714 //////////////////////////////////////////////////////////////////////////
1715 size_t CLibClass::AddTimer(const SGUID
& guid
, const char* szName
, const STimerParams
& params
)
1717 m_timers
.push_back(CLibTimer(guid
, szName
, params
));
1718 return m_timers
.size() - 1;
1721 //////////////////////////////////////////////////////////////////////////
1722 size_t CLibClass::AddPersistentTimer(const SGUID
& guid
, const char* szName
, const STimerParams
& params
)
1724 m_persistentTimers
.push_back(m_timers
.size());
1725 return AddTimer(guid
, szName
, params
);
1728 //////////////////////////////////////////////////////////////////////////
1729 CLibTimer
* CLibClass::GetTimer(size_t iTimer
)
1731 return iTimer
< m_timers
.size() ? &m_timers
[iTimer
] : nullptr;
1734 //////////////////////////////////////////////////////////////////////////
1735 size_t CLibClass::AddAbstractInterfaceImplementation(const SGUID
& guid
, const char* szName
, const SGUID
& interfaceGUID
)
1737 m_abstractInterfaceImplementations
.push_back(CLibAbstractInterfaceImplementation(guid
, szName
, interfaceGUID
));
1738 return m_abstractInterfaceImplementations
.size() - 1;
1741 //////////////////////////////////////////////////////////////////////////
1742 CLibAbstractInterfaceImplementation
* CLibClass::GetAbstractInterfaceImplementation(size_t iAbstractInterfaceImplementation
)
1744 return iAbstractInterfaceImplementation
< m_abstractInterfaceImplementations
.size() ? &m_abstractInterfaceImplementations
[iAbstractInterfaceImplementation
] : NULL
;
1747 //////////////////////////////////////////////////////////////////////////
1748 size_t CLibClass::AddComponentInstance(const SGUID
& guid
, const char* szName
, const SGUID
& componentGUID
, const IPropertiesPtr
& pProperties
, uint32 propertyFunctionIdx
, uint32 parentIdx
)
1750 m_componentInstances
.push_back(CLibComponentInstance(guid
, szName
, componentGUID
, pProperties
, propertyFunctionIdx
, parentIdx
));
1751 return m_componentInstances
.size() - 1;
1754 //////////////////////////////////////////////////////////////////////////
1755 CLibComponentInstance
* CLibClass::GetComponentInstance(size_t iComponentInstance
)
1757 return iComponentInstance
< m_componentInstances
.size() ? &m_componentInstances
[iComponentInstance
] : NULL
;
1760 //////////////////////////////////////////////////////////////////////////
1761 void CLibClass::SortComponentInstances()
1763 IEnvRegistry
& envRegistry
= gEnv
->pSchematyc2
->GetEnvRegistry();
1764 const size_t componentInstanceCount
= m_componentInstances
.size();
1765 TComponentInstanceSortRefVector componentInstanceSortRefs
;
1766 componentInstanceSortRefs
.reserve(componentInstanceCount
);
1767 for(size_t iComponentInstance
= 0; iComponentInstance
< componentInstanceCount
; ++ iComponentInstance
)
1769 const CLibComponentInstance
& componentInstance
= m_componentInstances
[iComponentInstance
];
1770 IComponentFactoryConstPtr pComponentFactory
= envRegistry
.GetComponentFactory(componentInstance
.GetComponentGUID());
1771 CRY_ASSERT(pComponentFactory
);
1772 if(pComponentFactory
)
1774 componentInstanceSortRefs
.push_back(SComponentInstanceSortRef(iComponentInstance
));
1776 SComponentInstanceSortRef
& componentInstanceSortRef
= componentInstanceSortRefs
.back();
1777 const size_t componentDependencyCount
= pComponentFactory
->GetDependencyCount();
1778 componentInstanceSortRef
.dependencies
.reserve(componentDependencyCount
);
1779 for(size_t iComponentDependency
= 0; iComponentDependency
< componentDependencyCount
; ++ iComponentDependency
)
1781 const SGUID componentDependencyGUID
= pComponentFactory
->GetDependencyGUID(iComponentDependency
);
1782 for(size_t iOtherComponentInstance
= 0; iOtherComponentInstance
< componentInstanceCount
; ++ iOtherComponentInstance
)
1784 if(m_componentInstances
[iOtherComponentInstance
].GetComponentGUID() == componentDependencyGUID
)
1786 componentInstanceSortRef
.dependencies
.push_back(iOtherComponentInstance
);
1794 bool resolveDependencies
;
1797 resolveDependencies
= false;
1798 for(size_t iComponentInstance
= 0; iComponentInstance
< componentInstanceCount
; ++ iComponentInstance
)
1800 SComponentInstanceSortRef
& componentInstanceSortRef
= componentInstanceSortRefs
[iComponentInstance
];
1801 for(TSizeTVector::const_iterator iComponentDependency
= componentInstanceSortRef
.dependencies
.begin(), iEndComponentDependency
= componentInstanceSortRef
.dependencies
.end(); iComponentDependency
!= iEndComponentDependency
; ++ iComponentDependency
)
1803 SComponentInstanceSortRef
& otherComponentInstanceSortRef
= componentInstanceSortRefs
[*iComponentDependency
];
1804 if(otherComponentInstanceSortRef
.priority
<= componentInstanceSortRef
.priority
)
1806 otherComponentInstanceSortRef
.priority
= componentInstanceSortRef
.priority
+ 1;
1807 resolveDependencies
= true;
1811 } while(resolveDependencies
);
1812 std::sort(componentInstanceSortRefs
.begin(), componentInstanceSortRefs
.end(), SComponentInstanceSortPredicate());
1814 TComponentInstanceVector componentInstances
;
1815 componentInstances
.reserve(componentInstanceCount
);
1816 for(size_t iComponentInstance
= 0; iComponentInstance
< componentInstanceCount
; ++ iComponentInstance
)
1818 componentInstances
.push_back(m_componentInstances
[componentInstanceSortRefs
[iComponentInstance
].iComponentInstance
]);
1820 std::swap(componentInstances
, m_componentInstances
);
1823 //////////////////////////////////////////////////////////////////////////
1824 void CLibClass::ValidateSingletonComponentInstances() const
1826 IEnvRegistry
& envRegistry
= gEnv
->pSchematyc2
->GetEnvRegistry();
1828 const size_t componentInstanceCount
= m_componentInstances
.size();
1830 VectorMap
<SGUID
, SGUID
> singletons
;
1831 singletons
.reserve(componentInstanceCount
);
1833 for (size_t iComponentInstance
= 0; iComponentInstance
< componentInstanceCount
; ++iComponentInstance
)
1835 const CLibComponentInstance
& componentInstance
= m_componentInstances
[iComponentInstance
];
1836 const SGUID componentGuid
= componentInstance
.GetComponentGUID();
1837 IComponentFactoryConstPtr pComponentFactory
= envRegistry
.GetComponentFactory(componentGuid
);
1838 if ((pComponentFactory
->GetFlags() & EComponentFlags::Singleton
) != 0)
1840 const SGUID instanceGuid
= componentInstance
.GetGUID();
1841 auto iter
= singletons
.find(componentGuid
);
1842 if (singletons
.find(componentGuid
) == singletons
.end())
1844 singletons
[componentGuid
] = instanceGuid
;
1848 stack_string guid1
, guid2
, guid3
;
1849 SCHEMATYC2_COMPILER_ERROR("Singleton component %s '%s' instance %s is repeated several time. First instance %s",
1850 StringUtils::SysGUIDToString(componentGuid
.sysGUID
, guid1
),
1851 componentInstance
.GetName(),
1852 StringUtils::SysGUIDToString(instanceGuid
.sysGUID
, guid2
),
1853 StringUtils::SysGUIDToString(iter
->second
.sysGUID
, guid3
));
1859 //////////////////////////////////////////////////////////////////////////
1860 size_t CLibClass::AddActionInstance(const SGUID
& guid
, const char* name
, const SGUID
& actionGUID
, size_t iComponentInstance
, const IPropertiesPtr
& pProperties
)
1862 m_actionInstances
.push_back(CLibActionInstance(guid
, name
, actionGUID
, iComponentInstance
, pProperties
));
1863 return m_actionInstances
.size() - 1;
1866 //////////////////////////////////////////////////////////////////////////
1867 size_t CLibClass::AddPersistentActionInstance(const SGUID
& guid
, const char* name
, const SGUID
& actionGUID
, size_t iComponentInstance
, const IPropertiesPtr
& pProperties
)
1869 m_persistentActionInstances
.push_back(m_actionInstances
.size());
1870 return AddActionInstance(guid
, name
, actionGUID
, iComponentInstance
, pProperties
);
1873 //////////////////////////////////////////////////////////////////////////
1874 CLibActionInstance
* CLibClass::GetActionInstance(size_t iActionInstance
)
1876 return iActionInstance
< m_actionInstances
.size() ? &m_actionInstances
[iActionInstance
] : NULL
;
1879 //////////////////////////////////////////////////////////////////////////
1880 size_t CLibClass::AddConstructor(const SGUID
& guid
, const LibFunctionId
& functionId
)
1882 m_constructors
.push_back(CLibConstructor(guid
, functionId
));
1883 return m_constructors
.size() - 1;
1886 //////////////////////////////////////////////////////////////////////////
1887 size_t CLibClass::AddPersistentConstructor(const SGUID
& guid
, const LibFunctionId
& functionId
)
1889 m_persistentConstructors
.push_back(m_constructors
.size());
1890 return AddConstructor(guid
, functionId
);
1893 //////////////////////////////////////////////////////////////////////////
1894 CLibConstructor
* CLibClass::GetConstructor(size_t iConstructor
)
1896 return iConstructor
< m_constructors
.size() ? &m_constructors
[iConstructor
] : NULL
;
1899 //////////////////////////////////////////////////////////////////////////
1900 size_t CLibClass::AddDestructor(const SGUID
& guid
, const LibFunctionId
& functionId
)
1902 m_destructors
.push_back(CLibDestructor(guid
, functionId
));
1903 return m_destructors
.size() - 1;
1906 //////////////////////////////////////////////////////////////////////////
1907 size_t CLibClass::AddPersistentDestructor(const SGUID
& guid
, const LibFunctionId
& functionId
)
1909 m_persistentDestructors
.push_back(m_destructors
.size());
1910 return AddDestructor(guid
, functionId
);
1913 //////////////////////////////////////////////////////////////////////////
1914 CLibDestructor
* CLibClass::GetDestructor(size_t iDestructor
)
1916 return iDestructor
< m_destructors
.size() ? &m_destructors
[iDestructor
] : NULL
;
1919 //////////////////////////////////////////////////////////////////////////
1920 size_t CLibClass::AddSignalReceiver(const SGUID
& guid
, const SGUID
& contextGUID
, const LibFunctionId
& functionId
)
1922 m_signalReceivers
.push_back(CLibSignalReceiver(guid
, contextGUID
, functionId
));
1923 return m_signalReceivers
.size() - 1;
1926 //////////////////////////////////////////////////////////////////////////
1927 size_t CLibClass::AddPersistentSignalReceiver(const SGUID
& guid
, const SGUID
& contextGUID
, const LibFunctionId
& functionId
)
1929 m_persistentSignalReceivers
.push_back(m_signalReceivers
.size());
1930 return AddSignalReceiver(guid
, contextGUID
, functionId
);
1933 //////////////////////////////////////////////////////////////////////////
1934 CLibSignalReceiver
* CLibClass::GetSignalReceiver(size_t iSignalReceiver
)
1936 return iSignalReceiver
< m_signalReceivers
.size() ? &m_signalReceivers
[iSignalReceiver
] : NULL
;
1939 //////////////////////////////////////////////////////////////////////////
1940 size_t CLibClass::AddTransition(const SGUID
& guid
, const SGUID
& contextGUID
, const LibFunctionId
& functionId
)
1942 m_transitions
.push_back(CLibTransition(guid
, contextGUID
, functionId
));
1943 return m_transitions
.size() - 1;
1946 //////////////////////////////////////////////////////////////////////////
1947 CLibTransition
* CLibClass::GetTransition(size_t iTransition
)
1949 return iTransition
< m_transitions
.size() ? &m_transitions
[iTransition
] : NULL
;
1952 //////////////////////////////////////////////////////////////////////////
1953 LibFunctionId
CLibClass::AddFunction(const SGUID
& graphGUID
)
1955 LibFunctionId functionId
= m_nextFunctionId
++;
1956 m_functions
.insert(TFunctionMap::value_type(functionId
, SFunction(graphGUID
)));
1960 //////////////////////////////////////////////////////////////////////////
1961 CLibFunction
* CLibClass::GetFunction(const LibFunctionId
& functionId
)
1963 TFunctionMap::iterator iFunction
= m_functions
.find(functionId
);
1964 return iFunction
!= m_functions
.end() ? &iFunction
->second
.function
: NULL
;
1967 //////////////////////////////////////////////////////////////////////////
1968 uint32
CLibClass::AddFunction_New(const SGUID
& guid
)
1970 const uint32 functionIdx
= m_functions_New
.size();
1971 CRuntimeFunctionPtr pFunction
= std::make_shared
<CRuntimeFunction
>(guid
);
1972 m_functions_New
.push_back(pFunction
);
1976 //////////////////////////////////////////////////////////////////////////
1977 CRuntimeFunction
* CLibClass::GetFunction_New(uint32 functionIdx
)
1979 return functionIdx
< m_functions_New
.size() ? m_functions_New
[functionIdx
].get() : nullptr;
1982 //////////////////////////////////////////////////////////////////////////
1983 bool CLibClass::BindFunctionToGUID(const LibFunctionId
& functionId
, const SGUID
& guid
)
1985 return m_functionIdsByGUID
.insert(TFunctionIdByGUIDMap::value_type(guid
, functionId
)).second
;
1988 //////////////////////////////////////////////////////////////////////////
1989 void CLibClass::CompactMemory()
1991 for (TFunctionMap::value_type
& functionPair
: m_functions
)
1993 functionPair
.second
.function
.CompactMemory();
1996 m_stateMachines
.shrink_to_fit();
1997 for (CLibStateMachine
& stateMachine
: m_stateMachines
)
1999 stateMachine
.CompactMemory();
2002 m_states
.shrink_to_fit();
2003 for (CLibState
& state
: m_states
)
2005 state
.CompactMemory();
2008 m_variables
.shrink_to_fit();
2009 m_containers
.shrink_to_fit();
2010 m_variants
.shrink_to_fit();
2011 m_timers
.shrink_to_fit();
2012 m_persistentTimers
.shrink_to_fit();
2013 m_abstractInterfaceImplementations
.shrink_to_fit();
2014 m_componentInstances
.shrink_to_fit();
2015 m_actionInstances
.shrink_to_fit();
2016 m_persistentActionInstances
.shrink_to_fit();
2017 m_constructors
.shrink_to_fit();
2018 m_persistentConstructors
.shrink_to_fit();
2019 m_destructors
.shrink_to_fit();
2020 m_persistentDestructors
.shrink_to_fit();
2021 m_signalReceivers
.shrink_to_fit();
2022 m_persistentSignalReceivers
.shrink_to_fit();
2023 m_transitions
.shrink_to_fit();
2024 m_functions_New
.shrink_to_fit();
2025 for (CRuntimeFunctionPtr
& pFunction
: m_functions_New
)
2027 pFunction
->CompactMemory();
2030 m_resourcesToPrecache
.shrink_to_fit();
2033 //////////////////////////////////////////////////////////////////////////
2034 void CLibClass::AddPrecacheResource(IAnyConstPtr resource
)
2036 m_resourcesToPrecache
.emplace_back(resource
);
2039 //////////////////////////////////////////////////////////////////////////
2040 size_t CLibClass::GetPrecacheResourceCount() const
2042 return m_resourcesToPrecache
.size();
2045 //////////////////////////////////////////////////////////////////////////
2046 IAnyConstPtr
CLibClass::GetPrecacheResource(size_t ressourceIdx
) const
2048 return ressourceIdx
< m_resourcesToPrecache
.size() ? m_resourcesToPrecache
[ressourceIdx
] : nullptr;
2051 //////////////////////////////////////////////////////////////////////////
2052 CLibClass::SFunction::SFunction(const SGUID
& _graphGUID
)
2054 function
.SetGUID(_graphGUID
);
2057 //////////////////////////////////////////////////////////////////////////
2058 void CLibClass::PreviewFunction(const CLibFunction
& function
, StringStreamOutCallback stringStreamOutCallback
) const
2060 stringStreamOutCallback("function ");
2061 stringStreamOutCallback(function
.GetName());
2062 if(function
.GetSize() > 0)
2064 stringStreamOutCallback("\n\n");
2065 for(size_t functionPos
= 0, size
= function
.GetSize(); functionPos
< size
; )
2067 const SVMOp
* pOp
= function
.GetOp(functionPos
);
2069 size_t pos
= static_cast<size_t>(reinterpret_cast<const uint8
*>(pOp
) - reinterpret_cast<const uint8
*>(function
.GetOp(0)));
2070 char stringBuffer
[StringUtils::s_sizeTStringBufferSize
] = "";
2071 stringStreamOutCallback(StringUtils::SizeTToString(pos
, stringBuffer
));
2077 const SVMPushOp
* pPushOp
= static_cast<const SVMPushOp
*>(pOp
);
2078 const CVariant
& value
= function
.GetVariantConsts()[pPushOp
->iConstValue
];
2079 const bool valueIsString
= (value
.GetTypeId() == CVariant::STRING
) || (value
.GetTypeId() == CVariant::POOL_STRING
);
2080 stack_string stringBuffer
;
2081 StringUtils::VariantToString(value
, stringBuffer
);
2082 stringStreamOutCallback("\tPUSH ");
2083 if(valueIsString
== true)
2085 stringStreamOutCallback("\"");
2087 stringStreamOutCallback(stringBuffer
.c_str());
2088 if(valueIsString
== true)
2090 stringStreamOutCallback("\"");
2092 stringStreamOutCallback("\n");
2097 const SVMSetOp
* pSetOp
= static_cast<const SVMSetOp
*>(pOp
);
2098 const CVariant
& value
= function
.GetVariantConsts()[pSetOp
->iConstValue
];
2099 const bool valueIsString
= (value
.GetTypeId() == CVariant::STRING
) || (value
.GetTypeId() == CVariant::POOL_STRING
);
2100 stack_string stringBuffer
;
2101 StringUtils::SizeTToString(pSetOp
->pos
, stringBuffer
);
2102 stringStreamOutCallback("\tSET ");
2103 stringStreamOutCallback(stringBuffer
.c_str());
2104 stringStreamOutCallback(" ");
2105 StringUtils::VariantToString(value
, stringBuffer
);
2106 if(valueIsString
== true)
2108 stringStreamOutCallback("\"");
2110 stringStreamOutCallback(stringBuffer
.c_str());
2111 if(valueIsString
== true)
2113 stringStreamOutCallback("\"");
2115 stringStreamOutCallback("\n");
2120 const size_t srcPos
= static_cast<const SVMCopyOp
*>(pOp
)->srcPos
;
2121 const size_t dstPos
= static_cast<const SVMCopyOp
*>(pOp
)->dstPos
;
2122 char stringBuffer
[StringUtils::s_sizeTStringBufferSize
] = "";
2123 stringStreamOutCallback("\tCOPY ");
2124 if(srcPos
== INVALID_INDEX
)
2126 stringStreamOutCallback("TOP");
2130 stringStreamOutCallback(StringUtils::SizeTToString(srcPos
, stringBuffer
));
2132 stringStreamOutCallback(" ");
2133 if(dstPos
== INVALID_INDEX
)
2135 stringStreamOutCallback("TOP");
2139 stringStreamOutCallback(StringUtils::SizeTToString(dstPos
, stringBuffer
));
2141 stringStreamOutCallback("\n");
2146 const SVMPopOp
* pPopOp
= static_cast<const SVMPopOp
*>(pOp
);
2147 char stringBuffer
[StringUtils::s_sizeTStringBufferSize
] = "";
2148 stringStreamOutCallback("\tPOP ");
2149 stringStreamOutCallback(StringUtils::SizeTToString(pPopOp
->count
, stringBuffer
));
2150 stringStreamOutCallback("\n");
2153 case SVMOp::COLLAPSE
:
2155 const SVMCollapseOp
* pCollapseOp
= static_cast<const SVMCollapseOp
*>(pOp
);
2156 char stringBuffer
[StringUtils::s_sizeTStringBufferSize
] = "";
2157 stringStreamOutCallback("\tCOLLAPSE ");
2158 stringStreamOutCallback(StringUtils::SizeTToString(pCollapseOp
->pos
, stringBuffer
));
2159 stringStreamOutCallback("\n");
2164 const SVMLoadOp
* pLoadOp
= static_cast<const SVMLoadOp
*>(pOp
);
2165 const char* variableName
= "?";
2166 char stringBuffer
[StringUtils::s_sizeTStringBufferSize
] = "";
2167 for(size_t iVariable
= 0, variableCount
= GetVariableCount(); iVariable
< variableCount
; ++ iVariable
)
2169 const ILibVariable
& variable
= *GetVariable(iVariable
);
2170 if(variable
.GetVariantPos() == pLoadOp
->pos
)
2172 variableName
= variable
.GetName();
2176 stringStreamOutCallback("\tLOAD ");
2177 stringStreamOutCallback(variableName
);
2178 stringStreamOutCallback(" ");
2179 stringStreamOutCallback(StringUtils::SizeTToString(pLoadOp
->count
, stringBuffer
));
2180 stringStreamOutCallback("\n");
2185 const SVMStoreOp
* pStoreOp
= static_cast<const SVMStoreOp
*>(pOp
);
2186 const char* variableName
= "?";
2187 char stringBuffer
[StringUtils::s_sizeTStringBufferSize
] = "";
2188 for(size_t iVariable
= 0, variableCount
= GetVariableCount(); iVariable
< variableCount
; ++ iVariable
)
2190 const ILibVariable
& variable
= *GetVariable(iVariable
);
2191 if(variable
.GetVariantPos() == pStoreOp
->pos
)
2193 variableName
= variable
.GetName();
2197 stringStreamOutCallback("\tSTORE ");
2198 stringStreamOutCallback(variableName
);
2199 stringStreamOutCallback(" ");
2200 stringStreamOutCallback(StringUtils::SizeTToString(pStoreOp
->count
, stringBuffer
));
2201 stringStreamOutCallback("\n");
2204 case SVMOp::CONTAINER_ADD
:
2206 const SVMContainerAddOp
* pContainerAddOp
= static_cast<const SVMContainerAddOp
*>(pOp
);
2207 char stringBuffer
[StringUtils::s_sizeTStringBufferSize
] = "";
2208 stringStreamOutCallback("\tCONTAINER_ADD ");
2209 stringStreamOutCallback(GetContainer(pContainerAddOp
->iContainer
)->GetName());
2210 stringStreamOutCallback(" ");
2211 stringStreamOutCallback(StringUtils::SizeTToString(pContainerAddOp
->count
, stringBuffer
));
2212 stringStreamOutCallback("\n");
2215 case SVMOp::CONTAINER_REMOVE_BY_INDEX
:
2217 const SVMContainerRemoveByIndexOp
* pContainerRemoveByIndexOp
= static_cast<const SVMContainerRemoveByIndexOp
*>(pOp
);
2218 stringStreamOutCallback("\tCONTAINER_REMOVE_BY_INDEX ");
2219 stringStreamOutCallback(GetContainer(pContainerRemoveByIndexOp
->iContainer
)->GetName());
2220 stringStreamOutCallback("\n");
2223 case SVMOp::CONTAINER_REMOVE_BY_VALUE
:
2225 const SVMContainerRemoveByValueOp
* pContainerRemoveByValueOp
= static_cast<const SVMContainerRemoveByValueOp
*>(pOp
);
2226 char stringBuffer
[StringUtils::s_sizeTStringBufferSize
] = "";
2227 stringStreamOutCallback("\tCONTAINER_REMOVE_BY_VALUE ");
2228 stringStreamOutCallback(GetContainer(pContainerRemoveByValueOp
->iContainer
)->GetName());
2229 stringStreamOutCallback(" ");
2230 stringStreamOutCallback(StringUtils::SizeTToString(pContainerRemoveByValueOp
->count
, stringBuffer
));
2231 stringStreamOutCallback("\n");
2234 case SVMOp::CONTAINER_CLEAR
:
2236 const SVMContainerClearOp
* pContainerClearOp
= static_cast<const SVMContainerClearOp
*>(pOp
);
2237 stringStreamOutCallback("\tCONTAINER_CLEAR ");
2238 stringStreamOutCallback(GetContainer(pContainerClearOp
->iContainer
)->GetName());
2239 stringStreamOutCallback("\n");
2242 case SVMOp::CONTAINER_SIZE
:
2244 const SVMContainerSizeOp
* pContainerSizeOp
= static_cast<const SVMContainerSizeOp
*>(pOp
);
2245 char stringBuffer
[StringUtils::s_sizeTStringBufferSize
] = "";
2246 stringStreamOutCallback("\tCONTAINER_SIZE ");
2247 stringStreamOutCallback(GetContainer(pContainerSizeOp
->iContainer
)->GetName());
2248 stringStreamOutCallback(" ");
2249 stringStreamOutCallback(StringUtils::SizeTToString(pContainerSizeOp
->divisor
, stringBuffer
));
2250 stringStreamOutCallback("\n");
2253 case SVMOp::CONTAINER_GET
:
2255 const SVMContainerGetOp
* pContainerGetOp
= static_cast<const SVMContainerGetOp
*>(pOp
);
2256 stringStreamOutCallback("\tCONTAINER_GET ");
2257 stringStreamOutCallback(GetContainer(pContainerGetOp
->iContainer
)->GetName());
2258 stringStreamOutCallback("\n");
2261 case SVMOp::CONTAINER_SET
:
2263 const SVMContainerSetOp
* pContainerSetOp
= static_cast<const SVMContainerSetOp
*>(pOp
);
2264 char stringBuffer
[StringUtils::s_sizeTStringBufferSize
] = "";
2265 stringStreamOutCallback("\tCONTAINER_SET ");
2266 stringStreamOutCallback(GetContainer(pContainerSetOp
->iContainer
)->GetName());
2267 stringStreamOutCallback(" ");
2268 stringStreamOutCallback(StringUtils::SizeTToString(pContainerSetOp
->count
, stringBuffer
));
2269 stringStreamOutCallback("\n");
2272 case SVMOp::CONTAINER_FIND_BY_VALUE
:
2274 const SVMContainerFindByValueOp
* pContainerFindByValueOp
= static_cast<const SVMContainerFindByValueOp
*>(pOp
);
2275 char stringBuffer
[StringUtils::s_sizeTStringBufferSize
] = "";
2276 stringStreamOutCallback("\tCONTAINER_FIND_BY_VALUE ");
2277 stringStreamOutCallback(GetContainer(pContainerFindByValueOp
->iContainer
)->GetName());
2278 stringStreamOutCallback(" ");
2279 stringStreamOutCallback(StringUtils::SizeTToString(pContainerFindByValueOp
->count
, stringBuffer
));
2280 stringStreamOutCallback("\n");
2283 case SVMOp::COMPARE
:
2285 const SVMCompareOp
* pCompareOp
= static_cast<const SVMCompareOp
*>(pOp
);
2286 char stringBuffer
[StringUtils::s_sizeTStringBufferSize
] = "";
2287 stringStreamOutCallback("\tCOMPARE ");
2288 stringStreamOutCallback(StringUtils::SizeTToString(pCompareOp
->lhsPos
, stringBuffer
));
2289 stringStreamOutCallback(" ");
2290 stringStreamOutCallback(StringUtils::SizeTToString(pCompareOp
->rhsPos
, stringBuffer
));
2291 stringStreamOutCallback(" ");
2292 stringStreamOutCallback(StringUtils::SizeTToString(pCompareOp
->count
, stringBuffer
));
2293 stringStreamOutCallback("\n");
2296 case SVMOp::INCREMENT_INT32
:
2298 const SVMIncrementInt32Op
* pIncrementInt32Op
= static_cast<const SVMIncrementInt32Op
*>(pOp
);
2299 char stringBuffer
[StringUtils::s_sizeTStringBufferSize
] = "";
2300 stringStreamOutCallback("\tINCREMENT_INT32 ");
2301 stringStreamOutCallback(StringUtils::SizeTToString(pIncrementInt32Op
->pos
, stringBuffer
));
2302 stringStreamOutCallback("\n");
2305 case SVMOp::LESS_THAN_INT32
:
2307 const SVMLessThanInt32Op
* pLessThanInt32Op
= static_cast<const SVMLessThanInt32Op
*>(pOp
);
2308 char stringBuffer
[StringUtils::s_sizeTStringBufferSize
] = "";
2309 stringStreamOutCallback("\tLESS_THAN_INT32 ");
2310 stringStreamOutCallback(StringUtils::SizeTToString(pLessThanInt32Op
->lhsPos
, stringBuffer
));
2311 stringStreamOutCallback(" ");
2312 stringStreamOutCallback(StringUtils::SizeTToString(pLessThanInt32Op
->rhsPos
, stringBuffer
));
2313 stringStreamOutCallback("\n");
2316 case SVMOp::GREATER_THAN_INT32
:
2318 const SVMGreaterThanInt32Op
* pGreaterThanInt32Op
= static_cast<const SVMGreaterThanInt32Op
*>(pOp
);
2319 char stringBuffer
[StringUtils::s_sizeTStringBufferSize
] = "";
2320 stringStreamOutCallback("\tGREATER_THAN_INT32 ");
2321 stringStreamOutCallback(StringUtils::SizeTToString(pGreaterThanInt32Op
->lhsPos
, stringBuffer
));
2322 stringStreamOutCallback(" ");
2323 stringStreamOutCallback(StringUtils::SizeTToString(pGreaterThanInt32Op
->rhsPos
, stringBuffer
));
2324 stringStreamOutCallback("\n");
2329 const size_t pos
= static_cast<const SVMBranchOp
*>(pOp
)->pos
;
2330 char stringBuffer
[StringUtils::s_sizeTStringBufferSize
] = "";
2331 stringStreamOutCallback("\tBRANCH ");
2332 stringStreamOutCallback(StringUtils::SizeTToString(pos
, stringBuffer
));
2333 stringStreamOutCallback("\n");
2336 case SVMOp::BRANCH_IF_ZERO
:
2338 const size_t pos
= static_cast<const SVMBranchIfZeroOp
*>(pOp
)->pos
;
2339 char stringBuffer
[StringUtils::s_sizeTStringBufferSize
] = "";
2340 stringStreamOutCallback("\tBRANCH_IF_ZERO ");
2341 stringStreamOutCallback(StringUtils::SizeTToString(pos
, stringBuffer
));
2342 stringStreamOutCallback("\n");
2345 case SVMOp::BRANCH_IF_NOT_ZERO
:
2347 const size_t pos
= static_cast<const SVMBranchIfNotZeroOp
*>(pOp
)->pos
;
2348 char stringBuffer
[StringUtils::s_sizeTStringBufferSize
] = "";
2349 stringStreamOutCallback("\tBRANCH_IF_NOT_ZERO ");
2350 stringStreamOutCallback(StringUtils::SizeTToString(pos
, stringBuffer
));
2351 stringStreamOutCallback("\n");
2354 case SVMOp::GET_OBJECT
:
2356 stringStreamOutCallback("\tGET_OBJECT\n");
2359 case SVMOp::START_TIMER
:
2361 // #SchematycTODO : Can we get to the timer's name from here?
2362 char guidString
[StringUtils::s_guidStringBufferSize
] = "";
2363 StringUtils::SysGUIDToString(static_cast<const SVMStartTimerOp
*>(pOp
)->guid
.sysGUID
, guidString
);
2364 stringStreamOutCallback("\tSTART_TIMER ");
2365 stringStreamOutCallback(guidString
);
2366 stringStreamOutCallback("\n");
2369 case SVMOp::STOP_TIMER
:
2371 // #SchematycTODO : Can we get to the timer's name from here?
2372 char guidString
[StringUtils::s_guidStringBufferSize
] = "";
2373 StringUtils::SysGUIDToString(static_cast<const SVMStopTimerOp
*>(pOp
)->guid
.sysGUID
, guidString
);
2374 stringStreamOutCallback("\tSTOP_TIMER ");
2375 stringStreamOutCallback(guidString
);
2376 stringStreamOutCallback("\n");
2379 case SVMOp::SEND_SIGNAL
:
2381 const SVMSendSignalOp
* pSendSignalOp
= static_cast<const SVMSendSignalOp
*>(pOp
);
2382 stringStreamOutCallback("\tSEND_SIGNAL ");
2383 if(ISignalConstPtr pSignal
= gEnv
->pSchematyc2
->GetLibRegistry().GetSignal(pSendSignalOp
->guid
))
2385 stringStreamOutCallback(pSignal
->GetName());
2386 stringStreamOutCallback("\n");
2390 stringStreamOutCallback("?\n");
2394 case SVMOp::BROADCAST_SIGNAL
:
2396 const SVMBroadcastSignalOp
* pBroadcastSignalOp
= static_cast<const SVMBroadcastSignalOp
*>(pOp
);
2397 stringStreamOutCallback("\tBROADCAST_SIGNAL ");
2398 if(ISignalConstPtr pSignal
= gEnv
->pSchematyc2
->GetLibRegistry().GetSignal(pBroadcastSignalOp
->guid
))
2400 stringStreamOutCallback(pSignal
->GetName());
2401 stringStreamOutCallback("\n");
2405 stringStreamOutCallback("?\n");
2409 case SVMOp::CALL_GLOBAL_FUNCTION
:
2411 const SVMCallGlobalFunctionOp
* pCallGlobalFunctionOp
= static_cast<const SVMCallGlobalFunctionOp
*>(pOp
);
2412 IGlobalFunctionConstPtr pFunction
= function
.GetGlobalFunctionTable()[pCallGlobalFunctionOp
->iGlobalFunction
];
2413 stringStreamOutCallback("\tCALL_GLOBAL_FUNCTION ");
2414 stringStreamOutCallback(pFunction
->GetName());
2415 stringStreamOutCallback("\n");
2418 case SVMOp::CALL_ENV_ABSTRACT_INTERFACE_FUNCTION
:
2420 const SVMCallEnvAbstractInterfaceFunctionOp
* pCallEnvAbstractInterfaceFunctionOp
= static_cast<const SVMCallEnvAbstractInterfaceFunctionOp
*>(pOp
);
2421 stringStreamOutCallback("\tCALL_ENV_ABSTRACT_INTERFACE_FUNCTION ");
2422 if(IAbstractInterfaceConstPtr pAbstractInterface
= gEnv
->pSchematyc2
->GetEnvRegistry().GetAbstractInterface(pCallEnvAbstractInterfaceFunctionOp
->abstractInterfaceGUID
))
2424 stringStreamOutCallback(pAbstractInterface
->GetName());
2428 stringStreamOutCallback("?");
2430 stringStreamOutCallback(" ");
2431 if(IAbstractInterfaceFunctionConstPtr pFunction
= gEnv
->pSchematyc2
->GetEnvRegistry().GetAbstractInterfaceFunction(pCallEnvAbstractInterfaceFunctionOp
->functionGUID
))
2433 stringStreamOutCallback(pFunction
->GetName());
2437 stringStreamOutCallback("?");
2439 stringStreamOutCallback("\n");
2442 case SVMOp::CALL_LIB_ABSTRACT_INTERFACE_FUNCTION
:
2444 const SVMCallLibAbstractInterfaceFunctionOp
* pCallLibAbstractInterfaceFunctionOp
= static_cast<const SVMCallLibAbstractInterfaceFunctionOp
*>(pOp
);
2445 stringStreamOutCallback("\tCALL_LIB_ABSTRACT_INTERFACE_FUNCTION ");
2446 if(ILibAbstractInterfaceConstPtr pAbstractInterface
= gEnv
->pSchematyc2
->GetLibRegistry().GetAbstractInterface(pCallLibAbstractInterfaceFunctionOp
->abstractInterfaceGUID
))
2448 stringStreamOutCallback(pAbstractInterface
->GetName());
2452 stringStreamOutCallback("?");
2454 stringStreamOutCallback(" ");
2455 if(ILibAbstractInterfaceFunctionConstPtr pFunction
= gEnv
->pSchematyc2
->GetLibRegistry().GetAbstractInterfaceFunction(pCallLibAbstractInterfaceFunctionOp
->functionGUID
))
2457 stringStreamOutCallback(pFunction
->GetName());
2461 stringStreamOutCallback("?");
2463 stringStreamOutCallback("\n");
2466 case SVMOp::CALL_COMPONENT_MEMBER_FUNCTION
:
2468 const SVMCallComponentMemberFunctionOp
* pCallComponentMemberFunctionOp
= static_cast<const SVMCallComponentMemberFunctionOp
*>(pOp
);
2469 IComponentMemberFunctionConstPtr pFunction
= function
.GetComponentMemberFunctionTable()[pCallComponentMemberFunctionOp
->iComponentMemberFunction
];
2470 stringStreamOutCallback("\tCALL_COMPONENT_MEMBER_FUNCTION ");
2471 stringStreamOutCallback(pFunction
->GetName());
2472 stringStreamOutCallback("\n");
2475 case SVMOp::CALL_ACTION_MEMBER_FUNCTION
:
2477 const SVMCallActionMemberFunctionOp
* pCallActionMemberFunctionOp
= static_cast<const SVMCallActionMemberFunctionOp
*>(pOp
);
2478 IActionMemberFunctionConstPtr pFunction
= function
.GetActionMemberFunctionTable()[pCallActionMemberFunctionOp
->iActionMemberFunction
];
2479 stringStreamOutCallback("\tCALL_ACTION_MEMBER_FUNCTION ");
2480 stringStreamOutCallback(pFunction
->GetName());
2481 stringStreamOutCallback("\n");
2484 case SVMOp::CALL_LIB_FUNCTION
:
2486 stringStreamOutCallback("\tCALL_LIB_FUNCTION ");
2487 const SVMCallLibFunctionOp
* pCallLibFunctionOp
= static_cast<const SVMCallLibFunctionOp
*>(pOp
);
2488 if(const ILibFunction
* pFunction
= GetFunction(pCallLibFunctionOp
->functionId
))
2490 stringStreamOutCallback(pFunction
->GetName());
2491 stringStreamOutCallback("\n");
2495 stringStreamOutCallback("?\n");
2501 stringStreamOutCallback("\tRETURN\n");
2505 functionPos
+= pOp
->size
;
2507 stringStreamOutCallback("\nend\n\n");
2511 //////////////////////////////////////////////////////////////////////////
2512 CLib::CLib(const char* name
)
2516 //////////////////////////////////////////////////////////////////////////
2517 const char* CLib::GetName() const
2519 return m_name
.c_str();
2522 //////////////////////////////////////////////////////////////////////////
2523 ISignalConstPtr
CLib::GetSignal(const SGUID
& guid
) const
2525 TSignalMap::const_iterator iSignal
= m_signals
.find(guid
);
2526 return iSignal
!= m_signals
.end() ? iSignal
->second
: ISignalConstPtr();
2529 //////////////////////////////////////////////////////////////////////////
2530 void CLib::VisitSignals(const LibSignalVisitor
& visitor
)
2532 CRY_ASSERT(visitor
);
2535 for(TSignalMap::iterator iSignal
= m_signals
.begin(), iEndSignal
= m_signals
.end(); iSignal
!= iEndSignal
; ++ iSignal
)
2537 if(visitor(iSignal
->second
) != EVisitStatus::Continue
)
2545 //////////////////////////////////////////////////////////////////////////
2546 ILibAbstractInterfaceConstPtr
CLib::GetAbstractInterface(const SGUID
& guid
) const
2548 TAbstractInterfaceMap::const_iterator iAbstractInterface
= m_abstractInterfaces
.find(guid
);
2549 return iAbstractInterface
!= m_abstractInterfaces
.end() ? iAbstractInterface
->second
: ILibAbstractInterfaceConstPtr();
2552 //////////////////////////////////////////////////////////////////////////
2553 void CLib::VisitAbstractInterfaces(const ILibAbstractInterfaceVisitor
& visitor
)
2555 CRY_ASSERT(visitor
);
2558 for(TAbstractInterfaceMap::iterator iAbstractInterface
= m_abstractInterfaces
.begin(), iEndAbstractInterface
= m_abstractInterfaces
.end(); iAbstractInterface
!= iEndAbstractInterface
; ++ iAbstractInterface
)
2560 if(visitor(iAbstractInterface
->second
) != EVisitStatus::Continue
)
2568 //////////////////////////////////////////////////////////////////////////
2569 ILibAbstractInterfaceFunctionConstPtr
CLib::GetAbstractInterfaceFunction(const SGUID
& guid
) const
2571 TAbstractInterfaceFunctionMap::const_iterator iAbstractInterfaceFunction
= m_abstractInterfaceFunctions
.find(guid
);
2572 return iAbstractInterfaceFunction
!= m_abstractInterfaceFunctions
.end() ? iAbstractInterfaceFunction
->second
: ILibAbstractInterfaceFunctionConstPtr();
2575 //////////////////////////////////////////////////////////////////////////
2576 void CLib::VisitAbstractInterfaceFunctions(const ILibAbstractInterfaceFunctionVisitor
& visitor
)
2578 CRY_ASSERT(visitor
);
2581 for(TAbstractInterfaceFunctionMap::iterator iAbstractInterfaceFunction
= m_abstractInterfaceFunctions
.begin(), iEndAbstractInterfaceFunction
= m_abstractInterfaceFunctions
.end(); iAbstractInterfaceFunction
!= iEndAbstractInterfaceFunction
; ++ iAbstractInterfaceFunction
)
2583 if(visitor(iAbstractInterfaceFunction
->second
) != EVisitStatus::Continue
)
2591 //////////////////////////////////////////////////////////////////////////
2592 ILibClassConstPtr
CLib::GetClass(const SGUID
& guid
) const
2594 TClassMap::const_iterator iClass
= m_classes
.find(guid
);
2595 return iClass
!= m_classes
.end() ? iClass
->second
: ILibClassConstPtr();
2598 //////////////////////////////////////////////////////////////////////////
2599 void CLib::VisitClasses(const ILibClassVisitor
& visitor
) const
2601 CRY_ASSERT(visitor
);
2604 for(TClassMap::const_iterator iClass
= m_classes
.begin(), iEndClass
= m_classes
.end(); iClass
!= iEndClass
; ++ iClass
)
2606 if(visitor(iClass
->second
) != EVisitStatus::Continue
)
2614 //////////////////////////////////////////////////////////////////////////
2615 void CLib::PreviewGraphFunctions(const SGUID
& graphGUID
, const StringStreamOutCallback
& stringStreamOutCallback
) const
2617 for(TClassMap::const_iterator iClass
= m_classes
.begin(), iEndClass
= m_classes
.end(); iClass
!= iEndClass
; ++ iClass
)
2619 iClass
->second
->PreviewGraphFunctions(graphGUID
, stringStreamOutCallback
);
2623 //////////////////////////////////////////////////////////////////////////
2624 CSignalPtr
CLib::AddSignal(const SGUID
& guid
, const SGUID
& senderGUID
, const char* name
)
2626 if(GetSignal(guid
) == NULL
)
2628 CSignalPtr
pSignal(new CSignal(guid
, senderGUID
, name
));
2629 m_signals
.insert(TSignalMap::value_type(guid
, pSignal
));
2632 return CSignalPtr();
2635 //////////////////////////////////////////////////////////////////////////
2636 CSignalPtr
CLib::GetSignal(const SGUID
& guid
)
2638 TSignalMap::iterator iSignal
= m_signals
.find(guid
);
2639 return iSignal
!= m_signals
.end() ? iSignal
->second
: CSignalPtr();
2642 //////////////////////////////////////////////////////////////////////////
2643 CLibAbstractInterfacePtr
CLib::AddAbstractInterface(const SGUID
& guid
, const char* name
)
2645 if(!GetAbstractInterface(guid
))
2647 CLibAbstractInterfacePtr
pAbstractInterface(new CLibAbstractInterface(guid
, name
));
2648 m_abstractInterfaces
.insert(TAbstractInterfaceMap::value_type(guid
, pAbstractInterface
));
2649 return pAbstractInterface
;
2651 return CLibAbstractInterfacePtr();
2654 //////////////////////////////////////////////////////////////////////////
2655 CLibAbstractInterfacePtr
CLib::GetAbstractInterface(const SGUID
& guid
)
2657 TAbstractInterfaceMap::iterator iAbstractInterface
= m_abstractInterfaces
.find(guid
);
2658 return iAbstractInterface
!= m_abstractInterfaces
.end() ? iAbstractInterface
->second
: CLibAbstractInterfacePtr();
2661 //////////////////////////////////////////////////////////////////////////
2662 CLibAbstractInterfaceFunctionPtr
CLib::AddAbstractInterfaceFunction(const SGUID
& guid
, const char* name
)
2664 if(!GetAbstractInterfaceFunction(guid
))
2666 CLibAbstractInterfaceFunctionPtr
pAbstractInterfaceFunction(new CLibAbstractInterfaceFunction(guid
, name
));
2667 m_abstractInterfaceFunctions
.insert(TAbstractInterfaceFunctionMap::value_type(guid
, pAbstractInterfaceFunction
));
2668 return pAbstractInterfaceFunction
;
2670 return CLibAbstractInterfaceFunctionPtr();
2673 //////////////////////////////////////////////////////////////////////////
2674 CLibAbstractInterfaceFunctionPtr
CLib::GetAbstractInterfaceFunction(const SGUID
& guid
)
2676 TAbstractInterfaceFunctionMap::iterator iAbstractInterfaceFunction
= m_abstractInterfaceFunctions
.find(guid
);
2677 return iAbstractInterfaceFunction
!= m_abstractInterfaceFunctions
.end() ? iAbstractInterfaceFunction
->second
: CLibAbstractInterfaceFunctionPtr();
2680 //////////////////////////////////////////////////////////////////////////
2681 CLibClassPtr
CLib::AddClass(const SGUID
& guid
, const char* name
, const SGUID
& foundationGUID
, const IPropertiesConstPtr
& pFoundationProperties
)
2685 CLibClassPtr
pClass(new CLibClass(*this, guid
, name
, foundationGUID
, pFoundationProperties
));
2686 m_classes
.insert(TClassMap::value_type(guid
, pClass
));
2689 return CLibClassPtr();
2692 //////////////////////////////////////////////////////////////////////////
2693 CLibClassPtr
CLib::GetClass(const SGUID
& guid
)
2695 TClassMap::iterator iClass
= m_classes
.find(guid
);
2696 return iClass
!= m_classes
.end() ? iClass
->second
: CLibClassPtr();
2699 //////////////////////////////////////////////////////////////////////////
2700 void CLib::CompactMemory()
2702 for (TClassMap::value_type
& classPair
: m_classes
)
2704 classPair
.second
->CompactMemory();