diff options
author | chai <chaifix@163.com> | 2019-08-14 22:50:43 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-08-14 22:50:43 +0800 |
commit | 15740faf9fe9fe4be08965098bbf2947e096aeeb (patch) | |
tree | a730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Mono/MonoScriptCache.h |
Diffstat (limited to 'Runtime/Mono/MonoScriptCache.h')
-rw-r--r-- | Runtime/Mono/MonoScriptCache.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/Runtime/Mono/MonoScriptCache.h b/Runtime/Mono/MonoScriptCache.h new file mode 100644 index 0000000..04271ae --- /dev/null +++ b/Runtime/Mono/MonoScriptCache.h @@ -0,0 +1,50 @@ +#pragma once + +#include "Runtime/Scripting/Backend/ScriptingTypes.h" +#include "Runtime/Threads/AtomicRefCounter.h" +#include "Runtime/Utilities/CStringHash.h" +#include "Runtime/Utilities/dynamic_array.h" +#include "MonoScriptType.h" + +struct CommonScriptingClasses; + + +// A refcounted constant method cache for the MonoBehaviour. +// When creating the MonoScript it precomputes all available methods etc. +// The data is shared in this class. +// It is refcounted, in case the MonoSript is deleted before the MonoBehaviour is destroyed. + +struct MonoScriptCache +{ + typedef std::map<const char*, ScriptingMethodPtr, compare_cstring> MethodCache; + + enum { kUpdate = 0, kLateUpdate, kFixedUpdate, kAwake, kStart, kMain, kRenderObject, kAddToManager, kRemoveFromManager, kRemoveFromManagerInternal, kCoroutineStart, kCoroutineMain, kRenderImageFilter, kDrawGizmos, kGUI, kValidateProperties, kSerializeNetView, kNetworkInstantiate, kOnDestroy, kAudioFilterRead, kMethodCount }; + + AtomicRefCounter refCount; + ScriptingClassPtr klass; + dynamic_array<ScriptingMethodPtr> methods; + MethodCache methodCache; + MonoScriptType scriptType; + const char* className; + + #if UNITY_EDITOR + bool scriptTypeWasJustCreatedFromComponentMenu; + bool runInEditMode; + #endif + + + MonoScriptCache (); + ~MonoScriptCache (); + + void Release () const; + void Retain () const; +}; + +ScriptingMethodPtr FindMethod (const MonoScriptCache& cache, const char* name); + +typedef void RegisterMonoRPCCallback (const char* name); +void RegisterMonoRPC (RegisterMonoRPCCallback* callback); +MonoScriptCache* CreateMonoScriptCache (ScriptingTypePtr klass, bool isEditorScript, Object* errorContext); + +bool IsValidScriptType(MonoScriptType type); +std::string FormatScriptTypeError(MonoScriptType type, const std::string& fileName); |