BsScriptMacros.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #pragma once
  2. #define CM_SCRIPT_GETSET_VALUE(ParentType, Type, Name, Field) \
  3. static void internal_Get##Name##(##ParentType##* nativeInstance, Type##* value) \
  4. { \
  5. *value = nativeInstance->##Field; \
  6. } \
  7. \
  8. static void internal_Set##Name##(##ParentType##* nativeInstance, Type value) \
  9. { \
  10. nativeInstance->##Field = value; \
  11. } \
  12. #define CM_SCRIPT_GETSET_VALUE_REF(ParentType, Type, Name, Field) \
  13. static void internal_Get##Name##(##ParentType##* nativeInstance, Type##* value) \
  14. { \
  15. *value = nativeInstance->##Field; \
  16. } \
  17. \
  18. static void internal_Set##Name##(##ParentType##* nativeInstance, Type##* value) \
  19. { \
  20. nativeInstance->##Field = *value; \
  21. } \
  22. #define CM_SCRIPT_GETSET_OBJECT(ParentType, Type, Name, FieldNative, FieldManaged) \
  23. static void internal_Get##Name##(##ParentType##* nativeInstance, MonoObject** value) \
  24. { \
  25. throwIfInstancesDontMatch(nativeInstance->##FieldManaged##, &nativeInstance->##FieldNative##); \
  26. \
  27. if(nativeInstance->##FieldManaged != nullptr) \
  28. { \
  29. *value = nativeInstance->##FieldManaged##->getManagedInstance(); \
  30. return; \
  31. } \
  32. \
  33. *value = nullptr; \
  34. } \
  35. \
  36. static void internal_Set##Name##(##ParentType##* nativeInstance, MonoObject* value) \
  37. { \
  38. Type##* nativeValue = Type##::toNative(value); \
  39. nativeInstance->##FieldNative = nativeValue->getInternalValue(); \
  40. nativeInstance->##FieldManaged = nativeValue; \
  41. }
  42. #define CM_SCRIPT_GETSET_OBJECT_SHRDPTR(ParentType, Type, Name, FieldNative, FieldManaged) \
  43. static void internal_Get##Name##(##ParentType##* nativeInstance, MonoObject** value) \
  44. { \
  45. throwIfInstancesDontMatch(nativeInstance->##FieldManaged##, nativeInstance->##FieldNative##.get()); \
  46. \
  47. if(nativeInstance->##FieldManaged != nullptr) \
  48. { \
  49. *value = nativeInstance->##FieldManaged##->getManagedInstance(); \
  50. return; \
  51. } \
  52. \
  53. *value = nullptr; \
  54. } \
  55. \
  56. static void internal_Set##Name##(##ParentType##* nativeInstance, MonoObject* value) \
  57. { \
  58. Type##* nativeValue = Type##::toNative(value); \
  59. nativeInstance->##FieldNative = nativeValue->getInternalValue(); \
  60. nativeInstance->##FieldManaged = nativeValue; \
  61. }
  62. #define CM_SCRIPT_SETGET_META(Type, Name) \
  63. metaData.scriptClass->addInternalCall("Internal_Get" #Name, &##Type##::internal_Get##Name##); \
  64. metaData.scriptClass->addInternalCall("Internal_Set" #Name, &##Type##::internal_Set##Name##);