BsManagedSerializableDictionary.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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 ManagedSerializableDictionary : public IReflectable
  8. {
  9. private:
  10. class Enumerator
  11. {
  12. public:
  13. Enumerator(MonoObject* instance, const ManagedSerializableDictionary* parent);
  14. ManagedSerializableFieldDataPtr getKey() const;
  15. ManagedSerializableFieldDataPtr getValue() const;
  16. bool moveNext();
  17. private:
  18. MonoObject* mInstance;
  19. MonoObject* mCurrent;
  20. const ManagedSerializableDictionary* mParent;
  21. };
  22. struct ConstructPrivately {};
  23. public:
  24. ManagedSerializableDictionary(const ConstructPrivately& dummy, const ManagedSerializableTypeInfoDictionaryPtr& typeInfo, MonoObject* managedInstance);
  25. ManagedSerializableDictionary(const ConstructPrivately& dummy);
  26. MonoObject* getManagedInstance() const { return mManagedInstance; }
  27. static ManagedSerializableDictionaryPtr createFromExisting(MonoObject* managedInstance, const ManagedSerializableTypeInfoDictionaryPtr& typeInfo);
  28. static ManagedSerializableDictionaryPtr createFromNew(const ManagedSerializableTypeInfoDictionaryPtr& typeInfo);
  29. static MonoObject* createManagedInstance(const ManagedSerializableTypeInfoDictionaryPtr& typeInfo);
  30. protected:
  31. MonoObject* mManagedInstance;
  32. MonoMethod* mAddMethod;
  33. MonoMethod* mGetEnumerator;
  34. MonoMethod* mEnumMoveNext;
  35. MonoProperty* mEnumCurrentProp;
  36. MonoProperty* mKeyProp;
  37. MonoProperty* mValueProp;
  38. ManagedSerializableTypeInfoDictionaryPtr mDictionaryTypeInfo;
  39. void initMonoObjects(MonoClass* dictionaryClass);
  40. /**
  41. * @brief Populates provided field data arrays based on currently active managed instance.
  42. */
  43. void serializeManagedInstance(Vector<ManagedSerializableFieldDataPtr>& keyEntries,
  44. Vector<ManagedSerializableFieldDataPtr>& valueEntries);
  45. /**
  46. * @brief Creates a new managed instance and populates it with provided field data.
  47. */
  48. void deserializeManagedInstance(const Vector<ManagedSerializableFieldDataPtr>& keyEntries,
  49. const Vector<ManagedSerializableFieldDataPtr>& valueEntries);
  50. void setFieldData(const ManagedSerializableFieldDataPtr& key, const ManagedSerializableFieldDataPtr& val);
  51. Enumerator getEnumerator() const;
  52. /************************************************************************/
  53. /* RTTI */
  54. /************************************************************************/
  55. static ManagedSerializableDictionaryPtr createEmpty();
  56. public:
  57. friend class ManagedSerializableDictionaryRTTI;
  58. static RTTITypeBase* getRTTIStatic();
  59. virtual RTTITypeBase* getRTTI() const;
  60. };
  61. }