BsManagedSerializableArray.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. void resize(const Vector<UINT32>& newSizes);
  16. UINT32 getLength(UINT32 dimension) const { return mNumElements[dimension]; }
  17. Vector<UINT32> getLengths() const { return mNumElements; }
  18. UINT32 getTotalLength() const;
  19. void setFieldData(UINT32 arrayIdx, const ManagedSerializableFieldDataPtr& val);
  20. ManagedSerializableFieldDataPtr getFieldData(UINT32 arrayIdx);
  21. ManagedSerializableTypeInfoArrayPtr getTypeInfo() const { return mArrayTypeInfo; }
  22. static ManagedSerializableArrayPtr createFromExisting(MonoObject* managedInstance, const ManagedSerializableTypeInfoArrayPtr& typeInfo);
  23. static ManagedSerializableArrayPtr createNew(const ManagedSerializableTypeInfoArrayPtr& typeInfo, const Vector<UINT32>& sizes);
  24. static MonoObject* createManagedInstance(const ManagedSerializableTypeInfoArrayPtr& typeInfo, const Vector<UINT32>& sizes);
  25. protected:
  26. MonoObject* mManagedInstance;
  27. ::MonoClass* mElementMonoClass;
  28. MonoMethod* mCopyMethod;
  29. ManagedSerializableTypeInfoArrayPtr mArrayTypeInfo;
  30. Vector<UINT32> mNumElements;
  31. UINT32 mElemSize;
  32. void initMonoObjects();
  33. UINT32 getLengthInternal(UINT32 dimension) const;
  34. /**
  35. * @brief Creates a new managed instance and populates it with provided entries.
  36. */
  37. void deserializeManagedInstance(const Vector<ManagedSerializableFieldDataPtr>& entries);
  38. void setValue(UINT32 arrayIdx, void* val);
  39. UINT32 toSequentialIdx(const Vector<UINT32>& idx) const;
  40. /************************************************************************/
  41. /* RTTI */
  42. /************************************************************************/
  43. static ManagedSerializableArrayPtr createNew();
  44. public:
  45. friend class ManagedSerializableArrayRTTI;
  46. static RTTITypeBase* getRTTIStatic();
  47. virtual RTTITypeBase* getRTTI() const;
  48. };
  49. }