BsManagedSerializableObject.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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 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 createFromExisting(MonoObject* managedInstance);
  17. static ManagedSerializableObjectPtr createFromNew(const ManagedSerializableTypeInfoObjectPtr& type);
  18. static MonoObject* createManagedInstance(const ManagedSerializableTypeInfoObjectPtr& type);
  19. protected:
  20. ManagedSerializableObjectInfoPtr mObjInfo;
  21. MonoObject* mManagedInstance;
  22. Vector<ManagedSerializableFieldDataEntryPtr> mFieldEntries;
  23. /**
  24. * @brief Populates internal field data based on currently active managed instance.
  25. */
  26. void serializeManagedInstance();
  27. /**
  28. * @brief Creates a new managed instance and populates it with stored field data.
  29. */
  30. void deserializeManagedInstance();
  31. void setFieldData(const ManagedSerializableFieldInfoPtr& fieldInfo, const ManagedSerializableFieldDataPtr& val);
  32. ManagedSerializableFieldDataPtr getFieldData(const ManagedSerializableFieldInfoPtr& fieldInfo);
  33. /************************************************************************/
  34. /* RTTI */
  35. /************************************************************************/
  36. static ManagedSerializableObjectPtr createEmpty();
  37. public:
  38. friend class ManagedSerializableObjectRTTI;
  39. static RTTITypeBase* getRTTIStatic();
  40. virtual RTTITypeBase* getRTTI() const;
  41. };
  42. }