BsManagedSerializableDictionaryRTTI.h 4.6 KB

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