BsMonoArray.cpp 2.2 KB

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