BsScriptSerializableDictionary.h 2.4 KB

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