BsSerializedObject.cpp 3.3 KB

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