BsScriptSerializableList.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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 ScriptSerializableList : public CM::IReflectable
  8. {
  9. private:
  10. struct ConstructPrivately {};
  11. public:
  12. ScriptSerializableList(const ConstructPrivately& dummy, const ScriptSerializableTypeInfoListPtr& typeInfo, MonoObject* managedInstance);
  13. ScriptSerializableList(const ConstructPrivately& dummy);
  14. MonoObject* getManagedInstance() const { return mManagedInstance; }
  15. static ScriptSerializableListPtr create(MonoObject* managedInstance, const ScriptSerializableTypeInfoListPtr& typeInfo);
  16. protected:
  17. MonoObject* mManagedInstance;
  18. ScriptSerializableTypeInfoListPtr mListTypeInfo;
  19. CM::Vector<ScriptSerializableFieldDataPtr>::type mListEntries;
  20. CM::UINT32 mNumElements;
  21. /**
  22. * @brief Populates internal field data based on currently active managed instance.
  23. */
  24. void serializeManagedInstance();
  25. /**
  26. * @brief Creates a new managed instance and populates it with stored field data.
  27. */
  28. void deserializeManagedInstance();
  29. void setFieldData(CM::UINT32 arrayIdx, const ScriptSerializableFieldDataPtr& val);
  30. ScriptSerializableFieldDataPtr getFieldData(CM::UINT32 arrayIdx);
  31. void setValue(CM::UINT32 arrayIdx, void* val);
  32. void* getValue(CM::UINT32 arrayIdx);
  33. CM::UINT32 getLength() const;
  34. void setLength(CM::UINT32 length);
  35. /************************************************************************/
  36. /* RTTI */
  37. /************************************************************************/
  38. static ScriptSerializableListPtr createEmpty();
  39. public:
  40. friend class ScriptSerializableListRTTI;
  41. static CM::RTTITypeBase* getRTTIStatic();
  42. virtual CM::RTTITypeBase* getRTTI() const;
  43. };
  44. }