BsMonoProperty.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. #include <mono/jit/jit.h>
  7. namespace BansheeEngine
  8. {
  9. MonoProperty::MonoProperty(::MonoProperty* monoProp)
  10. :mProperty(monoProp), mGetReturnType(nullptr)
  11. {
  12. mGetMethod = mono_property_get_get_method(mProperty);
  13. mSetMethod = mono_property_get_set_method(mProperty);
  14. }
  15. MonoObject* MonoProperty::get(MonoObject* instance) const
  16. {
  17. return mono_runtime_invoke(mGetMethod, instance, nullptr, nullptr);
  18. }
  19. void MonoProperty::set(MonoObject* instance, void* value) const
  20. {
  21. void* args[1];
  22. args[0] = value;
  23. mono_runtime_invoke(mSetMethod, instance, args, nullptr);
  24. }
  25. MonoObject* MonoProperty::getIndexed(MonoObject* instance, UINT32 index) const
  26. {
  27. void* args[1];
  28. args[0] = &index;
  29. return mono_runtime_invoke(mGetMethod, instance, args, nullptr);
  30. }
  31. void MonoProperty::setIndexed(MonoObject* instance, UINT32 index, void* value) const
  32. {
  33. void* args[2];
  34. args[0] = &index;
  35. args[1] = value;
  36. mono_runtime_invoke(mSetMethod, instance, args, nullptr);
  37. }
  38. MonoClass* MonoProperty::getReturnType()
  39. {
  40. if(mGetReturnType != nullptr)
  41. return mGetReturnType;
  42. MonoType* returnType = mono_signature_get_return_type(mono_method_signature(mGetMethod));
  43. if(returnType == nullptr)
  44. return nullptr;
  45. ::MonoClass* returnClass = mono_class_from_mono_type(returnType);
  46. if(returnClass == nullptr)
  47. return nullptr;
  48. mGetReturnType = MonoManager::instance().findClass(returnClass);
  49. return mGetReturnType;
  50. }
  51. }