BsMonoProperty.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsMonoProperty.h"
  4. #include "BsMonoMethod.h"
  5. #include "BsMonoManager.h"
  6. namespace BansheeEngine
  7. {
  8. MonoProperty::MonoProperty(::MonoProperty* monoProp)
  9. :mProperty(monoProp), mGetReturnType(nullptr)
  10. {
  11. mGetMethod = mono_property_get_get_method(mProperty);
  12. mSetMethod = mono_property_get_set_method(mProperty);
  13. }
  14. MonoObject* MonoProperty::get(MonoObject* instance) const
  15. {
  16. return mono_runtime_invoke(mGetMethod, instance, nullptr, nullptr);
  17. }
  18. void MonoProperty::set(MonoObject* instance, void* value) const
  19. {
  20. void* args[1];
  21. args[0] = value;
  22. mono_runtime_invoke(mSetMethod, instance, args, nullptr);
  23. }
  24. MonoObject* MonoProperty::getIndexed(MonoObject* instance, UINT32 index) const
  25. {
  26. void* args[1];
  27. args[0] = &index;
  28. return mono_runtime_invoke(mGetMethod, instance, args, nullptr);
  29. }
  30. void MonoProperty::setIndexed(MonoObject* instance, UINT32 index, void* value) const
  31. {
  32. void* args[2];
  33. args[0] = &index;
  34. args[1] = value;
  35. mono_runtime_invoke(mSetMethod, instance, args, nullptr);
  36. }
  37. MonoClass* MonoProperty::getReturnType()
  38. {
  39. if(mGetReturnType != nullptr)
  40. return mGetReturnType;
  41. MonoType* returnType = mono_signature_get_return_type(mono_method_signature(mGetMethod));
  42. if(returnType == nullptr)
  43. return nullptr;
  44. ::MonoClass* returnClass = mono_class_from_mono_type(returnType);
  45. if(returnClass == nullptr)
  46. return nullptr;
  47. mGetReturnType = MonoManager::instance().findClass(returnClass);
  48. return mGetReturnType;
  49. }
  50. }