BsManagedSerializableDictionaryRTTI.h 4.6 KB

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