BsMonoArray.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. template BS_MONO_EXPORT String ScriptArray::get(UINT32 idx);
  48. template BS_MONO_EXPORT WString ScriptArray::get(UINT32 idx);
  49. template BS_MONO_EXPORT void ScriptArray::set(UINT32 idx, const String& value);
  50. template BS_MONO_EXPORT void ScriptArray::set(UINT32 idx, const WString& value);
  51. }