#ifndef _ASW_INTERFACE_H_ #define _ASW_INTERFACE_H_ #include "asw/templates/cache.h" #include "asw/script/object.h" namespace ASW { namespace Script { // Represents an interface between the game engine and script code class Interface { protected: typedef UTIL::Container StringBuffer; typedef ASW::Cache CacheStrings; typedef ASW::Cache CacheParameters; CacheStrings m_clsCacheStrings; CacheParameters m_clsCacheParameters; // Helper function to cache string data outside script memory to // avoid access violations template TCHAR * GetString(const T * ptrString, CacheStrings::ProxyList & refProxy) { StringBuffer & refBuffer = refProxy.GetNew(); refBuffer.RemoveAll(false); const TCHAR * ptrStringConverted = UTIL::Convert(ptrString); unsigned int uintLength = UTIL::Length(ptrStringConverted) + 1; refBuffer.Reserve(uintLength); refBuffer.Add(ptrStringConverted, uintLength); return refBuffer.ItemRef(0); } public: virtual ~Interface() {} virtual void Call(const ASW::Script::Function &) = 0; virtual void Call(const ASW::Script::Object &, const ASW::Script::MethodScript &, ASW::Script::Variant &) = 0; virtual void Call(const ASW::Script::Object &, const ASW::Script::MethodScript &, const ASW::Script::Parameter &) = 0; virtual void Call(const ASW::Script::Object &, const ASW::Script::MethodScript &, const ASW::Script::Parameter &, Variant &) = 0; virtual void Call(const ASW::Script::Object &, const ASW::Script::MethodScript &, const ASW::Script::Parameter::Container *, ASW::Script::Parameter::List *, const int) = 0; virtual void Register(const ASW::Script::Object &, const TCHAR *) = 0; virtual void Unregister(const ASW::Script::Function &) = 0; virtual void Unregister(const ASW::Script::MethodScript &) = 0; virtual void Unregister(const ASW::Script::Object &) = 0; }; void SetInterface(Interface *); } } #endif