BsManagedSerializableObject.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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 ManagedSerializableObject : public IReflectable
  8. {
  9. private:
  10. struct ConstructPrivately {};
  11. public:
  12. ManagedSerializableObject(const ConstructPrivately& dummy, ManagedSerializableObjectInfoPtr objInfo, MonoObject* managedInstance);
  13. ManagedSerializableObject(const ConstructPrivately& dummy);
  14. MonoObject* getManagedInstance() const { return mManagedInstance; }
  15. ManagedSerializableObjectInfoPtr getObjectInfo() const { return mObjInfo; }
  16. static ManagedSerializableObjectPtr create(MonoObject* managedInstance);
  17. protected:
  18. ManagedSerializableObjectInfoPtr mObjInfo;
  19. MonoObject* mManagedInstance;
  20. Vector<ManagedSerializableFieldDataEntryPtr>::type mFieldEntries;
  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(const ManagedSerializableFieldInfoPtr& fieldInfo, const ManagedSerializableFieldDataPtr& val);
  30. ManagedSerializableFieldDataPtr getFieldData(const ManagedSerializableFieldInfoPtr& fieldInfo);
  31. /************************************************************************/
  32. /* RTTI */
  33. /************************************************************************/
  34. static ManagedSerializableObjectPtr createEmpty();
  35. public:
  36. friend class ManagedSerializableObjectRTTI;
  37. static RTTITypeBase* getRTTIStatic();
  38. virtual RTTITypeBase* getRTTI() const;
  39. };
  40. }