BsManagedSerializableDictionaryRTTI.h 4.6 KB

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