BsSerializedObject.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #include "BsSerializedObject.h"
  2. #include "BsSerializedObjectRTTI.h"
  3. namespace BansheeEngine
  4. {
  5. SPtr<SerializedInstance> SerializedField::clone(bool cloneData)
  6. {
  7. SPtr<SerializedField> copy = bs_shared_ptr<SerializedField>();
  8. copy->size = size;
  9. if (cloneData)
  10. {
  11. copy->value = (UINT8*)bs_alloc(size);
  12. memcpy(copy->value, value, size);
  13. copy->ownsMemory = true;
  14. }
  15. else
  16. {
  17. copy->value = value;
  18. copy->ownsMemory = false;
  19. }
  20. return copy;
  21. }
  22. SPtr<SerializedInstance> SerializedObject::clone(bool cloneData)
  23. {
  24. SPtr<SerializedObject> copy = bs_shared_ptr<SerializedObject>();
  25. copy->subObjects = Vector<SerializedSubObject>(subObjects.size());
  26. UINT32 i = 0;
  27. for (auto& subObject : subObjects)
  28. {
  29. copy->subObjects[i].typeId = subObject.typeId;
  30. for (auto& entryPair : subObject.entries)
  31. {
  32. SerializedEntry entry = entryPair.second;
  33. if (entry.serialized != nullptr)
  34. entry.serialized = entry.serialized->clone(cloneData);
  35. copy->subObjects[i].entries[entryPair.first] = entry;
  36. }
  37. i++;
  38. }
  39. return copy;
  40. }
  41. SPtr<SerializedInstance> SerializedArray::clone(bool cloneData)
  42. {
  43. SPtr<SerializedArray> copy = bs_shared_ptr<SerializedArray>();
  44. copy->numElements = numElements;
  45. for (auto& entryPair : entries)
  46. {
  47. SerializedArrayEntry entry = entryPair.second;
  48. entry.serialized = entry.serialized->clone(cloneData);
  49. copy->entries[entryPair.first] = entry;
  50. }
  51. return copy;
  52. }
  53. RTTITypeBase* SerializedInstance::getRTTIStatic()
  54. {
  55. return SerializedInstanceRTTI::instance();
  56. }
  57. RTTITypeBase* SerializedInstance::getRTTI() const
  58. {
  59. return SerializedInstance::getRTTIStatic();
  60. }
  61. RTTITypeBase* SerializedField::getRTTIStatic()
  62. {
  63. return SerializedFieldRTTI::instance();
  64. }
  65. RTTITypeBase* SerializedField::getRTTI() const
  66. {
  67. return SerializedField::getRTTIStatic();
  68. }
  69. RTTITypeBase* SerializedObject::getRTTIStatic()
  70. {
  71. return SerializedObjectRTTI::instance();
  72. }
  73. RTTITypeBase* SerializedObject::getRTTI() const
  74. {
  75. return SerializedObject::getRTTIStatic();
  76. }
  77. RTTITypeBase* SerializedArray::getRTTIStatic()
  78. {
  79. return SerializedArrayRTTI::instance();
  80. }
  81. RTTITypeBase* SerializedArray::getRTTI() const
  82. {
  83. return SerializedArray::getRTTIStatic();
  84. }
  85. RTTITypeBase* SerializedSubObject::getRTTIStatic()
  86. {
  87. return SerializedSubObjectRTTI::instance();
  88. }
  89. RTTITypeBase* SerializedSubObject::getRTTI() const
  90. {
  91. return SerializedSubObject::getRTTIStatic();
  92. }
  93. RTTITypeBase* SerializedEntry::getRTTIStatic()
  94. {
  95. return SerializedEntryRTTI::instance();
  96. }
  97. RTTITypeBase* SerializedEntry::getRTTI() const
  98. {
  99. return SerializedEntry::getRTTIStatic();
  100. }
  101. RTTITypeBase* SerializedArrayEntry::getRTTIStatic()
  102. {
  103. return SerializedArrayEntryRTTI::instance();
  104. }
  105. RTTITypeBase* SerializedArrayEntry::getRTTI() const
  106. {
  107. return SerializedArrayEntry::getRTTIStatic();
  108. }
  109. }