BsMonoArray.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "BsMonoArray.h"
  2. #include "BsMonoManager.h"
  3. #include "BsMonoClass.h"
  4. #include "BsMonoUtil.h"
  5. namespace BansheeEngine
  6. {
  7. ScriptArray::ScriptArray(MonoArray* existingArray)
  8. :mInternal(existingArray)
  9. {
  10. }
  11. ScriptArray::ScriptArray(MonoClass& klass, UINT32 size)
  12. : mInternal(nullptr)
  13. {
  14. mInternal = mono_array_new(MonoManager::instance().getDomain(), klass._getInternalClass(), size);
  15. }
  16. ScriptArray::ScriptArray(::MonoClass* klass, UINT32 size)
  17. : mInternal(nullptr)
  18. {
  19. mInternal = mono_array_new(MonoManager::instance().getDomain(), klass, size);
  20. }
  21. template<>
  22. String ScriptArray::get<String>(UINT32 idx)
  23. {
  24. return MonoUtil::monoToString(mono_array_get(mInternal, MonoString*, idx));
  25. }
  26. template<>
  27. WString ScriptArray::get<WString>(UINT32 idx)
  28. {
  29. return MonoUtil::monoToWString(mono_array_get(mInternal, MonoString*, idx));
  30. }
  31. template<>
  32. void ScriptArray::set<String>(UINT32 idx, const String& value)
  33. {
  34. MonoString* monoString = MonoUtil::stringToMono(MonoManager::instance().getDomain(), value);
  35. mono_array_set(mInternal, MonoString*, idx, monoString);
  36. }
  37. template<>
  38. void ScriptArray::set<WString>(UINT32 idx, const WString& value)
  39. {
  40. MonoString* monoString = MonoUtil::wstringToMono(MonoManager::instance().getDomain(), value);
  41. mono_array_set(mInternal, MonoString*, idx, monoString);
  42. }
  43. UINT32 ScriptArray::size() const
  44. {
  45. return (UINT32)mono_array_length(mInternal);
  46. }
  47. UINT32 ScriptArray::elementSize() const
  48. {
  49. ::MonoClass* arrayClass = mono_object_get_class((MonoObject*)(mInternal));
  50. ::MonoClass* elementClass = mono_class_get_element_class(arrayClass);
  51. return (UINT32)mono_class_array_element_size(elementClass);
  52. }
  53. template BS_MONO_EXPORT String ScriptArray::get(UINT32 idx);
  54. template BS_MONO_EXPORT WString ScriptArray::get(UINT32 idx);
  55. template BS_MONO_EXPORT void ScriptArray::set(UINT32 idx, const String& value);
  56. template BS_MONO_EXPORT void ScriptArray::set(UINT32 idx, const WString& value);
  57. }