BsScriptSerializableArray.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #pragma once
  2. #include "BsScriptEnginePrerequisites.h"
  3. #include "CmIReflectable.h"
  4. #include <mono/jit/jit.h>
  5. namespace BansheeEngine
  6. {
  7. class BS_SCR_BE_EXPORT ScriptSerializableArray : public CM::IReflectable
  8. {
  9. private:
  10. struct ConstructPrivately {};
  11. public:
  12. ScriptSerializableArray(const ConstructPrivately& dummy, const ScriptSerializableTypeInfoArrayPtr& typeInfo, MonoObject* managedInstance);
  13. ScriptSerializableArray(const ConstructPrivately& dummy);
  14. MonoObject* getManagedInstance() const { return mManagedInstance; }
  15. static ScriptSerializableArrayPtr create(MonoObject* managedInstance, const ScriptSerializableTypeInfoArrayPtr& typeInfo);
  16. protected:
  17. ScriptSerializableTypeInfoArrayPtr mArrayTypeInfo;
  18. CM::Vector<ScriptSerializableFieldDataPtr>::type mArrayEntries;
  19. MonoObject* mManagedInstance;
  20. ::MonoClass* mClass;
  21. CM::UINT32 mNumElements;
  22. void setFieldData(CM::UINT32 arrayIdx, const ScriptSerializableFieldDataPtr& val);
  23. ScriptSerializableFieldDataPtr getFieldData(CM::UINT32 arrayIdx);
  24. void setValue(CM::UINT32 arrayIdx, void* val);
  25. void* getValue(CM::UINT32 arrayIdx);
  26. /************************************************************************/
  27. /* RTTI */
  28. /************************************************************************/
  29. static ScriptSerializableArrayPtr createEmpty();
  30. public:
  31. friend class ScriptSerializableArrayRTTI;
  32. static CM::RTTITypeBase* getRTTIStatic();
  33. virtual CM::RTTITypeBase* getRTTI() const;
  34. };
  35. }