BsMonoField.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include "BsMonoField.h"
  2. #include "BsMonoClass.h"
  3. using namespace CamelotFramework;
  4. namespace BansheeEngine
  5. {
  6. MonoField::MonoField(MonoClassField* field)
  7. :mField(field)
  8. {
  9. }
  10. void* MonoField::getValue(MonoObject* instance)
  11. {
  12. void* value = nullptr;
  13. mono_field_get_value(instance, mField, &value);
  14. return value;
  15. }
  16. void MonoField::setValue(MonoObject* instance, void* value)
  17. {
  18. mono_field_set_value(instance, mField, &value);
  19. }
  20. bool MonoField::hasAttribute(MonoClass* monoClass)
  21. {
  22. // TODO - Consider caching custom attributes or just initializing them all at load
  23. ::MonoClass* parentClass = mono_field_get_parent(mField);
  24. MonoCustomAttrInfo* attrInfo = mono_custom_attrs_from_field(parentClass, mField);
  25. bool hasAttr = mono_custom_attrs_has_attr(attrInfo, monoClass->_getInternalClass()) != 0;
  26. mono_custom_attrs_free(attrInfo);
  27. return hasAttr;
  28. }
  29. MonoObject* MonoField::getAttribute(MonoClass* monoClass)
  30. {
  31. // TODO - Consider caching custom attributes or just initializing them all at load
  32. ::MonoClass* parentClass = mono_field_get_parent(mField);
  33. MonoCustomAttrInfo* attrInfo = mono_custom_attrs_from_field(parentClass, mField);
  34. MonoObject* foundAttr = mono_custom_attrs_get_attr(attrInfo, monoClass->_getInternalClass());
  35. mono_custom_attrs_free(attrInfo);
  36. return foundAttr;
  37. }
  38. }