BsSerializedObject.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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. entry.serialized = entry.serialized->clone(cloneData);
  34. copy->subObjects[i].entries[entryPair.first] = entry;
  35. }
  36. i++;
  37. }
  38. return copy;
  39. }
  40. SPtr<SerializedInstance> SerializedArray::clone(bool cloneData)
  41. {
  42. SPtr<SerializedArray> copy = bs_shared_ptr<SerializedArray>();
  43. copy->numElements = numElements;
  44. for (auto& entryPair : entries)
  45. {
  46. SerializedArrayEntry entry = entryPair.second;
  47. entry.serialized = entry.serialized->clone(cloneData);
  48. copy->entries[entryPair.first] = entry;
  49. }
  50. return copy;
  51. }
  52. RTTITypeBase* SerializedInstance::getRTTIStatic()
  53. {
  54. return SerializedInstanceRTTI::instance();
  55. }
  56. RTTITypeBase* SerializedInstance::getRTTI() const
  57. {
  58. return SerializedInstance::getRTTIStatic();
  59. }
  60. RTTITypeBase* SerializedField::getRTTIStatic()
  61. {
  62. return SerializedFieldRTTI::instance();
  63. }
  64. RTTITypeBase* SerializedField::getRTTI() const
  65. {
  66. return SerializedField::getRTTIStatic();
  67. }
  68. RTTITypeBase* SerializedObject::getRTTIStatic()
  69. {
  70. return SerializedObjectRTTI::instance();
  71. }
  72. RTTITypeBase* SerializedObject::getRTTI() const
  73. {
  74. return SerializedObject::getRTTIStatic();
  75. }
  76. RTTITypeBase* SerializedArray::getRTTIStatic()
  77. {
  78. return SerializedArrayRTTI::instance();
  79. }
  80. RTTITypeBase* SerializedArray::getRTTI() const
  81. {
  82. return SerializedArray::getRTTIStatic();
  83. }
  84. RTTITypeBase* SerializedSubObject::getRTTIStatic()
  85. {
  86. return SerializedSubObjectRTTI::instance();
  87. }
  88. RTTITypeBase* SerializedSubObject::getRTTI() const
  89. {
  90. return SerializedSubObject::getRTTIStatic();
  91. }
  92. RTTITypeBase* SerializedEntry::getRTTIStatic()
  93. {
  94. return SerializedEntryRTTI::instance();
  95. }
  96. RTTITypeBase* SerializedEntry::getRTTI() const
  97. {
  98. return SerializedEntry::getRTTIStatic();
  99. }
  100. RTTITypeBase* SerializedArrayEntry::getRTTIStatic()
  101. {
  102. return SerializedArrayEntryRTTI::instance();
  103. }
  104. RTTITypeBase* SerializedArrayEntry::getRTTI() const
  105. {
  106. return SerializedArrayEntry::getRTTIStatic();
  107. }
  108. }