RegistrationMacros.h 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // Copyright (c) 2008-2023 the Urho3D project
  2. // License: MIT
  3. #pragma once
  4. #ifdef AS_MAX_PORTABILITY
  5. #include "../AngelScript/aswrappedcall.h"
  6. #endif
  7. #include "../AngelScript/Generated_Templates.h"
  8. namespace Urho3D
  9. {
  10. // f - function
  11. // c - class
  12. // m - method
  13. // p - parameters (in parentheses)
  14. // r - return type
  15. // PR - parameters + return type
  16. // RegisterGlobalFunction(decl, AS_FUNCTION(f), AS_CALL_CDECL)
  17. // RegisterGlobalFunction(decl, AS_FUNCTIONPR(f, p, r), AS_CALL_CDECL)
  18. // RegisterObjectBehaviour(obj, asBEHAVE_FACTORY, decl, AS_FUNCTION(f), AS_CALL_CDECL)
  19. // RegisterObjectBehaviour(obj, asBEHAVE_FACTORY, decl, AS_FUNCTIONPR(f, p, r), AS_CALL_CDECL)
  20. #ifdef AS_MAX_PORTABILITY
  21. #define AS_FUNCTION(f) WRAP_FN(f)
  22. #define AS_FUNCTIONPR(f, p, r) WRAP_FN_PR(f, p, r)
  23. #define AS_CALL_CDECL asCALL_GENERIC
  24. #else
  25. #define AS_FUNCTION(f) asFUNCTION(f)
  26. #define AS_FUNCTIONPR(f, p, r) asFUNCTIONPR(f, p, r)
  27. #define AS_CALL_CDECL asCALL_CDECL
  28. #endif
  29. // RegisterObjectBehaviour(obj, behaviour, decl, AS_METHOD(c, m), AS_CALL_THISCALL)
  30. // RegisterObjectBehaviour(obj, behaviour, decl, AS_METHODPR(c, m, p, r), AS_CALL_THISCALL)
  31. // where behaviour is asBEHAVE_ADDREF or asBEHAVE_RELEASE
  32. // RegisterObjectMethod(obj, decl, AS_METHOD(c, m), AS_CALL_THISCALL)
  33. // RegisterObjectMethod(obj, decl, AS_METHODPR(c, m, p, r), AS_CALL_THISCALL)
  34. #ifdef AS_MAX_PORTABILITY
  35. #define AS_METHOD(c, m) WRAP_MFN(c, m)
  36. #define AS_METHODPR(c, m, p, r) WRAP_MFN_PR(c, m, p, r)
  37. #define AS_CALL_THISCALL asCALL_GENERIC
  38. #else
  39. #define AS_METHOD(c, m) asMETHOD(c, m)
  40. #define AS_METHODPR(c, m, p, r) asMETHODPR(c, m, p, r)
  41. #define AS_CALL_THISCALL asCALL_THISCALL
  42. #endif
  43. // RegisterObjectBehaviour(obj, behaviour, decl, AS_FUNCTION_OBJFIRST(f), AS_CALL_CDECL_OBJFIRST)
  44. // RegisterObjectBehaviour(obj, behaviour, decl, AS_FUNCTION_OBJLAST(f), AS_CALL_CDECL_OBJLAST)
  45. // where behaviour is asBEHAVE_CONSTRUCT, asBEHAVE_ADDREF or asBEHAVE_RELEASE
  46. // RegisterObjectMethod(obj, decl, AS_FUNCTION_OBJFIRST(f), AS_CALL_CDECL_OBJFIRST)
  47. // RegisterObjectMethod(obj, decl, AS_FUNCTIONPR_OBJFIRST(f, p, r), AS_CALL_CDECL_OBJFIRST)
  48. // RegisterObjectMethod(obj, decl, AS_FUNCTION_OBJLAST(f), AS_CALL_CDECL_OBJLAST)
  49. // RegisterObjectMethod(obj, decl, AS_FUNCTIONPR_OBJLAST(f, p, r), AS_CALL_CDECL_OBJLAST)
  50. #ifdef AS_MAX_PORTABILITY
  51. #define AS_FUNCTION_OBJFIRST(f) WRAP_OBJ_FIRST(f)
  52. #define AS_FUNCTION_OBJLAST(f) WRAP_OBJ_LAST(f)
  53. #define AS_FUNCTIONPR_OBJFIRST(f, p, r) WRAP_OBJ_FIRST_PR(f, p, r)
  54. #define AS_FUNCTIONPR_OBJLAST(f, p, r) WRAP_OBJ_LAST_PR(f, p, r)
  55. #define AS_CALL_CDECL_OBJFIRST asCALL_GENERIC
  56. #define AS_CALL_CDECL_OBJLAST asCALL_GENERIC
  57. #else
  58. #define AS_FUNCTION_OBJFIRST(f) asFUNCTION(f)
  59. #define AS_FUNCTION_OBJLAST(f) asFUNCTION(f)
  60. #define AS_FUNCTIONPR_OBJFIRST(f, p, r) asFUNCTIONPR(f, p, r)
  61. #define AS_FUNCTIONPR_OBJLAST(f, p, r) asFUNCTIONPR(f, p, r)
  62. #define AS_CALL_CDECL_OBJFIRST asCALL_CDECL_OBJFIRST
  63. #define AS_CALL_CDECL_OBJLAST asCALL_CDECL_OBJLAST
  64. #endif
  65. // RegisterObjectBehaviour(obj, asBEHAVE_DESTRUCT, decl, AS_DESTRUCTOR(c), AS_CALL_CDECL_OBJFIRST)
  66. // RegisterObjectBehaviour(obj, asBEHAVE_DESTRUCT, decl, AS_DESTRUCTOR(c), AS_CALL_CDECL_OBJLAST)
  67. #ifdef AS_MAX_PORTABILITY
  68. #define AS_DESTRUCTOR(c) WRAP_DES(c)
  69. #else
  70. template <class T>
  71. void ASNativeDestructor(T* ptr)
  72. {
  73. ptr->~T();
  74. }
  75. #define AS_DESTRUCTOR(c) asFUNCTION(ASNativeDestructor<c>)
  76. #endif
  77. } // namespace Urho3D