Browse Source

Added a search cache for engine API AngelScript object types.

Lasse Öörni 14 years ago
parent
commit
e5867952a9

+ 6 - 8
Engine/Engine/APITemplates.h

@@ -25,9 +25,11 @@
 
 #include "Addons.h"
 #include "BorderImage.h"
+#include "Context.h"
 #include "Drawable.h"
 #include "File.h"
 #include "Resource.h"
+#include "Script.h"
 #include "ScriptInstance.h"
 #include "SoundSource.h"
 #include "Texture.h"
@@ -63,8 +65,7 @@ template <class T> CScriptArray* VectorToArray(const std::vector<T>& vector, con
     asIScriptContext *context = asGetActiveContext();
     if (context)
     {
-        asIScriptEngine* engine = context->GetEngine();
-        asIObjectType* type = engine->GetObjectTypeById(engine->GetTypeIdByDecl(arrayName));
+        asIObjectType* type = GetScriptContext()->GetSubsystem<Script>()->GetObjectType(arrayName);
         CScriptArray* arr = new CScriptArray(vector.size(), type);
         
         for (unsigned i = 0; i < arr->GetSize(); ++i)
@@ -82,8 +83,7 @@ template <class T> CScriptArray* VectorToHandleArray(const std::vector<T*>& vect
     asIScriptContext *context = asGetActiveContext();
     if (context)
     {
-        asIScriptEngine* engine = context->GetEngine();
-        asIObjectType* type = engine->GetObjectTypeById(engine->GetTypeIdByDecl(arrayName));
+        asIObjectType* type = GetScriptContext()->GetSubsystem<Script>()->GetObjectType(arrayName);
         CScriptArray* arr = new CScriptArray(vector.size(), type);
         
         for (unsigned i = 0; i < arr->GetSize(); ++i)
@@ -106,8 +106,7 @@ template <class T> CScriptArray* SharedPtrVectorToHandleArray(const std::vector<
     asIScriptContext *context = asGetActiveContext();
     if (context)
     {
-        asIScriptEngine* engine = context->GetEngine();
-        asIObjectType* type = engine->GetObjectTypeById(engine->GetTypeIdByDecl(arrayName));
+        asIObjectType* type = GetScriptContext()->GetSubsystem<Script>()->GetObjectType(arrayName);
         CScriptArray* arr = new CScriptArray(vector.size(), type);
         
         for (unsigned i = 0; i < arr->GetSize(); ++i)
@@ -130,8 +129,7 @@ template <class T> CScriptArray* SetToArray(const std::set<T>& set, const char*
     asIScriptContext *context = asGetActiveContext();
     if (context)
     {
-        asIScriptEngine* engine = context->GetEngine();
-        asIObjectType* type = engine->GetObjectTypeById(engine->GetTypeIdByDecl(arrayName));
+        asIObjectType* type = GetScriptContext()->GetSubsystem<Script>()->GetObjectType(arrayName);
         CScriptArray* arr = new CScriptArray(set.size(), type);
         
         unsigned index = 0;

+ 0 - 1
Engine/Engine/AudioAPI.cpp

@@ -24,7 +24,6 @@
 #include "Precompiled.h"
 #include "APITemplates.h"
 #include "Audio.h"
-#include "Context.h"
 #include "Sound.h"
 #include "SoundSource3D.h"
 

+ 0 - 1
Engine/Engine/EngineAPI.cpp

@@ -24,7 +24,6 @@
 #include "Precompiled.h"
 #include "APITemplates.h"
 #include "Console.h"
-#include "Context.h"
 #include "DebugHud.h"
 #include "Engine.h"
 

+ 0 - 1
Engine/Engine/GraphicsAPI.cpp

@@ -28,7 +28,6 @@
 #include "AnimationState.h"
 #include "APITemplates.h"
 #include "Camera.h"
-#include "Context.h"
 #include "DebugRenderer.h"
 #include "Graphics.h"
 #include "Light.h"

+ 0 - 1
Engine/Engine/IOAPI.cpp

@@ -23,7 +23,6 @@
 
 #include "Precompiled.h"
 #include "APITemplates.h"
-#include "Context.h"
 #include "FileSystem.h"
 #include "Log.h"
 #include "PackageFile.h"

+ 0 - 1
Engine/Engine/InputAPI.cpp

@@ -23,7 +23,6 @@
 
 #include "Precompiled.h"
 #include "APITemplates.h"
-#include "Context.h"
 #include "Controls.h"
 #include "Input.h"
 

+ 0 - 1
Engine/Engine/NetworkAPI.cpp

@@ -23,7 +23,6 @@
 
 #include "Precompiled.h"
 #include "APITemplates.h"
-#include "Context.h"
 #include "Network.h"
 #include "Peer.h"
 

+ 0 - 1
Engine/Engine/PhysicsAPI.cpp

@@ -24,7 +24,6 @@
 #include "Precompiled.h"
 #include "APITemplates.h"
 #include "CollisionShape.h"
-#include "Context.h"
 #include "Joint.h"
 #include "PhysicsWorld.h"
 #include "RigidBody.h"

+ 0 - 1
Engine/Engine/ResourceAPI.cpp

@@ -23,7 +23,6 @@
 
 #include "Precompiled.h"
 #include "APITemplates.h"
-#include "Context.h"
 #include "ResourceCache.h"
 
 void ArrayToVariantVector(CScriptArray* arr, VariantVector& dest);

+ 0 - 2
Engine/Engine/ScriptAPI.cpp

@@ -23,9 +23,7 @@
 
 #include "Precompiled.h"
 #include "APITemplates.h"
-#include "Context.h"
 #include "ResourceCache.h"
-#include "Script.h"
 #include "ScriptAPI.h"
 #include "ScriptFile.h"
 

+ 0 - 1
Engine/Engine/UIAPI.cpp

@@ -24,7 +24,6 @@
 #include "Precompiled.h"
 #include "APITemplates.h"
 #include "CheckBox.h"
-#include "Context.h"
 #include "Cursor.h"
 #include "DropDownList.h"
 #include "FileSelector.h"

+ 11 - 0
Engine/Script/Script.cpp

@@ -408,6 +408,17 @@ Scene* Script::GetDefaultScene() const
     return defaultScene_;
 }
 
+asIObjectType* Script::GetObjectType(const char* declaration)
+{
+    std::map<const char*, asIObjectType*>::const_iterator i = objectTypes_.find(declaration);
+    if (i != objectTypes_.end())
+        return i->second;
+    
+    asIObjectType* type = scriptEngine_->GetObjectTypeById(scriptEngine_->GetTypeIdByDecl(declaration));
+    objectTypes_[declaration] = type;
+    return type;
+}
+
 void Script::OutputAPIRow(const std::string& row, bool removeReference)
 {
     std::string out = row;

+ 5 - 0
Engine/Script/Script.h

@@ -28,6 +28,7 @@
 class Scene;
 class ScriptFile;
 class ScriptInstance;
+class asIObjectType;
 class asIScriptContext;
 class asIScriptEngine;
 class asIScriptModule;
@@ -84,6 +85,8 @@ public:
     ScriptFile* GetDefaultScriptFile() const;
     /// Return immediate mode scene
     Scene* GetDefaultScene() const;
+    /// Query for an inbuilt object type by constant declaration. Can not be used for script types
+    asIObjectType* GetObjectType(const char* declaration);
     /// Return logging mode
     ScriptLogMode GetLogMode() const { return logMode_; }
     /// Return retained mode log messages
@@ -118,6 +121,8 @@ private:
     std::map<asIScriptModule*, ScriptFile*> moduleMap_;
     /// Map of script objects to script instance components
     std::map<void*, ScriptInstance*> objectMap_;
+    /// Search cache for inbuilt object types (constant declaration)
+    std::map<const char*, asIObjectType*> objectTypes_;
     /// Script engine logging mode
     ScriptLogMode logMode_;
     /// Retained mode log messages

+ 1 - 1
Engine/UI/Font.cpp

@@ -37,7 +37,7 @@
 
 #include "DebugNew.h"
 
-/// Holder for the FreeType library
+/// FreeType library subsystem
 class FreeTypeLibrary : public Object
 {
     OBJECT(FreeTypeLibrary);