From 15740faf9fe9fe4be08965098bbf2947e096aeeb Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 14 Aug 2019 22:50:43 +0800 Subject: +Unity Runtime code --- .../Scripting/Backend/ScriptingMethodRegistry.h | 60 ++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Runtime/Scripting/Backend/ScriptingMethodRegistry.h (limited to 'Runtime/Scripting/Backend/ScriptingMethodRegistry.h') diff --git a/Runtime/Scripting/Backend/ScriptingMethodRegistry.h b/Runtime/Scripting/Backend/ScriptingMethodRegistry.h new file mode 100644 index 0000000..82d7e40 --- /dev/null +++ b/Runtime/Scripting/Backend/ScriptingMethodRegistry.h @@ -0,0 +1,60 @@ +#ifndef _SCRIPTINGMETHODREGISTRY_H_ +#define _SCRIPTINGMETHODREGISTRY_H_ + +#if ENABLE_SCRIPTING +#include "ScriptingTypes.h" + +#include +#include +#include + +class IScriptingMethodFactory; +class ScriptingTypeRegistry; + +class ScriptingMethodRegistry +{ +public: + ScriptingMethodRegistry(IScriptingMethodFactory* scriptingMethodFactory, ScriptingTypeRegistry* scriptingTypeRegistry); + ~ScriptingMethodRegistry() {InvalidateCache();} + + enum SearchFilter + { + kNone = 0, + kInstanceOnly = 1, + kStaticOnly = 2, + kWithoutArguments = 4, + kDontSearchBaseTypes = 8, + }; + + ScriptingMethodPtr GetMethod(const char* namespaze, const char* klassName, const char* methodName, int searchOptions=kNone); + ScriptingMethodPtr GetMethod(ScriptingTypePtr klass, const char* methodName, int searchOptions=kNone); + ScriptingMethodPtr GetMethod(BackendNativeMethod nativeMathod); + + void AllMethodsIn(ScriptingTypePtr klass, std::vector& result, int searchOptions=kNone); + + void InvalidateCache(); + +private: + typedef std::vector VectorOfMethods; + typedef std::map< std::string,VectorOfMethods > MethodsByName; + typedef std::map ClassToMethodsByName; + typedef std::map NativeMethodToScriptingMethod; + typedef std::set MethodsSet; + + ClassToMethodsByName m_Cache; + + + NativeMethodToScriptingMethod m_NativeMethodToScriptingMethod; + + IScriptingMethodFactory* m_ScriptingMethodFactory; + ScriptingTypeRegistry* m_ScriptingTypeRegistry; + + ScriptingMethodPtr FindInCache(ScriptingTypePtr klass, const char* name, int searchFilter, bool* out_found); + void PlaceInCache(ScriptingTypePtr klass, const char* name, ScriptingMethodPtr method); + MethodsByName* FindMethodsByNameFor(ScriptingTypePtr klass); +}; + +bool MethodDescriptionMatchesSearchFilter(int searchFilter, bool isInstance, int argCount); +#endif + +#endif \ No newline at end of file -- cgit v1.1-26-g67d0