BsMonoArray.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #pragma once
  2. #include "BsMonoPrerequisites.h"
  3. #include "BsScriptMeta.h"
  4. #include <mono/jit/jit.h>
  5. namespace BansheeEngine
  6. {
  7. class BS_MONO_EXPORT ScriptArray
  8. {
  9. public:
  10. ScriptArray(MonoArray* existingArray);
  11. ScriptArray(MonoClass& klass, UINT32 size);
  12. ScriptArray(::MonoClass* klass, UINT32 size);
  13. template<class T>
  14. T get(UINT32 idx)
  15. {
  16. return mono_array_get(mInternal, T, idx);
  17. }
  18. template<class T>
  19. void set(UINT32 idx, const T& value)
  20. {
  21. mono_array_set(mInternal, T, idx, value);
  22. }
  23. template<class T>
  24. static ScriptArray create(UINT32 size)
  25. {
  26. return ScriptArray(*T::getMetaData()->scriptClass, size);
  27. }
  28. template<>
  29. static ScriptArray create<UINT32>(UINT32 size)
  30. {
  31. return ScriptArray(mono_get_uint32_class(), size);
  32. }
  33. template<>
  34. static ScriptArray create<INT32>(UINT32 size)
  35. {
  36. return ScriptArray(mono_get_int32_class(), size);
  37. }
  38. template<>
  39. static ScriptArray create<WString>(UINT32 size)
  40. {
  41. return ScriptArray(mono_get_string_class(), size);
  42. }
  43. template<>
  44. static ScriptArray create<String>(UINT32 size)
  45. {
  46. return ScriptArray(mono_get_string_class(), size);
  47. }
  48. template<>
  49. static ScriptArray create<float>(UINT32 size)
  50. {
  51. return ScriptArray(mono_get_single_class(), size);
  52. }
  53. UINT32 size() const;
  54. MonoArray* getInternal() const { return mInternal; }
  55. private:
  56. MonoArray* mInternal;
  57. };
  58. }