Manual_Core.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. // Copyright (c) 2008-2022 the Urho3D project
  2. // License: MIT
  3. #include "../Precompiled.h"
  4. #include "../AngelScript/APITemplates.h"
  5. #include "../AngelScript/Manual_Core.h"
  6. namespace Urho3D
  7. {
  8. // This function is called before ASRegisterGenerated()
  9. void ASRegisterManualFirst_Core(asIScriptEngine* engine)
  10. {
  11. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  12. engine->RegisterObjectType("VariantMap", sizeof(VariantMap), asOBJ_VALUE | asGetTypeTraits<VariantMap>());
  13. // class WeakPtr<RefCounted> | File: ../Container/Ptr.h
  14. engine->RegisterObjectType("WeakHandle", sizeof(WeakPtr<RefCounted>), asOBJ_VALUE | asOBJ_APP_CLASS_CDAK);
  15. }
  16. // ========================================================================================
  17. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  18. // HashMap::HashMap() | File: ../Container/HashMap.h
  19. static void VariantMap_VariantMap(VariantMap* ptr)
  20. {
  21. new(ptr) VariantMap();
  22. }
  23. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  24. // HashMap::HashMap(const HashMap<T, U>& map) | File: ../Container/HashMap.h
  25. static void VariantMap_VariantMap_Copy(const VariantMap& map, VariantMap* ptr)
  26. {
  27. new(ptr) VariantMap(map);
  28. }
  29. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  30. // U& HashMap::operator [](const T& key) | File: ../Container/HashMap.h
  31. static Variant& VariantMap_OperatorBrackets(StringHash key, VariantMap& map)
  32. {
  33. return map[key];
  34. }
  35. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  36. // bool HashMap::Contains(const T& key) const | File: ../Container/HashMap.h
  37. static bool VariantMap_Contains_Hash(StringHash key, VariantMap& map)
  38. {
  39. return map.Contains(key);
  40. }
  41. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  42. // bool HashMap::Erase(const T& key) | File: ../Container/HashMap.h
  43. static bool VariantMap_Erase_Hash(StringHash key, VariantMap& map)
  44. {
  45. return map.Erase(key);
  46. }
  47. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  48. // Vector<T> HashMap::Keys() const | File: ../Container/HashMap.h
  49. static CScriptArray* VariantMap_GetKeys(const VariantMap& map)
  50. {
  51. return VectorToArray<StringHash>(map.Keys(), "Array<StringHash>");
  52. }
  53. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  54. // Vector<U> HashMap::Values() const | File: ../Container/HashMap.h
  55. static CScriptArray* VariantMap_GetValues(const VariantMap& map)
  56. {
  57. return VectorToArray<Variant>(map.Values(), "Array<Variant>");
  58. }
  59. static void RegisterVariantMap(asIScriptEngine* engine)
  60. {
  61. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  62. // HashMap::HashMap()| File: ../Container/HashMap.h
  63. engine->RegisterObjectBehaviour("VariantMap", asBEHAVE_CONSTRUCT, "void f()", AS_FUNCTION_OBJLAST(VariantMap_VariantMap), AS_CALL_CDECL_OBJLAST);
  64. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  65. // HashMap::HashMap(const HashMap<T, U>& map) | File: ../Container/HashMap.h
  66. engine->RegisterObjectBehaviour("VariantMap", asBEHAVE_CONSTRUCT, "void f(const VariantMap&in)", AS_FUNCTION_OBJLAST(VariantMap_VariantMap_Copy), AS_CALL_CDECL_OBJLAST);
  67. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  68. // HashMap::~HashMap() | File: ../Container/HashMap.h
  69. engine->RegisterObjectBehaviour("VariantMap", asBEHAVE_DESTRUCT, "void f()", AS_DESTRUCTOR(VariantMap), AS_CALL_CDECL_OBJLAST);
  70. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  71. // unsigned HashBase::Size() const | File: ../Container/HashBase.h
  72. engine->RegisterObjectMethod("VariantMap", "uint get_length() const", AS_METHOD(VariantMap, Size), AS_CALL_THISCALL);
  73. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  74. // void HashMap::Clear() | File: ../Container/HashMap.h
  75. engine->RegisterObjectMethod("VariantMap", "void Clear()", AS_METHOD(VariantMap, Clear), AS_CALL_THISCALL);
  76. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  77. // HashMap& operator =(const HashMap<T, U>& rhs) | File: ../Container/HashMap.h
  78. engine->RegisterObjectMethod("VariantMap", "VariantMap& opAssign(const VariantMap&in)", AS_METHODPR(VariantMap, operator =, (const VariantMap&), VariantMap&), AS_CALL_THISCALL);
  79. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  80. // U& HashMap::operator [](const T& key) | File: ../Container/HashMap.h
  81. engine->RegisterObjectMethod("VariantMap", "Variant& opIndex(StringHash)", AS_FUNCTION_OBJLAST(VariantMap_OperatorBrackets), AS_CALL_CDECL_OBJLAST);
  82. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  83. // bool HashMap::Contains(const T& key) const | File: ../Container/HashMap.h
  84. engine->RegisterObjectMethod("VariantMap", "bool Contains(StringHash) const", AS_FUNCTION_OBJLAST(VariantMap_Contains_Hash), AS_CALL_CDECL_OBJLAST);
  85. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  86. // bool HashMap::Erase(const T& key) | File: ../Container/HashMap.h
  87. engine->RegisterObjectMethod("VariantMap", "bool Erase(StringHash)", AS_FUNCTION_OBJLAST(VariantMap_Erase_Hash), AS_CALL_CDECL_OBJLAST);
  88. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  89. // Vector<T> HashMap::Keys() const | File: ../Container/HashMap.h
  90. engine->RegisterObjectMethod("VariantMap", "Array<StringHash>@ get_keys() const", AS_FUNCTION_OBJLAST(VariantMap_GetKeys), AS_CALL_CDECL_OBJLAST);
  91. // using VariantMap = HashMap<StringHash, Variant> | File: ../Core/Variant.h
  92. // Vector<U> HashMap::Values() const | File: ../Container/HashMap.h
  93. engine->RegisterObjectMethod("VariantMap", "Array<Variant>@ get_values() const", AS_FUNCTION_OBJLAST(VariantMap_GetValues), AS_CALL_CDECL_OBJLAST);
  94. }
  95. // ========================================================================================
  96. // class WeakPtr<RefCounted> | File: ../Container/Ptr.h
  97. // WeakPtr::WeakPtr() noexcept | File: ../Container/Ptr.h
  98. static void WeakPtr_WeakPtr(WeakPtr<RefCounted>* ptr)
  99. {
  100. new(ptr) WeakPtr<RefCounted>();
  101. }
  102. // class WeakPtr<RefCounted> | File: ../Container/Ptr.h
  103. // WeakPtr::WeakPtr(const WeakPtr<T>& rhs) noexcept | File: ../Container/Ptr.h
  104. static void WeakPtr_WeakPtr_Copy(const WeakPtr<RefCounted>& src, WeakPtr<RefCounted>* ptr)
  105. {
  106. new(ptr) WeakPtr<RefCounted>(src);
  107. }
  108. // class WeakPtr<RefCounted> | File: ../Container/Ptr.h
  109. // explicit WeakPtr::WeakPtr(T* ptr) noexcept | File: ../Container/Ptr.h
  110. static void WeakPtr_WeakPtr_Ptr(RefCounted* object, WeakPtr<RefCounted>* ptr)
  111. {
  112. new(ptr) WeakPtr<RefCounted>(object);
  113. }
  114. static void RegisterWeakHandle(asIScriptEngine* engine)
  115. {
  116. // class WeakPtr<RefCounted> | File: ../Container/Ptr.h
  117. // WeakPtr::WeakPtr() noexcept | File: ../Container/Ptr.h
  118. engine->RegisterObjectBehaviour("WeakHandle", asBEHAVE_CONSTRUCT, "void f()", AS_FUNCTION_OBJLAST(WeakPtr_WeakPtr), AS_CALL_CDECL_OBJLAST);
  119. // class WeakPtr<RefCounted> | File: ../Container/Ptr.h
  120. // WeakPtr::WeakPtr(const WeakPtr<T>& rhs) noexcept | File: ../Container/Ptr.h
  121. engine->RegisterObjectBehaviour("WeakHandle", asBEHAVE_CONSTRUCT, "void f(const WeakHandle&in)", AS_FUNCTION_OBJLAST(WeakPtr_WeakPtr_Copy), AS_CALL_CDECL_OBJLAST);
  122. // class WeakPtr<RefCounted> | File: ../Container/Ptr.h
  123. // explicit WeakPtr::WeakPtr(T* ptr) noexcept | File: ../Container/Ptr.h
  124. engine->RegisterObjectBehaviour("WeakHandle", asBEHAVE_CONSTRUCT, "void f(RefCounted@+)", AS_FUNCTION_OBJLAST(WeakPtr_WeakPtr_Ptr), AS_CALL_CDECL_OBJLAST);
  125. // class WeakPtr<RefCounted> | File: ../Container/Ptr.h
  126. // WeakPtr::~WeakPtr() noexcept | File: ../Container/Ptr.h
  127. engine->RegisterObjectBehaviour("WeakHandle", asBEHAVE_DESTRUCT, "void f()", AS_DESTRUCTOR(WeakPtr<RefCounted>), AS_CALL_CDECL_OBJLAST);
  128. // class WeakPtr<RefCounted> | File: ../Container/Ptr.h
  129. // WeakPtr<T>& WeakPtr::operator =(const WeakPtr<T>& rhs) | File: ../Container/Ptr.h
  130. engine->RegisterObjectMethod("WeakHandle", "WeakHandle& opAssign(const WeakHandle&in)", AS_METHODPR(WeakPtr<RefCounted>, operator =, (const WeakPtr<RefCounted>&), WeakPtr<RefCounted>&), AS_CALL_THISCALL);
  131. // class WeakPtr<RefCounted> | File: ../Container/Ptr.h
  132. // WeakPtr<T>& WeakPtr::operator =(T* ptr) | File: ../Container/Ptr.h
  133. engine->RegisterObjectMethod("WeakHandle", "WeakHandle& opAssign(RefCounted@+)", AS_METHODPR(WeakPtr<RefCounted>, operator =, (RefCounted*), WeakPtr<RefCounted>&), AS_CALL_THISCALL);
  134. // class WeakPtr<RefCounted> | File: ../Container/Ptr.h
  135. // T* WeakPtr::Get() const | File: ../Container/Ptr.h
  136. engine->RegisterObjectMethod("WeakHandle", "RefCounted@+ Get() const", AS_METHODPR(WeakPtr<RefCounted>, Get, () const, RefCounted*), AS_CALL_THISCALL);
  137. // class WeakPtr<RefCounted> | File: ../Container/Ptr.h
  138. // int WeakPtr::Refs() const | File: ../Container/Ptr.h
  139. engine->RegisterObjectMethod("WeakHandle", "int get_refs() const", AS_METHOD(WeakPtr<RefCounted>, Refs), AS_CALL_THISCALL);
  140. // class WeakPtr<RefCounted> | File: ../Container/Ptr.h
  141. // int WeakPtr::WeakRefs() const | File: ../Container/Ptr.h
  142. engine->RegisterObjectMethod("WeakHandle", "int get_weakRefs() const", AS_METHOD(WeakPtr<RefCounted>, WeakRefs), AS_CALL_THISCALL);
  143. // class WeakPtr<RefCounted> | File: ../Container/Ptr.h
  144. // bool WeakPtr::Expired() const | File: ../Container/Ptr.h
  145. engine->RegisterObjectMethod("WeakHandle", "bool get_expired() const", AS_METHOD(WeakPtr<RefCounted>, Expired), AS_CALL_THISCALL);
  146. }
  147. // ========================================================================================
  148. void ArrayToVariantVector(CScriptArray* arr, VariantVector& dest);
  149. void ArrayToStringVector(CScriptArray* arr, StringVector& dest);
  150. static void Variant_Variant_ScriptObject(asIScriptObject* value, Variant* ptr)
  151. {
  152. if (value)
  153. {
  154. asITypeInfo* scriptObjectInterface = value->GetEngine()->GetTypeInfoByName("ScriptObject");
  155. if (value->GetObjectType()->Implements(scriptObjectInterface))
  156. new(ptr) Variant(value);
  157. else
  158. new(ptr) Variant();
  159. }
  160. else
  161. new(ptr) Variant();
  162. }
  163. static asIScriptObject* Variant_GetScriptObject(Variant* ptr)
  164. {
  165. auto* object = static_cast<asIScriptObject*>(ptr->GetVoidPtr());
  166. if (!object)
  167. return nullptr;
  168. asITypeInfo* scriptObjectInterface = object->GetEngine()->GetTypeInfoByName("ScriptObject");
  169. if (!object->GetObjectType()->Implements(scriptObjectInterface))
  170. return nullptr;
  171. return object;
  172. }
  173. // Variant::Variant(const VariantVector& value) | File: ../Core/Variant.h
  174. static void Variant_Variant_VariantVector(CScriptArray* value, Variant* ptr)
  175. {
  176. VariantVector vector;
  177. ArrayToVariantVector(value, vector);
  178. new(ptr) Variant(vector);
  179. }
  180. /* TODO: Check
  181. // Variant::Variant(const StringVector& value) | File: ../Core/Variant.h
  182. static void Variant_Variant_StringVector(CScriptArray* value, Variant* ptr)
  183. {
  184. StringVector vector;
  185. ArrayToStringVector(value, vector);
  186. new(ptr) Variant(vector);
  187. }
  188. */
  189. // Variant& Variant::operator =(const VariantVector& rhs) | File: ../Core/Variant.h
  190. static Variant& Variant_OperatorAssign_VariantVector(CScriptArray* value, Variant* ptr)
  191. {
  192. VariantVector vector;
  193. ArrayToVariantVector(value, vector);
  194. *ptr = vector;
  195. return *ptr;
  196. }
  197. /* TODO: Check
  198. // Variant& Variant::operator =(const StringVector& rhs) | File: ../Core/Variant.h
  199. static Variant& Variant_OperatorAssign_StringVector(CScriptArray* value, Variant* ptr)
  200. {
  201. StringVector vector;
  202. ArrayToStringVector(value, vector);
  203. *ptr = vector;
  204. return *ptr;
  205. }
  206. */
  207. // bool Variant::operator ==(const VariantVector& rhs) const | File: ../Core/Variant.h
  208. static bool Variant_OperatorEquals_VariantVector(CScriptArray* value, Variant* ptr)
  209. {
  210. VariantVector vector;
  211. ArrayToVariantVector(value, vector);
  212. return *ptr == vector;
  213. }
  214. /* TODO: Check
  215. // bool Variant::operator ==(const StringVector& rhs) const | File: ../Core/Variant.h
  216. static bool Variant_OperatorEquals_StringVector(CScriptArray* value, Variant* ptr)
  217. {
  218. StringVector vector;
  219. ArrayToStringVector(value, vector);
  220. return *ptr == vector;
  221. }
  222. */
  223. // const VariantVector& Variant::GetVariantVector() const | File: ../Core/Variant.h
  224. static CScriptArray* Variant_GetVariantVector(Variant* ptr)
  225. {
  226. return VectorToArray<Variant>(ptr->GetVariantVector(), "Array<Variant>");
  227. }
  228. static void RegisterVariant(asIScriptEngine* engine)
  229. {
  230. engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f(ScriptObject@+)", AS_FUNCTION_OBJLAST(Variant_Variant_ScriptObject), AS_CALL_CDECL_OBJLAST);
  231. engine->RegisterObjectMethod("Variant", "ScriptObject@+ GetScriptObject() const", AS_FUNCTION_OBJLAST(Variant_GetScriptObject), AS_CALL_CDECL_OBJLAST);
  232. // Variant::Variant(const VariantVector& value) | File: ../Core/Variant.h
  233. engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f(const Array<Variant>@+)", AS_FUNCTION_OBJLAST(Variant_Variant_VariantVector), AS_CALL_CDECL_OBJLAST);
  234. // Variant::Variant(const StringVector& value) | File: ../Core/Variant.h
  235. //engine->RegisterObjectBehaviour("Variant", asBEHAVE_CONSTRUCT, "void f(const Array<String>@+)", AS_FUNCTION_OBJLAST(Variant_Variant_StringVector), AS_CALL_CDECL_OBJLAST);
  236. // Variant& Variant::operator =(void* rhs) | File: ../Core/Variant.h
  237. engine->RegisterObjectMethod("Variant", "Variant& opAssign(ScriptObject@+)", AS_METHODPR(Variant, operator=, (void*), Variant&), AS_CALL_THISCALL);
  238. // bool Variant::operator ==(void* rhs) const | File: ../Core/Variant.h
  239. engine->RegisterObjectMethod("Variant", "bool opEquals(ScriptObject@+) const", AS_METHODPR(Variant, operator==, (void*) const, bool), AS_CALL_THISCALL);
  240. // Variant& Variant::operator =(const VariantVector& rhs) | File: ../Core/Variant.h
  241. engine->RegisterObjectMethod("Variant", "Variant& opAssign(const Array<Variant>@+)", AS_FUNCTION_OBJLAST(Variant_OperatorAssign_VariantVector), AS_CALL_CDECL_OBJLAST);
  242. // Variant& Variant::operator =(const StringVector& rhs) | File: ../Core/Variant.h
  243. //engine->RegisterObjectMethod("Variant", "Variant& opAssign(const Array<String>@+)", AS_FUNCTION_OBJLAST(Variant_OperatorAssign_StringVector), AS_CALL_CDECL_OBJLAST);
  244. // bool Variant::operator ==(const VariantVector& rhs) const | File: ../Core/Variant.h
  245. engine->RegisterObjectMethod("Variant", "bool opEquals(const Array<Variant>@+)", AS_FUNCTION_OBJLAST(Variant_OperatorEquals_VariantVector), AS_CALL_CDECL_OBJLAST);
  246. // bool Variant::operator ==(const StringVector& rhs) const | File: ../Core/Variant.h
  247. //engine->RegisterObjectMethod("Variant", "bool opEquals(const Array<String>@+)", AS_FUNCTION_OBJLAST(Variant_OperatorEquals_StringVector), AS_CALL_CDECL_OBJLAST);
  248. // const VariantVector& Variant::GetVariantVector() const | File: ../Core/Variant.h
  249. engine->RegisterObjectMethod("Variant", "Array<Variant>@ GetVariantVector() const", AS_FUNCTION_OBJLAST(Variant_GetVariantVector), AS_CALL_CDECL_OBJLAST);
  250. // VectorBuffer Variant::GetVectorBuffer() const | File: ../Core/Variant.h
  251. //engine->RegisterObjectMethod("Variant", "VectorBuffer GetBuffer() const", AS_METHOD(Variant, GetVectorBuffer), AS_CALL_THISCALL);
  252. }
  253. // ========================================================================================
  254. // static unsigned Time::GetSystemTime() | File: ../Core/Timer.h
  255. unsigned Time_GetSystemTime(Time* time)
  256. {
  257. return Time::GetSystemTime();
  258. }
  259. // static unsigned Time::GetTimeSinceEpoch() | File: ../Core/Timer.h
  260. unsigned Time_GetTimeSinceEpoch(Time* time)
  261. {
  262. return Time::GetTimeSinceEpoch();
  263. }
  264. // static String Time::GetTimeStamp() | File: ../Core/Timer.h
  265. String Time_GetTimeStamp(Time* time)
  266. {
  267. return Time::GetTimeStamp();
  268. }
  269. static void RegisterTime(asIScriptEngine* engine)
  270. {
  271. // static unsigned Time::GetSystemTime() | File: ../Core/Timer.h
  272. engine->RegisterObjectMethod("Time", "uint get_systemTime() const", AS_FUNCTION_OBJLAST(Time_GetSystemTime), AS_CALL_CDECL_OBJLAST);
  273. // static unsigned Time::GetTimeSinceEpoch() | File: ../Core/Timer.h
  274. engine->RegisterObjectMethod("Time", "uint get_timeSinceEpoch() const", AS_FUNCTION_OBJLAST(Time_GetTimeSinceEpoch), AS_CALL_CDECL_OBJLAST);
  275. // static String Time::GetTimeStamp() | File: ../Core/Timer.h */
  276. engine->RegisterObjectMethod("Time", "String get_timeStamp() const", AS_FUNCTION_OBJLAST(Time_GetTimeStamp), AS_CALL_CDECL_OBJLAST);
  277. }
  278. // ========================================================================================
  279. // template <class T> T* Context::GetSubsystem() const | File: ../Core/Context.h
  280. static Time* GetTime()
  281. {
  282. return GetScriptContext()->GetSubsystem<Time>();
  283. }
  284. // This function is called after ASRegisterGenerated()
  285. void ASRegisterManualLast_Core(asIScriptEngine* engine)
  286. {
  287. RegisterVariantMap(engine);
  288. RegisterWeakHandle(engine);
  289. RegisterVariant(engine);
  290. RegisterTime(engine);
  291. // template <class T> T* Context::GetSubsystem() const | File: ../Core/Context.h
  292. engine->RegisterGlobalFunction("Time@+ get_time()", AS_FUNCTION(GetTime), AS_CALL_CDECL);
  293. }
  294. }