BsManagedSerializableList.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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 ManagedSerializableList : public IReflectable
  8. {
  9. private:
  10. struct ConstructPrivately {};
  11. public:
  12. ManagedSerializableList(const ConstructPrivately& dummy, const ManagedSerializableTypeInfoListPtr& typeInfo, MonoObject* managedInstance);
  13. ManagedSerializableList(const ConstructPrivately& dummy);
  14. MonoObject* getManagedInstance() const { return mManagedInstance; }
  15. static ManagedSerializableListPtr create(MonoObject* managedInstance, const ManagedSerializableTypeInfoListPtr& typeInfo);
  16. protected:
  17. MonoObject* mManagedInstance;
  18. MonoMethod* mAddMethod;
  19. MonoProperty* mItemProp;
  20. MonoProperty* mCountProp;
  21. ManagedSerializableTypeInfoListPtr mListTypeInfo;
  22. Vector<ManagedSerializableFieldDataPtr> mListEntries;
  23. UINT32 mNumElements;
  24. void initMonoObjects(MonoClass* listClass);
  25. /**
  26. * @brief Populates internal field data based on currently active managed instance.
  27. */
  28. void serializeManagedInstance();
  29. /**
  30. * @brief Creates a new managed instance and populates it with stored field data.
  31. */
  32. void deserializeManagedInstance();
  33. void setFieldData(UINT32 arrayIdx, const ManagedSerializableFieldDataPtr& val);
  34. void addFieldData(const ManagedSerializableFieldDataPtr& val);
  35. ManagedSerializableFieldDataPtr getFieldData(UINT32 arrayIdx);
  36. UINT32 getLength() const;
  37. /************************************************************************/
  38. /* RTTI */
  39. /************************************************************************/
  40. static ManagedSerializableListPtr createEmpty();
  41. public:
  42. friend class ManagedSerializableListRTTI;
  43. static RTTITypeBase* getRTTIStatic();
  44. virtual RTTITypeBase* getRTTI() const;
  45. };
  46. }