BsManagedSerializableArray.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #pragma once
  2. #include "BsScriptEnginePrerequisites.h"
  3. #include "BsIReflectable.h"
  4. #include <mono/jit/jit.h>
  5. namespace BansheeEngine
  6. {
  7. class BS_SCR_BE_EXPORT ManagedSerializableArray : public IReflectable
  8. {
  9. private:
  10. struct ConstructPrivately {};
  11. public:
  12. ManagedSerializableArray(const ConstructPrivately& dummy, const ManagedSerializableTypeInfoArrayPtr& typeInfo, MonoObject* managedInstance);
  13. ManagedSerializableArray(const ConstructPrivately& dummy);
  14. MonoObject* getManagedInstance() const { return mManagedInstance; }
  15. static ManagedSerializableArrayPtr createFromExisting(MonoObject* managedInstance, const ManagedSerializableTypeInfoArrayPtr& typeInfo);
  16. static ManagedSerializableArrayPtr createFromNew(const ManagedSerializableTypeInfoArrayPtr& typeInfo, const Vector<UINT32>& sizes);
  17. static MonoObject* createManagedInstance(const ManagedSerializableTypeInfoArrayPtr& typeInfo, const Vector<UINT32>& sizes);
  18. protected:
  19. MonoObject* mManagedInstance;
  20. ::MonoClass* mElementMonoClass;
  21. ManagedSerializableTypeInfoArrayPtr mArrayTypeInfo;
  22. Vector<UINT32> mNumElements;
  23. UINT32 mElemSize;
  24. void initMonoObjects();
  25. /**
  26. * @brief Creates a new managed instance and populates it with provided entries.
  27. */
  28. void deserializeManagedInstance(const Vector<ManagedSerializableFieldDataPtr>& entries);
  29. void setFieldData(UINT32 arrayIdx, const ManagedSerializableFieldDataPtr& val);
  30. ManagedSerializableFieldDataPtr getFieldData(UINT32 arrayIdx);
  31. void setValue(UINT32 arrayIdx, void* val);
  32. UINT32 toSequentialIdx(const Vector<UINT32>& idx) const;
  33. UINT32 getLength(UINT32 dimension) const;
  34. /************************************************************************/
  35. /* RTTI */
  36. /************************************************************************/
  37. static ManagedSerializableArrayPtr createFromNew();
  38. public:
  39. friend class ManagedSerializableArrayRTTI;
  40. static RTTITypeBase* getRTTIStatic();
  41. virtual RTTITypeBase* getRTTI() const;
  42. };
  43. }