2
0

BsManagedSerializableField.cpp 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Serialization/BsManagedSerializableField.h"
  4. #include "Serialization/BsManagedSerializableObjectInfo.h"
  5. #include "RTTI/BsManagedSerializableFieldRTTI.h"
  6. #include "BsMonoUtil.h"
  7. #include "BsMonoManager.h"
  8. #include "BsScriptResourceManager.h"
  9. #include "BsScriptGameObjectManager.h"
  10. #include "Wrappers/BsScriptSpriteTexture.h"
  11. #include "Wrappers/BsScriptManagedResource.h"
  12. #include "Wrappers/BsScriptSceneObject.h"
  13. #include "Wrappers/BsScriptComponent.h"
  14. #include "Wrappers/BsScriptManagedComponent.h"
  15. #include "Serialization/BsManagedSerializableObject.h"
  16. #include "Serialization/BsManagedSerializableArray.h"
  17. #include "Serialization/BsManagedSerializableList.h"
  18. #include "Serialization/BsManagedSerializableDictionary.h"
  19. #include "Serialization/BsScriptAssemblyManager.h"
  20. namespace bs
  21. {
  22. template<class T>
  23. bool compareFieldData(const T* a, const SPtr<ManagedSerializableFieldData>& b)
  24. {
  25. if (rtti_is_of_type<T>(b))
  26. {
  27. auto castObj = std::static_pointer_cast<T>(b);
  28. return a->value == castObj->value;
  29. }
  30. return false;
  31. }
  32. ManagedSerializableFieldKey::ManagedSerializableFieldKey()
  33. :mTypeId(0), mFieldId(0)
  34. { }
  35. ManagedSerializableFieldKey::ManagedSerializableFieldKey(UINT16 typeId, UINT16 fieldId)
  36. :mTypeId(typeId), mFieldId(fieldId)
  37. { }
  38. SPtr<ManagedSerializableFieldKey> ManagedSerializableFieldKey::create(UINT16 typeId, UINT16 fieldId)
  39. {
  40. SPtr<ManagedSerializableFieldKey> fieldKey = bs_shared_ptr_new<ManagedSerializableFieldKey>(typeId, fieldId);
  41. return fieldKey;
  42. }
  43. SPtr<ManagedSerializableFieldDataEntry> ManagedSerializableFieldDataEntry::create(const SPtr<ManagedSerializableFieldKey>& key, const SPtr<ManagedSerializableFieldData>& value)
  44. {
  45. SPtr<ManagedSerializableFieldDataEntry> fieldDataEntry = bs_shared_ptr_new<ManagedSerializableFieldDataEntry>();
  46. fieldDataEntry->mKey = key;
  47. fieldDataEntry->mValue = value;
  48. return fieldDataEntry;
  49. }
  50. SPtr<ManagedSerializableFieldData> ManagedSerializableFieldData::create(const SPtr<ManagedSerializableTypeInfo>& typeInfo, MonoObject* value)
  51. {
  52. return create(typeInfo, value, true);
  53. }
  54. SPtr<ManagedSerializableFieldData> ManagedSerializableFieldData::createDefault(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  55. {
  56. return create(typeInfo, nullptr, false);
  57. }
  58. SPtr<ManagedSerializableFieldData> ManagedSerializableFieldData::create(const SPtr<ManagedSerializableTypeInfo>& typeInfo, MonoObject* value, bool allowNull)
  59. {
  60. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  61. {
  62. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  63. switch (primitiveTypeInfo->mType)
  64. {
  65. case ScriptPrimitiveType::Bool:
  66. {
  67. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataBool>();
  68. if(value != nullptr)
  69. memcpy(&fieldData->value, MonoUtil::unbox(value), sizeof(fieldData->value));
  70. return fieldData;
  71. }
  72. case ScriptPrimitiveType::Char:
  73. {
  74. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataChar>();
  75. if(value != nullptr)
  76. memcpy(&fieldData->value, MonoUtil::unbox(value), sizeof(fieldData->value));
  77. return fieldData;
  78. }
  79. case ScriptPrimitiveType::I8:
  80. {
  81. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataI8>();
  82. if(value != nullptr)
  83. memcpy(&fieldData->value, MonoUtil::unbox(value), sizeof(fieldData->value));
  84. return fieldData;
  85. }
  86. case ScriptPrimitiveType::U8:
  87. {
  88. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataU8>();
  89. if(value != nullptr)
  90. memcpy(&fieldData->value, MonoUtil::unbox(value), sizeof(fieldData->value));
  91. return fieldData;
  92. }
  93. case ScriptPrimitiveType::I16:
  94. {
  95. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataI16>();
  96. if(value != nullptr)
  97. memcpy(&fieldData->value, MonoUtil::unbox(value), sizeof(fieldData->value));
  98. return fieldData;
  99. }
  100. case ScriptPrimitiveType::U16:
  101. {
  102. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataU16>();
  103. if(value != nullptr)
  104. memcpy(&fieldData->value, MonoUtil::unbox(value), sizeof(fieldData->value));
  105. return fieldData;
  106. }
  107. case ScriptPrimitiveType::I32:
  108. {
  109. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataI32>();
  110. if(value != nullptr)
  111. memcpy(&fieldData->value, MonoUtil::unbox(value), sizeof(fieldData->value));
  112. return fieldData;
  113. }
  114. case ScriptPrimitiveType::U32:
  115. {
  116. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataU32>();
  117. if(value != nullptr)
  118. memcpy(&fieldData->value, MonoUtil::unbox(value), sizeof(fieldData->value));
  119. return fieldData;
  120. }
  121. case ScriptPrimitiveType::I64:
  122. {
  123. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataI64>();
  124. if(value != nullptr)
  125. memcpy(&fieldData->value, MonoUtil::unbox(value), sizeof(fieldData->value));
  126. return fieldData;
  127. }
  128. case ScriptPrimitiveType::U64:
  129. {
  130. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataU64>();
  131. if(value != nullptr)
  132. memcpy(&fieldData->value, MonoUtil::unbox(value), sizeof(fieldData->value));
  133. return fieldData;
  134. }
  135. case ScriptPrimitiveType::Float:
  136. {
  137. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataFloat>();
  138. if(value != nullptr)
  139. memcpy(&fieldData->value, MonoUtil::unbox(value), sizeof(fieldData->value));
  140. return fieldData;
  141. }
  142. case ScriptPrimitiveType::Double:
  143. {
  144. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataDouble>();
  145. if(value != nullptr)
  146. memcpy(&fieldData->value, MonoUtil::unbox(value), sizeof(fieldData->value));
  147. return fieldData;
  148. }
  149. case ScriptPrimitiveType::String:
  150. {
  151. MonoString* strVal = (MonoString*)(value);
  152. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataString>();
  153. if (strVal != nullptr)
  154. fieldData->value = MonoUtil::monoToWString(strVal);
  155. else
  156. fieldData->isNull = allowNull;
  157. return fieldData;
  158. }
  159. default:
  160. break;
  161. }
  162. }
  163. else if (typeInfo->getTypeId() == TID_SerializableTypeInfoRef)
  164. {
  165. auto refTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoRef>(typeInfo);
  166. switch (refTypeInfo->mType)
  167. {
  168. case ScriptReferenceType::SceneObject:
  169. {
  170. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataGameObjectRef>();
  171. if (value != nullptr)
  172. {
  173. ScriptSceneObject* scriptSceneObject = ScriptSceneObject::toNative(value);
  174. fieldData->value = static_object_cast<SceneObject>(scriptSceneObject->getNativeHandle());
  175. }
  176. return fieldData;
  177. }
  178. case ScriptReferenceType::ManagedComponentBase:
  179. case ScriptReferenceType::ManagedComponent:
  180. {
  181. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataGameObjectRef>();
  182. if (value != nullptr)
  183. {
  184. ScriptManagedComponent* scriptComponent = ScriptManagedComponent::toNative(value);
  185. fieldData->value = static_object_cast<Component>(scriptComponent->getNativeHandle());
  186. }
  187. return fieldData;
  188. }
  189. case ScriptReferenceType::BuiltinComponentBase:
  190. case ScriptReferenceType::BuiltinComponent:
  191. {
  192. BuiltinComponentInfo* info = ScriptAssemblyManager::instance().getBuiltinComponentInfo(refTypeInfo->mRTIITypeId);
  193. if (info == nullptr)
  194. return nullptr;
  195. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataGameObjectRef>();
  196. if (value != nullptr)
  197. {
  198. ScriptComponentBase* scriptComponent = ScriptComponent::toNative(value);
  199. fieldData->value = scriptComponent->getComponent();
  200. }
  201. return fieldData;
  202. }
  203. case ScriptReferenceType::ManagedResourceBase:
  204. case ScriptReferenceType::ManagedResource:
  205. {
  206. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataResourceRef>();
  207. if (value != nullptr)
  208. {
  209. ScriptResourceBase* scriptResource = ScriptManagedResource::toNative(value);
  210. fieldData->value = scriptResource->getGenericHandle();
  211. }
  212. return fieldData;
  213. }
  214. case ScriptReferenceType::BuiltinResourceBase:
  215. case ScriptReferenceType::BuiltinResource:
  216. {
  217. BuiltinResourceInfo* info = ScriptAssemblyManager::instance().getBuiltinResourceInfo(refTypeInfo->mRTIITypeId);
  218. if (info == nullptr)
  219. return nullptr;
  220. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataResourceRef>();
  221. if (value != nullptr)
  222. {
  223. ScriptResourceBase* scriptResource = ScriptResource::toNative(value);
  224. fieldData->value = scriptResource->getGenericHandle();
  225. }
  226. return fieldData;
  227. }
  228. default:
  229. break;
  230. }
  231. }
  232. else if(typeInfo->getTypeId() == TID_SerializableTypeInfoObject)
  233. {
  234. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataObject>();
  235. if (value != nullptr)
  236. fieldData->value = ManagedSerializableObject::createFromExisting(value);
  237. else if (!allowNull)
  238. fieldData->value = ManagedSerializableObject::createNew(std::static_pointer_cast<ManagedSerializableTypeInfoObject>(typeInfo));
  239. return fieldData;
  240. }
  241. else if(typeInfo->getTypeId() == TID_SerializableTypeInfoArray)
  242. {
  243. SPtr<ManagedSerializableTypeInfoArray> arrayTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoArray>(typeInfo);
  244. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataArray>();
  245. if(value != nullptr)
  246. fieldData->value = ManagedSerializableArray::createFromExisting(value, arrayTypeInfo);
  247. else if (!allowNull)
  248. {
  249. Vector<UINT32> sizes(arrayTypeInfo->mRank, 0);
  250. fieldData->value = ManagedSerializableArray::createNew(arrayTypeInfo, sizes);
  251. }
  252. return fieldData;
  253. }
  254. else if(typeInfo->getTypeId() == TID_SerializableTypeInfoList)
  255. {
  256. SPtr<ManagedSerializableTypeInfoList> listTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoList>(typeInfo);
  257. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataList>();
  258. if(value != nullptr)
  259. fieldData->value = ManagedSerializableList::createFromExisting(value, listTypeInfo);
  260. else if (!allowNull)
  261. fieldData->value = ManagedSerializableList::createNew(listTypeInfo, 0);
  262. return fieldData;
  263. }
  264. else if(typeInfo->getTypeId() == TID_SerializableTypeInfoDictionary)
  265. {
  266. SPtr<ManagedSerializableTypeInfoDictionary> dictTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoDictionary>(typeInfo);
  267. auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataDictionary>();
  268. if(value != nullptr)
  269. fieldData->value = ManagedSerializableDictionary::createFromExisting(value, dictTypeInfo);
  270. else if (!allowNull)
  271. fieldData->value = ManagedSerializableDictionary::createNew(dictTypeInfo);
  272. return fieldData;
  273. }
  274. return nullptr;
  275. }
  276. void* ManagedSerializableFieldDataBool::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  277. {
  278. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  279. {
  280. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  281. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Bool)
  282. return &value;
  283. }
  284. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  285. return nullptr;
  286. }
  287. void* ManagedSerializableFieldDataChar::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  288. {
  289. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  290. {
  291. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  292. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Char)
  293. return &value;
  294. }
  295. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  296. return nullptr;
  297. }
  298. void* ManagedSerializableFieldDataI8::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  299. {
  300. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  301. {
  302. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  303. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I8)
  304. return &value;
  305. }
  306. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  307. return nullptr;
  308. }
  309. void* ManagedSerializableFieldDataU8::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  310. {
  311. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  312. {
  313. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  314. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U8)
  315. return &value;
  316. }
  317. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  318. return nullptr;
  319. }
  320. void* ManagedSerializableFieldDataI16::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  321. {
  322. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  323. {
  324. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  325. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I16)
  326. return &value;
  327. }
  328. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  329. return nullptr;
  330. }
  331. void* ManagedSerializableFieldDataU16::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  332. {
  333. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  334. {
  335. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  336. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U16)
  337. return &value;
  338. }
  339. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  340. return nullptr;
  341. }
  342. void* ManagedSerializableFieldDataI32::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  343. {
  344. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  345. {
  346. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  347. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I32)
  348. return &value;
  349. }
  350. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  351. return nullptr;
  352. }
  353. void* ManagedSerializableFieldDataU32::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  354. {
  355. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  356. {
  357. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  358. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U32)
  359. return &value;
  360. }
  361. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  362. return nullptr;
  363. }
  364. void* ManagedSerializableFieldDataI64::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  365. {
  366. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  367. {
  368. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  369. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I64)
  370. return &value;
  371. }
  372. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  373. return nullptr;
  374. }
  375. void* ManagedSerializableFieldDataU64::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  376. {
  377. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  378. {
  379. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  380. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U64)
  381. return &value;
  382. }
  383. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  384. return nullptr;
  385. }
  386. void* ManagedSerializableFieldDataFloat::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  387. {
  388. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  389. {
  390. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  391. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Float)
  392. return &value;
  393. }
  394. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  395. return nullptr;
  396. }
  397. void* ManagedSerializableFieldDataDouble::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  398. {
  399. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  400. {
  401. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  402. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Double)
  403. return &value;
  404. }
  405. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  406. return nullptr;
  407. }
  408. void* ManagedSerializableFieldDataString::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  409. {
  410. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  411. {
  412. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  413. if(primitiveTypeInfo->mType == ScriptPrimitiveType::String)
  414. {
  415. if (!isNull)
  416. return MonoUtil::wstringToMono(value);
  417. else
  418. return nullptr;
  419. }
  420. }
  421. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  422. return nullptr;
  423. }
  424. void* ManagedSerializableFieldDataResourceRef::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  425. {
  426. if(typeInfo->getTypeId() == TID_SerializableTypeInfoRef)
  427. {
  428. auto refTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoRef>(typeInfo);
  429. if (!value.isLoaded())
  430. return nullptr;
  431. if (refTypeInfo->mType == ScriptReferenceType::ManagedResourceBase ||
  432. refTypeInfo->mType == ScriptReferenceType::ManagedResource)
  433. {
  434. ScriptResourceBase* scriptResource = ScriptResourceManager::instance().getScriptResource(value, false);
  435. assert(scriptResource != nullptr);
  436. return scriptResource->getManagedInstance();
  437. }
  438. else if (refTypeInfo->mType == ScriptReferenceType::BuiltinResourceBase ||
  439. refTypeInfo->mType == ScriptReferenceType::BuiltinResource)
  440. {
  441. ScriptResourceBase* scriptResource = ScriptResourceManager::instance().getScriptResource(value, true);
  442. return scriptResource->getManagedInstance();
  443. }
  444. if (value.isLoaded())
  445. {
  446. }
  447. else
  448. return nullptr;
  449. }
  450. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  451. return nullptr;
  452. }
  453. void* ManagedSerializableFieldDataGameObjectRef::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  454. {
  455. if(typeInfo->getTypeId() == TID_SerializableTypeInfoRef)
  456. {
  457. auto refTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoRef>(typeInfo);
  458. if(refTypeInfo->mType == ScriptReferenceType::SceneObject)
  459. {
  460. if(value)
  461. {
  462. ScriptSceneObject* scriptSceneObject = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(value);
  463. return scriptSceneObject->getManagedInstance();
  464. }
  465. else
  466. return nullptr;
  467. }
  468. else if(refTypeInfo->mType == ScriptReferenceType::ManagedComponentBase ||
  469. refTypeInfo->mType == ScriptReferenceType::ManagedComponent)
  470. {
  471. if (value)
  472. {
  473. ScriptManagedComponent* scriptComponent = ScriptGameObjectManager::instance().getManagedScriptComponent(value);
  474. assert(scriptComponent != nullptr);
  475. return scriptComponent->getManagedInstance();
  476. }
  477. else
  478. return nullptr;
  479. }
  480. else if (refTypeInfo->mType == ScriptReferenceType::BuiltinComponentBase ||
  481. refTypeInfo->mType == ScriptReferenceType::BuiltinComponent)
  482. {
  483. if (value)
  484. {
  485. ScriptComponentBase* scriptComponent = ScriptGameObjectManager::instance().getBuiltinScriptComponent(value);
  486. assert(scriptComponent != nullptr);
  487. return scriptComponent->getManagedInstance();
  488. }
  489. else
  490. return nullptr;
  491. }
  492. }
  493. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  494. return nullptr;
  495. }
  496. void* ManagedSerializableFieldDataObject::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  497. {
  498. if(typeInfo->getTypeId() == TID_SerializableTypeInfoObject)
  499. {
  500. auto objectTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoObject>(typeInfo);
  501. if(value != nullptr)
  502. {
  503. if(objectTypeInfo->mValueType)
  504. {
  505. MonoObject* managedInstance = value->getManagedInstance();
  506. if(managedInstance != nullptr)
  507. return MonoUtil::unbox(managedInstance); // Structs are passed as raw types because mono expects them as such
  508. }
  509. else
  510. return value->getManagedInstance();
  511. }
  512. return nullptr;
  513. }
  514. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  515. return nullptr;
  516. }
  517. void* ManagedSerializableFieldDataArray::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  518. {
  519. if(typeInfo->getTypeId() == TID_SerializableTypeInfoArray)
  520. {
  521. auto objectTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoArray>(typeInfo);
  522. if(value != nullptr)
  523. return value->getManagedInstance();
  524. return nullptr;
  525. }
  526. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  527. return nullptr;
  528. }
  529. void* ManagedSerializableFieldDataList::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  530. {
  531. if(typeInfo->getTypeId() == TID_SerializableTypeInfoList)
  532. {
  533. auto listTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoList>(typeInfo);
  534. if(value != nullptr)
  535. return value->getManagedInstance();
  536. return nullptr;
  537. }
  538. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  539. return nullptr;
  540. }
  541. void* ManagedSerializableFieldDataDictionary::getValue(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  542. {
  543. if(typeInfo->getTypeId() == TID_SerializableTypeInfoDictionary)
  544. {
  545. auto dictionaryTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoDictionary>(typeInfo);
  546. if(value != nullptr)
  547. return value->getManagedInstance();
  548. return nullptr;
  549. }
  550. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  551. return nullptr;
  552. }
  553. MonoObject* ManagedSerializableFieldDataBool::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  554. {
  555. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  556. {
  557. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  558. if (primitiveTypeInfo->mType == ScriptPrimitiveType::Bool)
  559. return MonoUtil::box(MonoUtil::getBoolClass(), &value);
  560. }
  561. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  562. return nullptr;
  563. }
  564. MonoObject* ManagedSerializableFieldDataChar::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  565. {
  566. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  567. {
  568. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  569. if (primitiveTypeInfo->mType == ScriptPrimitiveType::Char)
  570. return MonoUtil::box(MonoUtil::getCharClass(), &value);
  571. }
  572. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  573. return nullptr;
  574. }
  575. MonoObject* ManagedSerializableFieldDataI8::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  576. {
  577. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  578. {
  579. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  580. if (primitiveTypeInfo->mType == ScriptPrimitiveType::I8)
  581. return MonoUtil::box(MonoUtil::getSByteClass(), &value);
  582. }
  583. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  584. return nullptr;
  585. }
  586. MonoObject* ManagedSerializableFieldDataU8::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  587. {
  588. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  589. {
  590. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  591. if (primitiveTypeInfo->mType == ScriptPrimitiveType::U8)
  592. return MonoUtil::box(MonoUtil::getByteClass(), &value);
  593. }
  594. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  595. return nullptr;
  596. }
  597. MonoObject* ManagedSerializableFieldDataI16::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  598. {
  599. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  600. {
  601. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  602. if (primitiveTypeInfo->mType == ScriptPrimitiveType::I16)
  603. return MonoUtil::box(MonoUtil::getINT16Class(), &value);
  604. }
  605. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  606. return nullptr;
  607. }
  608. MonoObject* ManagedSerializableFieldDataU16::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  609. {
  610. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  611. {
  612. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  613. if (primitiveTypeInfo->mType == ScriptPrimitiveType::U16)
  614. return MonoUtil::box(MonoUtil::getUINT16Class(), &value);
  615. }
  616. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  617. return nullptr;
  618. }
  619. MonoObject* ManagedSerializableFieldDataI32::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  620. {
  621. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  622. {
  623. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  624. if (primitiveTypeInfo->mType == ScriptPrimitiveType::I32)
  625. return MonoUtil::box(MonoUtil::getINT32Class(), &value);
  626. }
  627. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  628. return nullptr;
  629. }
  630. MonoObject* ManagedSerializableFieldDataU32::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  631. {
  632. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  633. {
  634. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  635. if (primitiveTypeInfo->mType == ScriptPrimitiveType::U32)
  636. return MonoUtil::box(MonoUtil::getUINT32Class(), &value);
  637. }
  638. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  639. return nullptr;
  640. }
  641. MonoObject* ManagedSerializableFieldDataI64::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  642. {
  643. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  644. {
  645. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  646. if (primitiveTypeInfo->mType == ScriptPrimitiveType::I64)
  647. return MonoUtil::box(MonoUtil::getINT64Class(), &value);
  648. }
  649. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  650. return nullptr;
  651. }
  652. MonoObject* ManagedSerializableFieldDataU64::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  653. {
  654. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  655. {
  656. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  657. if (primitiveTypeInfo->mType == ScriptPrimitiveType::U64)
  658. return MonoUtil::box(MonoUtil::getUINT64Class(), &value);
  659. }
  660. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  661. return nullptr;
  662. }
  663. MonoObject* ManagedSerializableFieldDataFloat::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  664. {
  665. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  666. {
  667. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  668. if (primitiveTypeInfo->mType == ScriptPrimitiveType::Float)
  669. return MonoUtil::box(MonoUtil::getFloatClass(), &value);
  670. }
  671. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  672. return nullptr;
  673. }
  674. MonoObject* ManagedSerializableFieldDataDouble::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  675. {
  676. if (typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  677. {
  678. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  679. if (primitiveTypeInfo->mType == ScriptPrimitiveType::Double)
  680. return MonoUtil::box(MonoUtil::getDoubleClass(), &value);
  681. }
  682. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  683. return nullptr;
  684. }
  685. MonoObject* ManagedSerializableFieldDataString::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  686. {
  687. return (MonoObject*)getValue(typeInfo);
  688. }
  689. MonoObject* ManagedSerializableFieldDataResourceRef::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  690. {
  691. return (MonoObject*)getValue(typeInfo);
  692. }
  693. MonoObject* ManagedSerializableFieldDataGameObjectRef::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  694. {
  695. return (MonoObject*)getValue(typeInfo);
  696. }
  697. MonoObject* ManagedSerializableFieldDataObject::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  698. {
  699. if (typeInfo->getTypeId() == TID_SerializableTypeInfoObject)
  700. {
  701. auto objectTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoObject>(typeInfo);
  702. if (value != nullptr)
  703. return value->getManagedInstance();
  704. return nullptr;
  705. }
  706. BS_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  707. return nullptr;
  708. }
  709. MonoObject* ManagedSerializableFieldDataArray::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  710. {
  711. return (MonoObject*)getValue(typeInfo);
  712. }
  713. MonoObject* ManagedSerializableFieldDataList::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  714. {
  715. return (MonoObject*)getValue(typeInfo);
  716. }
  717. MonoObject* ManagedSerializableFieldDataDictionary::getValueBoxed(const SPtr<ManagedSerializableTypeInfo>& typeInfo)
  718. {
  719. return (MonoObject*)getValue(typeInfo);
  720. }
  721. bool ManagedSerializableFieldDataBool::equals(const SPtr<ManagedSerializableFieldData>& other)
  722. {
  723. return compareFieldData(this, other);
  724. }
  725. bool ManagedSerializableFieldDataChar::equals(const SPtr<ManagedSerializableFieldData>& other)
  726. {
  727. return compareFieldData(this, other);
  728. }
  729. bool ManagedSerializableFieldDataI8::equals(const SPtr<ManagedSerializableFieldData>& other)
  730. {
  731. return compareFieldData(this, other);
  732. }
  733. bool ManagedSerializableFieldDataU8::equals(const SPtr<ManagedSerializableFieldData>& other)
  734. {
  735. return compareFieldData(this, other);
  736. }
  737. bool ManagedSerializableFieldDataI16::equals(const SPtr<ManagedSerializableFieldData>& other)
  738. {
  739. return compareFieldData(this, other);
  740. }
  741. bool ManagedSerializableFieldDataU16::equals(const SPtr<ManagedSerializableFieldData>& other)
  742. {
  743. return compareFieldData(this, other);
  744. }
  745. bool ManagedSerializableFieldDataI32::equals(const SPtr<ManagedSerializableFieldData>& other)
  746. {
  747. return compareFieldData(this, other);
  748. }
  749. bool ManagedSerializableFieldDataU32::equals(const SPtr<ManagedSerializableFieldData>& other)
  750. {
  751. return compareFieldData(this, other);
  752. }
  753. bool ManagedSerializableFieldDataI64::equals(const SPtr<ManagedSerializableFieldData>& other)
  754. {
  755. return compareFieldData(this, other);
  756. }
  757. bool ManagedSerializableFieldDataU64::equals(const SPtr<ManagedSerializableFieldData>& other)
  758. {
  759. return compareFieldData(this, other);
  760. }
  761. bool ManagedSerializableFieldDataFloat::equals(const SPtr<ManagedSerializableFieldData>& other)
  762. {
  763. return compareFieldData(this, other);
  764. }
  765. bool ManagedSerializableFieldDataDouble::equals(const SPtr<ManagedSerializableFieldData>& other)
  766. {
  767. return compareFieldData(this, other);
  768. }
  769. bool ManagedSerializableFieldDataString::equals(const SPtr<ManagedSerializableFieldData>& other)
  770. {
  771. if (rtti_is_of_type<ManagedSerializableFieldDataString>(other))
  772. {
  773. auto castObj = std::static_pointer_cast<ManagedSerializableFieldDataString>(other);
  774. return (isNull == true && isNull == castObj->isNull) || value == castObj->value;
  775. }
  776. return false;
  777. }
  778. bool ManagedSerializableFieldDataResourceRef::equals(const SPtr<ManagedSerializableFieldData>& other)
  779. {
  780. return compareFieldData(this, other);
  781. }
  782. bool ManagedSerializableFieldDataGameObjectRef::equals(const SPtr<ManagedSerializableFieldData>& other)
  783. {
  784. return compareFieldData(this, other);
  785. }
  786. bool ManagedSerializableFieldDataObject::equals(const SPtr<ManagedSerializableFieldData>& other)
  787. {
  788. return compareFieldData(this, other);
  789. }
  790. bool ManagedSerializableFieldDataArray::equals(const SPtr<ManagedSerializableFieldData>& other)
  791. {
  792. return compareFieldData(this, other);
  793. }
  794. bool ManagedSerializableFieldDataList::equals(const SPtr<ManagedSerializableFieldData>& other)
  795. {
  796. return compareFieldData(this, other);
  797. }
  798. bool ManagedSerializableFieldDataDictionary::equals(const SPtr<ManagedSerializableFieldData>& other)
  799. {
  800. return compareFieldData(this, other);
  801. }
  802. size_t ManagedSerializableFieldDataBool::getHash()
  803. {
  804. std::hash<bool> hasher;
  805. return hasher(value);
  806. }
  807. size_t ManagedSerializableFieldDataChar::getHash()
  808. {
  809. std::hash<wchar_t> hasher;
  810. return hasher(value);
  811. }
  812. size_t ManagedSerializableFieldDataI8::getHash()
  813. {
  814. std::hash<INT8> hasher;
  815. return hasher(value);
  816. }
  817. size_t ManagedSerializableFieldDataU8::getHash()
  818. {
  819. std::hash<UINT8> hasher;
  820. return hasher(value);
  821. }
  822. size_t ManagedSerializableFieldDataI16::getHash()
  823. {
  824. std::hash<INT16> hasher;
  825. return hasher(value);
  826. }
  827. size_t ManagedSerializableFieldDataU16::getHash()
  828. {
  829. std::hash<UINT16> hasher;
  830. return hasher(value);
  831. }
  832. size_t ManagedSerializableFieldDataI32::getHash()
  833. {
  834. std::hash<INT32> hasher;
  835. return hasher(value);
  836. }
  837. size_t ManagedSerializableFieldDataU32::getHash()
  838. {
  839. std::hash<UINT32> hasher;
  840. return hasher(value);
  841. }
  842. size_t ManagedSerializableFieldDataI64::getHash()
  843. {
  844. std::hash<INT64> hasher;
  845. return hasher(value);
  846. }
  847. size_t ManagedSerializableFieldDataU64::getHash()
  848. {
  849. std::hash<UINT64> hasher;
  850. return hasher(value);
  851. }
  852. size_t ManagedSerializableFieldDataFloat::getHash()
  853. {
  854. std::hash<float> hasher;
  855. return hasher(value);
  856. }
  857. size_t ManagedSerializableFieldDataDouble::getHash()
  858. {
  859. std::hash<double> hasher;
  860. return hasher(value);
  861. }
  862. size_t ManagedSerializableFieldDataString::getHash()
  863. {
  864. std::hash<WString> hasher;
  865. return hasher(value);
  866. }
  867. size_t ManagedSerializableFieldDataResourceRef::getHash()
  868. {
  869. std::hash<String> hasher;
  870. return hasher(value.getUUID());
  871. }
  872. size_t ManagedSerializableFieldDataGameObjectRef::getHash()
  873. {
  874. std::hash<UINT64> hasher;
  875. return hasher(value.getInstanceId());
  876. }
  877. size_t ManagedSerializableFieldDataObject::getHash()
  878. {
  879. std::hash<SPtr<ManagedSerializableObject>> hasher;
  880. return hasher(value);
  881. }
  882. size_t ManagedSerializableFieldDataArray::getHash()
  883. {
  884. std::hash<SPtr<ManagedSerializableArray>> hasher;
  885. return hasher(value);
  886. }
  887. size_t ManagedSerializableFieldDataList::getHash()
  888. {
  889. std::hash<SPtr<ManagedSerializableList>> hasher;
  890. return hasher(value);
  891. }
  892. size_t ManagedSerializableFieldDataDictionary::getHash()
  893. {
  894. std::hash<SPtr<ManagedSerializableDictionary>> hasher;
  895. return hasher(value);
  896. }
  897. void ManagedSerializableFieldDataObject::serialize()
  898. {
  899. if (value != nullptr)
  900. value->serialize();
  901. }
  902. void ManagedSerializableFieldDataObject::deserialize()
  903. {
  904. if (value != nullptr)
  905. value->deserialize();
  906. }
  907. void ManagedSerializableFieldDataArray::serialize()
  908. {
  909. if (value != nullptr)
  910. value->serialize();
  911. }
  912. void ManagedSerializableFieldDataArray::deserialize()
  913. {
  914. if (value != nullptr)
  915. value->deserialize();
  916. }
  917. void ManagedSerializableFieldDataList::serialize()
  918. {
  919. if (value != nullptr)
  920. value->serialize();
  921. }
  922. void ManagedSerializableFieldDataList::deserialize()
  923. {
  924. if (value != nullptr)
  925. value->deserialize();
  926. }
  927. void ManagedSerializableFieldDataDictionary::serialize()
  928. {
  929. if (value != nullptr)
  930. value->serialize();
  931. }
  932. void ManagedSerializableFieldDataDictionary::deserialize()
  933. {
  934. if (value != nullptr)
  935. value->deserialize();
  936. }
  937. RTTITypeBase* ManagedSerializableFieldKey::getRTTIStatic()
  938. {
  939. return ManagedSerializableFieldKeyRTTI::instance();
  940. }
  941. RTTITypeBase* ManagedSerializableFieldKey::getRTTI() const
  942. {
  943. return ManagedSerializableFieldKey::getRTTIStatic();
  944. }
  945. RTTITypeBase* ManagedSerializableFieldData::getRTTIStatic()
  946. {
  947. return ManagedSerializableFieldDataRTTI::instance();
  948. }
  949. RTTITypeBase* ManagedSerializableFieldData::getRTTI() const
  950. {
  951. return ManagedSerializableFieldData::getRTTIStatic();
  952. }
  953. RTTITypeBase* ManagedSerializableFieldDataEntry::getRTTIStatic()
  954. {
  955. return ManagedSerializableFieldDataEntryRTTI::instance();
  956. }
  957. RTTITypeBase* ManagedSerializableFieldDataEntry::getRTTI() const
  958. {
  959. return ManagedSerializableFieldDataEntry::getRTTIStatic();
  960. }
  961. RTTITypeBase* ManagedSerializableFieldDataBool::getRTTIStatic()
  962. {
  963. return ManagedSerializableFieldDataBoolRTTI::instance();
  964. }
  965. RTTITypeBase* ManagedSerializableFieldDataBool::getRTTI() const
  966. {
  967. return ManagedSerializableFieldDataBool::getRTTIStatic();
  968. }
  969. RTTITypeBase* ManagedSerializableFieldDataChar::getRTTIStatic()
  970. {
  971. return ManagedSerializableFieldDataCharRTTI::instance();
  972. }
  973. RTTITypeBase* ManagedSerializableFieldDataChar::getRTTI() const
  974. {
  975. return ManagedSerializableFieldDataChar::getRTTIStatic();
  976. }
  977. RTTITypeBase* ManagedSerializableFieldDataI8::getRTTIStatic()
  978. {
  979. return ManagedSerializableFieldDataI8RTTI::instance();
  980. }
  981. RTTITypeBase* ManagedSerializableFieldDataI8::getRTTI() const
  982. {
  983. return ManagedSerializableFieldDataI8::getRTTIStatic();
  984. }
  985. RTTITypeBase* ManagedSerializableFieldDataU8::getRTTIStatic()
  986. {
  987. return ManagedSerializableFieldDataU8RTTI::instance();
  988. }
  989. RTTITypeBase* ManagedSerializableFieldDataU8::getRTTI() const
  990. {
  991. return ManagedSerializableFieldDataU8::getRTTIStatic();
  992. }
  993. RTTITypeBase* ManagedSerializableFieldDataI16::getRTTIStatic()
  994. {
  995. return ManagedSerializableFieldDataI16RTTI::instance();
  996. }
  997. RTTITypeBase* ManagedSerializableFieldDataI16::getRTTI() const
  998. {
  999. return ManagedSerializableFieldDataI16::getRTTIStatic();
  1000. }
  1001. RTTITypeBase* ManagedSerializableFieldDataU16::getRTTIStatic()
  1002. {
  1003. return ManagedSerializableFieldDataU16RTTI::instance();
  1004. }
  1005. RTTITypeBase* ManagedSerializableFieldDataU16::getRTTI() const
  1006. {
  1007. return ManagedSerializableFieldDataU16::getRTTIStatic();
  1008. }
  1009. RTTITypeBase* ManagedSerializableFieldDataI32::getRTTIStatic()
  1010. {
  1011. return ManagedSerializableFieldDataI32RTTI::instance();
  1012. }
  1013. RTTITypeBase* ManagedSerializableFieldDataI32::getRTTI() const
  1014. {
  1015. return ManagedSerializableFieldDataI32::getRTTIStatic();
  1016. }
  1017. RTTITypeBase* ManagedSerializableFieldDataU32::getRTTIStatic()
  1018. {
  1019. return ManagedSerializableFieldDataU32RTTI::instance();
  1020. }
  1021. RTTITypeBase* ManagedSerializableFieldDataU32::getRTTI() const
  1022. {
  1023. return ManagedSerializableFieldDataU32::getRTTIStatic();
  1024. }
  1025. RTTITypeBase* ManagedSerializableFieldDataI64::getRTTIStatic()
  1026. {
  1027. return ManagedSerializableFieldDataI64RTTI::instance();
  1028. }
  1029. RTTITypeBase* ManagedSerializableFieldDataI64::getRTTI() const
  1030. {
  1031. return ManagedSerializableFieldDataI64::getRTTIStatic();
  1032. }
  1033. RTTITypeBase* ManagedSerializableFieldDataU64::getRTTIStatic()
  1034. {
  1035. return ManagedSerializableFieldDataU64RTTI::instance();
  1036. }
  1037. RTTITypeBase* ManagedSerializableFieldDataU64::getRTTI() const
  1038. {
  1039. return ManagedSerializableFieldDataU64::getRTTIStatic();
  1040. }
  1041. RTTITypeBase* ManagedSerializableFieldDataFloat::getRTTIStatic()
  1042. {
  1043. return ManagedSerializableFieldDataFloatRTTI::instance();
  1044. }
  1045. RTTITypeBase* ManagedSerializableFieldDataFloat::getRTTI() const
  1046. {
  1047. return ManagedSerializableFieldDataFloat::getRTTIStatic();
  1048. }
  1049. RTTITypeBase* ManagedSerializableFieldDataDouble::getRTTIStatic()
  1050. {
  1051. return ManagedSerializableFieldDataDoubleRTTI::instance();
  1052. }
  1053. RTTITypeBase* ManagedSerializableFieldDataDouble::getRTTI() const
  1054. {
  1055. return ManagedSerializableFieldDataDouble::getRTTIStatic();
  1056. }
  1057. RTTITypeBase* ManagedSerializableFieldDataString::getRTTIStatic()
  1058. {
  1059. return ManagedSerializableFieldDataStringRTTI::instance();
  1060. }
  1061. RTTITypeBase* ManagedSerializableFieldDataString::getRTTI() const
  1062. {
  1063. return ManagedSerializableFieldDataString::getRTTIStatic();
  1064. }
  1065. RTTITypeBase* ManagedSerializableFieldDataResourceRef::getRTTIStatic()
  1066. {
  1067. return ManagedSerializableFieldDataResourceRefRTTI::instance();
  1068. }
  1069. RTTITypeBase* ManagedSerializableFieldDataResourceRef::getRTTI() const
  1070. {
  1071. return ManagedSerializableFieldDataResourceRef::getRTTIStatic();
  1072. }
  1073. RTTITypeBase* ManagedSerializableFieldDataGameObjectRef::getRTTIStatic()
  1074. {
  1075. return ManagedSerializableFieldDataGameObjectRefRTTI::instance();
  1076. }
  1077. RTTITypeBase* ManagedSerializableFieldDataGameObjectRef::getRTTI() const
  1078. {
  1079. return ManagedSerializableFieldDataGameObjectRef::getRTTIStatic();
  1080. }
  1081. RTTITypeBase* ManagedSerializableFieldDataObject::getRTTIStatic()
  1082. {
  1083. return ManagedSerializableFieldDataObjectRTTI::instance();
  1084. }
  1085. RTTITypeBase* ManagedSerializableFieldDataObject::getRTTI() const
  1086. {
  1087. return ManagedSerializableFieldDataObject::getRTTIStatic();
  1088. }
  1089. RTTITypeBase* ManagedSerializableFieldDataArray::getRTTIStatic()
  1090. {
  1091. return ManagedSerializableFieldDataArrayRTTI::instance();
  1092. }
  1093. RTTITypeBase* ManagedSerializableFieldDataArray::getRTTI() const
  1094. {
  1095. return ManagedSerializableFieldDataArray::getRTTIStatic();
  1096. }
  1097. RTTITypeBase* ManagedSerializableFieldDataList::getRTTIStatic()
  1098. {
  1099. return ManagedSerializableFieldDataListRTTI::instance();
  1100. }
  1101. RTTITypeBase* ManagedSerializableFieldDataList::getRTTI() const
  1102. {
  1103. return ManagedSerializableFieldDataList::getRTTIStatic();
  1104. }
  1105. RTTITypeBase* ManagedSerializableFieldDataDictionary::getRTTIStatic()
  1106. {
  1107. return ManagedSerializableFieldDataDictionaryRTTI::instance();
  1108. }
  1109. RTTITypeBase* ManagedSerializableFieldDataDictionary::getRTTI() const
  1110. {
  1111. return ManagedSerializableFieldDataDictionary::getRTTIStatic();
  1112. }
  1113. }