BsMonoArray.h 1.4 KB

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