BsMonoProperty.cpp 1.5 KB

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