BsMonoProperty.cpp 1.5 KB

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