BsManagedSerializableDictionaryRTTI.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #pragma once
  2. #include "BsScriptEnginePrerequisites.h"
  3. #include "BsRTTIType.h"
  4. #include "BsManagedSerializableDictionary.h"
  5. namespace BansheeEngine
  6. {
  7. class BS_SCR_BE_EXPORT ManagedSerializableDictionaryKeyValueRTTI :
  8. public RTTIType <ManagedSerializableDictionaryKeyValue, IReflectable, ManagedSerializableDictionaryKeyValueRTTI>
  9. {
  10. private:
  11. ManagedSerializableFieldDataPtr getKey(ManagedSerializableDictionaryKeyValue* obj)
  12. {
  13. return obj->key;
  14. }
  15. void setKey(ManagedSerializableDictionaryKeyValue* obj, ManagedSerializableFieldDataPtr val)
  16. {
  17. obj->key = val;
  18. }
  19. ManagedSerializableFieldDataPtr getValue(ManagedSerializableDictionaryKeyValue* obj)
  20. {
  21. return obj->value;
  22. }
  23. void setValue(ManagedSerializableDictionaryKeyValue* obj, ManagedSerializableFieldDataPtr val)
  24. {
  25. obj->value = val;
  26. }
  27. public:
  28. ManagedSerializableDictionaryKeyValueRTTI()
  29. {
  30. addReflectablePtrField("key", 0, &ManagedSerializableDictionaryKeyValueRTTI::getKey, &ManagedSerializableDictionaryKeyValueRTTI::setKey);
  31. addReflectablePtrField("value", 1, &ManagedSerializableDictionaryKeyValueRTTI::getValue, &ManagedSerializableDictionaryKeyValueRTTI::setValue);
  32. }
  33. virtual const String& getRTTIName()
  34. {
  35. static String name = "ManagedSerializableDictionaryKeyValue";
  36. return name;
  37. }
  38. virtual UINT32 getRTTIId()
  39. {
  40. return TID_ScriptSerializableDictionaryKeyValue;
  41. }
  42. virtual std::shared_ptr<IReflectable> newRTTIObject()
  43. {
  44. return bs_shared_ptr_new<ManagedSerializableDictionaryKeyValue>();
  45. }
  46. };
  47. class BS_SCR_BE_EXPORT ManagedSerializableDictionaryRTTI : public RTTIType<ManagedSerializableDictionary, IReflectable, ManagedSerializableDictionaryRTTI>
  48. {
  49. private:
  50. ManagedSerializableTypeInfoDictionaryPtr getTypeInfo(ManagedSerializableDictionary* obj) { return obj->mDictionaryTypeInfo; }
  51. void setTypeInfo(ManagedSerializableDictionary* obj, ManagedSerializableTypeInfoDictionaryPtr val) { obj->mDictionaryTypeInfo = val; }
  52. ManagedSerializableDictionaryKeyValue& getEntry(ManagedSerializableDictionary* obj, UINT32 arrayIdx)
  53. {
  54. Vector<ManagedSerializableDictionaryKeyValue>& sequentialData = any_cast_ref<Vector<ManagedSerializableDictionaryKeyValue>>(obj->mRTTIData);
  55. return sequentialData[arrayIdx];
  56. }
  57. void setEntry(ManagedSerializableDictionary* obj, UINT32 arrayIdx, ManagedSerializableDictionaryKeyValue& val)
  58. {
  59. obj->setFieldData(val.key, val.value);
  60. }
  61. UINT32 getNumEntries(ManagedSerializableDictionary* obj)
  62. {
  63. Vector<ManagedSerializableDictionaryKeyValue>& sequentialData = any_cast_ref<Vector<ManagedSerializableDictionaryKeyValue>>(obj->mRTTIData);
  64. return (UINT32)sequentialData.size();
  65. }
  66. void setNumEntries(ManagedSerializableDictionary* obj, UINT32 numEntries)
  67. {
  68. // Do nothing
  69. }
  70. public:
  71. ManagedSerializableDictionaryRTTI()
  72. {
  73. addReflectablePtrField("mListTypeInfo", 0, &ManagedSerializableDictionaryRTTI::getTypeInfo, &ManagedSerializableDictionaryRTTI::setTypeInfo);
  74. addReflectableArrayField("mEntries", 1, &ManagedSerializableDictionaryRTTI::getEntry, &ManagedSerializableDictionaryRTTI::getNumEntries,
  75. &ManagedSerializableDictionaryRTTI::setEntry, &ManagedSerializableDictionaryRTTI::setNumEntries);
  76. }
  77. virtual void onSerializationStarted(IReflectable* obj) override
  78. {
  79. ManagedSerializableDictionary* serializableObject = static_cast<ManagedSerializableDictionary*>(obj);
  80. Vector<ManagedSerializableDictionaryKeyValue> sequentialData;
  81. auto enumerator = serializableObject->getEnumerator();
  82. while (enumerator.moveNext())
  83. sequentialData.push_back(ManagedSerializableDictionaryKeyValue(enumerator.getKey(), enumerator.getValue()));
  84. serializableObject->mRTTIData = sequentialData;
  85. }
  86. virtual void onSerializationEnded(IReflectable* obj) override
  87. {
  88. ManagedSerializableDictionary* serializableObject = static_cast<ManagedSerializableDictionary*>(obj);
  89. serializableObject->mRTTIData = nullptr;
  90. }
  91. virtual const String& getRTTIName() override
  92. {
  93. static String name = "ScriptSerializableDictionary";
  94. return name;
  95. }
  96. virtual UINT32 getRTTIId() override
  97. {
  98. return TID_ScriptSerializableDictionary;
  99. }
  100. virtual std::shared_ptr<IReflectable> newRTTIObject()
  101. {
  102. return ManagedSerializableDictionary::createEmpty();
  103. }
  104. };
  105. }