// // Copyright (c) 2008-2020 the Urho3D project. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // #include "../Precompiled.h" #include "../AngelScript/APITemplates.h" #include "../AngelScript/Manual_Core.h" namespace Urho3D { // This function is called before ASRegisterGenerated() void ASRegisterManualFirst_Core(asIScriptEngine* engine) { // using VariantMap = HashMap | File: ../Core/Variant.h engine->RegisterObjectType("VariantMap", sizeof(VariantMap), asOBJ_VALUE | asGetTypeTraits()); // WeakPtr | File: ../Container/Ptr.h engine->RegisterObjectType("WeakHandle", sizeof(WeakPtr), asOBJ_VALUE | asOBJ_APP_CLASS_CDAK); } // ======================================================================================== // using VariantMap = HashMap | File: ../Core/Variant.h // HashMap::HashMap()| File: ../Container/HashMap.h static void ConstructVariantMap(VariantMap* ptr) { new(ptr) VariantMap(); } // using VariantMap = HashMap | File: ../Core/Variant.h // HashMap::HashMap(const HashMap& map) | File: ../Container/HashMap.h static void ConstructVariantMapCopy(const VariantMap& map, VariantMap* ptr) { new(ptr) VariantMap(map); } // using VariantMap = HashMap | File: ../Core/Variant.h // HashMap::~HashMap() | File: ../Container/HashMap.h static void DestructVariantMap(VariantMap* ptr) { ptr->~VariantMap(); } // using VariantMap = HashMap | File: ../Core/Variant.h // U& HashMap::operator [](const T& key) | File: ../Container/HashMap.h static Variant& VariantMapAtHash(StringHash key, VariantMap& map) { return map[key]; } // using VariantMap = HashMap | File: ../Core/Variant.h // bool HashMap::Contains(const T& key) const | File: ../Container/HashMap.h static bool VariantMapContainsHash(StringHash key, VariantMap& map) { return map.Contains(key); } // using VariantMap = HashMap | File: ../Core/Variant.h // bool HashMap::Erase(const T& key) | File: ../Container/HashMap.h static bool VariantMapEraseHash(StringHash key, VariantMap& map) { return map.Erase(key); } // using VariantMap = HashMap | File: ../Core/Variant.h // Vector HashMap::Keys() const | File: ../Container/HashMap.h static CScriptArray* VariantMapGetKeys(const VariantMap& map) { return VectorToArray(map.Keys(), "Array"); } // using VariantMap = HashMap | File: ../Core/Variant.h // Vector HashMap::Values() const | File: ../Container/HashMap.h static CScriptArray* VariantMapGetValues(const VariantMap& map) { return VectorToArray(map.Values(), "Array"); } static void RegisterVariantMap(asIScriptEngine* engine) { // using VariantMap = HashMap | File: ../Core/Variant.h // unsigned HashBase::Size() const | File: ../Container/HashBase.h engine->RegisterObjectMethod("VariantMap", "uint get_length() const", asMETHOD(VariantMap, Size), asCALL_THISCALL); // using VariantMap = HashMap | File: ../Core/Variant.h // void HashMap::Clear() | File: ../Container/HashMap.h engine->RegisterObjectMethod("VariantMap", "void Clear()", asMETHOD(VariantMap, Clear), asCALL_THISCALL); // using VariantMap = HashMap | File: ../Core/Variant.h // HashMap& operator =(const HashMap& rhs) | File: ../Container/HashMap.h engine->RegisterObjectMethod("VariantMap", "VariantMap& opAssign(const VariantMap&in)", asMETHODPR(VariantMap, operator =, (const VariantMap&), VariantMap&), asCALL_THISCALL); // using VariantMap = HashMap | File: ../Core/Variant.h // HashMap::HashMap()| File: ../Container/HashMap.h engine->RegisterObjectBehaviour("VariantMap", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(ConstructVariantMap), asCALL_CDECL_OBJLAST); // using VariantMap = HashMap | File: ../Core/Variant.h // HashMap::HashMap(const HashMap& map) | File: ../Container/HashMap.h engine->RegisterObjectBehaviour("VariantMap", asBEHAVE_CONSTRUCT, "void f(const VariantMap&in)", asFUNCTION(ConstructVariantMapCopy), asCALL_CDECL_OBJLAST); // using VariantMap = HashMap | File: ../Core/Variant.h // HashMap::~HashMap() | File: ../Container/HashMap.h engine->RegisterObjectBehaviour("VariantMap", asBEHAVE_DESTRUCT, "void f()", asFUNCTION(DestructVariantMap), asCALL_CDECL_OBJLAST); // using VariantMap = HashMap | File: ../Core/Variant.h // U& HashMap::operator [](const T& key) | File: ../Container/HashMap.h engine->RegisterObjectMethod("VariantMap", "Variant& opIndex(StringHash)", asFUNCTION(VariantMapAtHash), asCALL_CDECL_OBJLAST); // using VariantMap = HashMap | File: ../Core/Variant.h // bool HashMap::Contains(const T& key) const | File: ../Container/HashMap.h engine->RegisterObjectMethod("VariantMap", "bool Contains(StringHash) const", asFUNCTION(VariantMapContainsHash), asCALL_CDECL_OBJLAST); // using VariantMap = HashMap | File: ../Core/Variant.h // bool HashMap::Erase(const T& key) | File: ../Container/HashMap.h engine->RegisterObjectMethod("VariantMap", "bool Erase(StringHash)", asFUNCTION(VariantMapEraseHash), asCALL_CDECL_OBJLAST); // using VariantMap = HashMap | File: ../Core/Variant.h // Vector HashMap::Keys() const | File: ../Container/HashMap.h engine->RegisterObjectMethod("VariantMap", "Array@ get_keys() const", asFUNCTION(VariantMapGetKeys), asCALL_CDECL_OBJLAST); // using VariantMap = HashMap | File: ../Core/Variant.h // Vector HashMap::Values() const | File: ../Container/HashMap.h engine->RegisterObjectMethod("VariantMap", "Array@ get_values() const", asFUNCTION(VariantMapGetValues), asCALL_CDECL_OBJLAST); } // ======================================================================================== // WeakPtr | File: ../Container/Ptr.h // WeakPtr::WeakPtr() noexcept | File: ../Container/Ptr.h static void ConstructWeakHandle(WeakPtr* ptr) { new(ptr) WeakPtr(); } // WeakPtr | File: ../Container/Ptr.h // WeakPtr::WeakPtr(const WeakPtr& rhs) noexcept | File: ../Container/Ptr.h static void ConstructWeakHandleCopy(const WeakPtr& src, WeakPtr* ptr) { new(ptr) WeakPtr(src); } // WeakPtr | File: ../Container/Ptr.h // explicit WeakPtr::WeakPtr(T* ptr) noexcept | File: ../Container/Ptr.h static void ConstructWeakHandlePtr(RefCounted* object, WeakPtr* ptr) { new(ptr) WeakPtr(object); } // WeakPtr | File: ../Container/Ptr.h // WeakPtr::~WeakPtr() noexcept | File: ../Container/Ptr.h static void DestructWeakHandle(WeakPtr* ptr) { ptr->~WeakPtr(); } static void RegisterWeakHandle(asIScriptEngine* engine) { // WeakPtr | File: ../Container/Ptr.h // WeakPtr::WeakPtr() noexcept | File: ../Container/Ptr.h engine->RegisterObjectBehaviour("WeakHandle", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(ConstructWeakHandle), asCALL_CDECL_OBJLAST); // WeakPtr | File: ../Container/Ptr.h // WeakPtr::WeakPtr(const WeakPtr& rhs) noexcept | File: ../Container/Ptr.h engine->RegisterObjectBehaviour("WeakHandle", asBEHAVE_CONSTRUCT, "void f(const WeakHandle&in)", asFUNCTION(ConstructWeakHandleCopy), asCALL_CDECL_OBJLAST); // WeakPtr | File: ../Container/Ptr.h // explicit WeakPtr::WeakPtr(T* ptr) noexcept | File: ../Container/Ptr.h engine->RegisterObjectBehaviour("WeakHandle", asBEHAVE_CONSTRUCT, "void f(RefCounted@+)", asFUNCTION(ConstructWeakHandlePtr), asCALL_CDECL_OBJLAST); // WeakPtr | File: ../Container/Ptr.h // WeakPtr::~WeakPtr() noexcept | File: ../Container/Ptr.h engine->RegisterObjectBehaviour("WeakHandle", asBEHAVE_DESTRUCT, "void f()", asFUNCTION(DestructWeakHandle), asCALL_CDECL_OBJLAST); // WeakPtr | File: ../Container/Ptr.h // WeakPtr& WeakPtr::operator =(const WeakPtr& rhs) | File: ../Container/Ptr.h engine->RegisterObjectMethod("WeakHandle", "WeakHandle& opAssign(const WeakHandle&in)", asMETHODPR(WeakPtr, operator =, (const WeakPtr&), WeakPtr&), asCALL_THISCALL); // WeakPtr | File: ../Container/Ptr.h // WeakPtr& WeakPtr::operator =(T* ptr) | File: ../Container/Ptr.h engine->RegisterObjectMethod("WeakHandle", "WeakHandle& opAssign(RefCounted@+)", asMETHODPR(WeakPtr, operator =, (RefCounted*), WeakPtr&), asCALL_THISCALL); // WeakPtr | File: ../Container/Ptr.h // T* WeakPtr::Get() const | File: ../Container/Ptr.h engine->RegisterObjectMethod("WeakHandle", "RefCounted@+ Get() const", asMETHODPR(WeakPtr, Get, () const, RefCounted*), asCALL_THISCALL); // WeakPtr | File: ../Container/Ptr.h // int WeakPtr::Refs() const | File: ../Container/Ptr.h engine->RegisterObjectMethod("WeakHandle", "int get_refs() const", asMETHOD(WeakPtr, Refs), asCALL_THISCALL); // WeakPtr | File: ../Container/Ptr.h // int WeakPtr::WeakRefs() const | File: ../Container/Ptr.h engine->RegisterObjectMethod("WeakHandle", "int get_weakRefs() const", asMETHOD(WeakPtr, WeakRefs), asCALL_THISCALL); // WeakPtr | File: ../Container/Ptr.h // bool WeakPtr::Expired() const | File: ../Container/Ptr.h engine->RegisterObjectMethod("WeakHandle", "bool get_expired() const", asMETHOD(WeakPtr, Expired), asCALL_THISCALL); } // ======================================================================================== void ArrayToVariantVector(CScriptArray* arr, VariantVector& dest); void ArrayToStringVector(CScriptArray* arr, StringVector& dest); // Variant::Variant(const VariantVector &value) | File: ../Core/Variant.h static void ConstructVariantVariantVector(CScriptArray* value, Variant* ptr) { VariantVector vector; ArrayToVariantVector(value, vector); new(ptr) Variant(vector); } // Variant::Variant(const StringVector &value) | File: ../Core/Variant.h static void ConstructVariantStringVector(CScriptArray* value, Variant* ptr) { StringVector vector; ArrayToStringVector(value, vector); new(ptr) Variant(vector); } // Variant& Variant::operator=(const VariantVector &rhs) | File: ../Core/Variant.h static Variant& VariantAssignVariantVector(CScriptArray* value, Variant* ptr) { VariantVector vector; ArrayToVariantVector(value, vector); *ptr = vector; return *ptr; } // Variant& Variant::operator=(const StringVector &rhs) | File: ../Core/Variant.h static Variant& VariantAssignStringVector(CScriptArray* value, Variant* ptr) { StringVector vector; ArrayToStringVector(value, vector); *ptr = vector; return *ptr; } // bool Variant::operator==(const VariantVector &rhs) const | File: ../Core/Variant.h static bool VariantEqualsVariantVector(CScriptArray* value, Variant* ptr) { VariantVector vector; ArrayToVariantVector(value, vector); return *ptr == vector; } // bool Variant::operator==(const StringVector &rhs) const | File: ../Core/Variant.h static bool VariantEqualsStringVector(CScriptArray* value, Variant* ptr) { StringVector vector; ArrayToStringVector(value, vector); return *ptr == vector; } // const VariantVector& Variant::GetVariantVector() const | File: ../Core/Variant.h static CScriptArray* VariantGetVariantVector(Variant* ptr) { return VectorToArray(ptr->GetVariantVector(), "Array"); } static void ConstructVariantScriptObject(asIScriptObject* value, Variant* ptr) { if (value) { asITypeInfo* scriptObjectInterface = value->GetEngine()->GetTypeInfoByName("ScriptObject"); if (value->GetObjectType()->Implements(scriptObjectInterface)) new(ptr) Variant(value); else new(ptr) Variant(); } else new(ptr) Variant(); } static asIScriptObject* VariantGetScriptObject(Variant* ptr) { auto* object = static_cast(ptr->GetVoidPtr()); if (!object) return nullptr; asITypeInfo* scriptObjectInterface = object->GetEngine()->GetTypeInfoByName("ScriptObject"); if (!object->GetObjectType()->Implements(scriptObjectInterface)) return nullptr; return object; } static void RegisterVariant(asIScriptEngine* engine) { engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f(ScriptObject@+)", asFUNCTION(ConstructVariantScriptObject), asCALL_CDECL_OBJLAST); engine->RegisterObjectMethod("Variant", "ScriptObject@+ GetScriptObject() const", asFUNCTION(VariantGetScriptObject), asCALL_CDECL_OBJLAST); // Variant& Variant::operator=(void *rhs) | File: ../Core/Variant.h engine->RegisterObjectMethod("Variant", "Variant& opAssign(ScriptObject@+)", asMETHODPR(Variant, operator =, (void*), Variant&), asCALL_THISCALL); // bool Variant::operator==(void *rhs) const | File: ../Core/Variant.h engine->RegisterObjectMethod("Variant", "bool opEquals(ScriptObject@+) const", asMETHODPR(Variant, operator ==, (void*) const, bool), asCALL_THISCALL); // Variant::Variant(const VariantVector &value) | File: ../Core/Variant.h engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f(const Array@+)", asFUNCTION(ConstructVariantVariantVector), asCALL_CDECL_OBJLAST); // Variant::Variant(const StringVector &value) | File: ../Core/Variant.h engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f(const Array@+)", asFUNCTION(ConstructVariantStringVector), asCALL_CDECL_OBJLAST); // Variant& Variant::operator=(const VariantVector &rhs) | File: ../Core/Variant.h engine->RegisterObjectMethod("Variant", "Variant& opAssign(const Array@+)", asFUNCTION(VariantAssignVariantVector), asCALL_CDECL_OBJLAST); // Variant& Variant::operator=(const StringVector &rhs) | File: ../Core/Variant.h engine->RegisterObjectMethod("Variant", "Variant& opAssign(const Array@+)", asFUNCTION(VariantAssignStringVector), asCALL_CDECL_OBJLAST); // bool Variant::operator==(const VariantVector &rhs) const | File: ../Core/Variant.h engine->RegisterObjectMethod("Variant", "bool opEquals(const Array@+)", asFUNCTION(VariantEqualsVariantVector), asCALL_CDECL_OBJLAST); // bool Variant::operator==(const StringVector &rhs) const | File: ../Core/Variant.h engine->RegisterObjectMethod("Variant", "bool opEquals(const Array@+)", asFUNCTION(VariantEqualsStringVector), asCALL_CDECL_OBJLAST); // const VariantVector& Variant::GetVariantVector() const | File: ../Core/Variant.h engine->RegisterObjectMethod("Variant", "Array@ GetVariantVector() const", asFUNCTION(VariantGetVariantVector), asCALL_CDECL_OBJLAST); // VectorBuffer Variant::GetVectorBuffer() const | File: ../Core/Variant.h engine->RegisterObjectMethod("Variant", "VectorBuffer GetBuffer() const", asMETHOD(Variant, GetVectorBuffer), asCALL_THISCALL); } // ======================================================================================== // template T * Object::GetSubsystem() const | File: ../Core/Object.h static Time* GetTime() { return GetScriptContext()->GetSubsystem