BsManagedSerializableField.cpp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  1. #include "BsManagedSerializableField.h"
  2. #include "BsManagedSerializableObjectInfo.h"
  3. #include "BsManagedSerializableFieldRTTI.h"
  4. #include "BsMonoUtil.h"
  5. #include "BsMonoManager.h"
  6. #include "BsScriptResourceManager.h"
  7. #include "BsScriptGameObjectManager.h"
  8. #include "BsScriptTexture2D.h"
  9. #include "BsScriptSpriteTexture.h"
  10. #include "BsScriptSceneObject.h"
  11. #include "BsScriptComponent.h"
  12. #include "BsManagedSerializableObject.h"
  13. #include "BsManagedSerializableArray.h"
  14. #include "BsManagedSerializableList.h"
  15. #include "BsManagedSerializableDictionary.h"
  16. namespace BansheeEngine
  17. {
  18. ManagedSerializableFieldKeyPtr ManagedSerializableFieldKey::create(UINT16 typeId, UINT16 fieldId)
  19. {
  20. ManagedSerializableFieldKeyPtr fieldKey = cm_shared_ptr<ManagedSerializableFieldKey>();
  21. fieldKey->mTypeId = typeId;
  22. fieldKey->mFieldId = fieldId;
  23. return fieldKey;
  24. }
  25. ManagedSerializableFieldDataEntryPtr ManagedSerializableFieldDataEntry::create(const ManagedSerializableFieldKeyPtr& key, const ManagedSerializableFieldDataPtr& value)
  26. {
  27. ManagedSerializableFieldDataEntryPtr fieldDataEntry = cm_shared_ptr<ManagedSerializableFieldDataEntry>();
  28. fieldDataEntry->mKey = key;
  29. fieldDataEntry->mValue = value;
  30. return fieldDataEntry;
  31. }
  32. ManagedSerializableFieldDataPtr ManagedSerializableFieldData::create(const ManagedSerializableTypeInfoPtr& typeInfo, MonoObject* value)
  33. {
  34. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  35. {
  36. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  37. switch (primitiveTypeInfo->mType)
  38. {
  39. case ScriptPrimitiveType::Bool:
  40. {
  41. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataBool>();
  42. if(value != nullptr)
  43. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  44. return fieldData;
  45. }
  46. case ScriptPrimitiveType::Char:
  47. {
  48. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataChar>();
  49. if(value != nullptr)
  50. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  51. return fieldData;
  52. }
  53. case ScriptPrimitiveType::I8:
  54. {
  55. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataI8>();
  56. if(value != nullptr)
  57. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  58. return fieldData;
  59. }
  60. case ScriptPrimitiveType::U8:
  61. {
  62. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataU8>();
  63. if(value != nullptr)
  64. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  65. return fieldData;
  66. }
  67. case ScriptPrimitiveType::I16:
  68. {
  69. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataI16>();
  70. if(value != nullptr)
  71. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  72. return fieldData;
  73. }
  74. case ScriptPrimitiveType::U16:
  75. {
  76. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataU16>();
  77. if(value != nullptr)
  78. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  79. return fieldData;
  80. }
  81. case ScriptPrimitiveType::I32:
  82. {
  83. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataI32>();
  84. if(value != nullptr)
  85. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  86. return fieldData;
  87. }
  88. case ScriptPrimitiveType::U32:
  89. {
  90. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataU32>();
  91. if(value != nullptr)
  92. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  93. return fieldData;
  94. }
  95. case ScriptPrimitiveType::I64:
  96. {
  97. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataI64>();
  98. if(value != nullptr)
  99. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  100. return fieldData;
  101. }
  102. case ScriptPrimitiveType::U64:
  103. {
  104. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataU64>();
  105. if(value != nullptr)
  106. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  107. return fieldData;
  108. }
  109. case ScriptPrimitiveType::Float:
  110. {
  111. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataFloat>();
  112. if(value != nullptr)
  113. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  114. return fieldData;
  115. }
  116. case ScriptPrimitiveType::Double:
  117. {
  118. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataDouble>();
  119. if(value != nullptr)
  120. memcpy(&fieldData->value, mono_object_unbox(value), sizeof(fieldData->value));
  121. return fieldData;
  122. }
  123. case ScriptPrimitiveType::String:
  124. {
  125. MonoString* strVal = (MonoString*)(value);
  126. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataString>();
  127. if(strVal != nullptr)
  128. fieldData->value = MonoUtil::monoToWString(strVal);
  129. return fieldData;
  130. }
  131. case ScriptPrimitiveType::TextureRef:
  132. {
  133. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  134. if(value != nullptr)
  135. {
  136. ScriptTexture2D* scriptTexture2D = ScriptTexture2D::toNative(value);
  137. fieldData->value = static_resource_cast<ScriptTexture2D>(scriptTexture2D->getNativeHandle());
  138. }
  139. return fieldData;
  140. }
  141. case ScriptPrimitiveType::SpriteTextureRef:
  142. {
  143. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataResourceRef>();
  144. if(value != nullptr)
  145. {
  146. ScriptSpriteTexture* scriptSpriteTexture = ScriptSpriteTexture::toNative(value);
  147. fieldData->value = static_resource_cast<SpriteTexture>(scriptSpriteTexture->getNativeHandle());
  148. }
  149. return fieldData;
  150. }
  151. case ScriptPrimitiveType::SceneObjectRef:
  152. {
  153. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataGameObjectRef>();
  154. if(value != nullptr)
  155. {
  156. ScriptSceneObject* scriptSceneObject = ScriptSceneObject::toNative(value);
  157. fieldData->value = static_object_cast<SceneObject>(scriptSceneObject->getNativeHandle());
  158. }
  159. return fieldData;
  160. }
  161. case ScriptPrimitiveType::ComponentRef:
  162. {
  163. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataGameObjectRef>();
  164. if(value != nullptr)
  165. {
  166. ScriptComponent* scriptComponent = ScriptComponent::toNative(value);
  167. fieldData->value = static_object_cast<Component>(scriptComponent->getNativeHandle());
  168. }
  169. return fieldData;
  170. }
  171. }
  172. }
  173. else if(typeInfo->getTypeId() == TID_SerializableTypeInfoObject)
  174. {
  175. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataObject>();
  176. if(value != nullptr)
  177. {
  178. fieldData->value = ManagedSerializableObject::create(value);
  179. }
  180. return fieldData;
  181. }
  182. else if(typeInfo->getTypeId() == TID_SerializableTypeInfoArray)
  183. {
  184. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataArray>();
  185. if(value != nullptr)
  186. {
  187. fieldData->value = ManagedSerializableArray::create(value, std::static_pointer_cast<ManagedSerializableTypeInfoArray>(typeInfo));
  188. }
  189. return fieldData;
  190. }
  191. else if(typeInfo->getTypeId() == TID_SerializableTypeInfoList)
  192. {
  193. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataList>();
  194. if(value != nullptr)
  195. {
  196. fieldData->value = ManagedSerializableList::create(value, std::static_pointer_cast<ManagedSerializableTypeInfoList>(typeInfo));
  197. }
  198. return fieldData;
  199. }
  200. else if(typeInfo->getTypeId() == TID_SerializableTypeInfoDictionary)
  201. {
  202. auto fieldData = cm_shared_ptr<ManagedSerializableFieldDataDictionary>();
  203. if(value != nullptr)
  204. {
  205. fieldData->value = ManagedSerializableDictionary::create(value, std::static_pointer_cast<ManagedSerializableTypeInfoDictionary>(typeInfo));
  206. }
  207. return fieldData;
  208. }
  209. return nullptr;
  210. }
  211. void* ManagedSerializableFieldDataBool::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  212. {
  213. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  214. {
  215. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  216. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Bool)
  217. return &value;
  218. }
  219. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  220. }
  221. void* ManagedSerializableFieldDataChar::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  222. {
  223. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  224. {
  225. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  226. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Char)
  227. return &value;
  228. }
  229. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  230. }
  231. void* ManagedSerializableFieldDataI8::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  232. {
  233. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  234. {
  235. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  236. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I8)
  237. return &value;
  238. }
  239. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  240. }
  241. void* ManagedSerializableFieldDataU8::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  242. {
  243. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  244. {
  245. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  246. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U8)
  247. return &value;
  248. }
  249. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  250. }
  251. void* ManagedSerializableFieldDataI16::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  252. {
  253. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  254. {
  255. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  256. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I16)
  257. return &value;
  258. }
  259. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  260. }
  261. void* ManagedSerializableFieldDataU16::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  262. {
  263. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  264. {
  265. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  266. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U16)
  267. return &value;
  268. }
  269. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  270. }
  271. void* ManagedSerializableFieldDataI32::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  272. {
  273. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  274. {
  275. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  276. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I32)
  277. return &value;
  278. }
  279. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  280. }
  281. void* ManagedSerializableFieldDataU32::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  282. {
  283. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  284. {
  285. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  286. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U32)
  287. return &value;
  288. }
  289. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  290. }
  291. void* ManagedSerializableFieldDataI64::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  292. {
  293. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  294. {
  295. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  296. if(primitiveTypeInfo->mType == ScriptPrimitiveType::I64)
  297. return &value;
  298. }
  299. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  300. }
  301. void* ManagedSerializableFieldDataU64::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  302. {
  303. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  304. {
  305. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  306. if(primitiveTypeInfo->mType == ScriptPrimitiveType::U64)
  307. return &value;
  308. }
  309. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  310. }
  311. void* ManagedSerializableFieldDataFloat::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  312. {
  313. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  314. {
  315. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  316. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Float)
  317. return &value;
  318. }
  319. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  320. }
  321. void* ManagedSerializableFieldDataDouble::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  322. {
  323. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  324. {
  325. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  326. if(primitiveTypeInfo->mType == ScriptPrimitiveType::Double)
  327. return &value;
  328. }
  329. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  330. }
  331. void* ManagedSerializableFieldDataString::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  332. {
  333. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  334. {
  335. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  336. if(primitiveTypeInfo->mType == ScriptPrimitiveType::String)
  337. {
  338. return MonoUtil::wstringToMono(MonoManager::instance().getDomain(), value);
  339. }
  340. }
  341. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  342. }
  343. void* ManagedSerializableFieldDataResourceRef::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  344. {
  345. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  346. {
  347. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  348. if(primitiveTypeInfo->mType == ScriptPrimitiveType::TextureRef)
  349. {
  350. if(value)
  351. {
  352. ScriptTexture2D* scriptResource = ScriptResourceManager::instance().getScriptTexture(value);
  353. if(scriptResource == nullptr)
  354. scriptResource = ScriptResourceManager::instance().createScriptTexture(value);
  355. return scriptResource->getManagedInstance();
  356. }
  357. else
  358. return nullptr;
  359. }
  360. else if(primitiveTypeInfo->mType == ScriptPrimitiveType::SpriteTextureRef)
  361. {
  362. if(value)
  363. {
  364. ScriptSpriteTexture* scriptResource = ScriptResourceManager::instance().getScriptSpriteTexture(value);
  365. if(scriptResource == nullptr)
  366. scriptResource = ScriptResourceManager::instance().createScriptSpriteTexture(value);
  367. if(scriptResource != nullptr)
  368. return scriptResource->getManagedInstance();
  369. }
  370. else
  371. return nullptr;
  372. }
  373. }
  374. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  375. }
  376. void* ManagedSerializableFieldDataGameObjectRef::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  377. {
  378. if(typeInfo->getTypeId() == TID_SerializableTypeInfoPrimitive)
  379. {
  380. auto primitiveTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoPrimitive>(typeInfo);
  381. if(primitiveTypeInfo->mType == ScriptPrimitiveType::SceneObjectRef)
  382. {
  383. if(value)
  384. {
  385. ScriptSceneObject* scriptSceneObject = ScriptGameObjectManager::instance().getScriptSceneObject(value);
  386. if(scriptSceneObject == nullptr)
  387. scriptSceneObject = ScriptGameObjectManager::instance().createScriptSceneObject(value);
  388. return scriptSceneObject->getManagedInstance();
  389. }
  390. else
  391. return nullptr;
  392. }
  393. else if(primitiveTypeInfo->mType == ScriptPrimitiveType::ComponentRef)
  394. {
  395. if(value)
  396. {
  397. ScriptComponent* scriptComponent = ScriptGameObjectManager::instance().getScriptComponent(value);
  398. if(scriptComponent == nullptr)
  399. scriptComponent = ScriptGameObjectManager::instance().createScriptComponent(value);
  400. return scriptComponent->getManagedInstance();
  401. }
  402. else
  403. return nullptr;
  404. }
  405. }
  406. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  407. }
  408. void* ManagedSerializableFieldDataObject::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  409. {
  410. if(typeInfo->getTypeId() == TID_SerializableTypeInfoObject)
  411. {
  412. auto objectTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoObject>(typeInfo);
  413. if(value != nullptr)
  414. {
  415. if(objectTypeInfo->mValueType)
  416. {
  417. MonoObject* managedInstance = value->getManagedInstance();
  418. if(managedInstance != nullptr)
  419. return mono_object_unbox(managedInstance); // Structs are passed as raw types because mono expects them as such
  420. }
  421. else
  422. return value->getManagedInstance();
  423. }
  424. return nullptr;
  425. }
  426. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  427. }
  428. void* ManagedSerializableFieldDataArray::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  429. {
  430. if(typeInfo->getTypeId() == TID_SerializableTypeInfoArray)
  431. {
  432. auto objectTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoArray>(typeInfo);
  433. if(value != nullptr)
  434. return value->getManagedInstance();
  435. return nullptr;
  436. }
  437. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  438. }
  439. void* ManagedSerializableFieldDataList::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  440. {
  441. if(typeInfo->getTypeId() == TID_SerializableTypeInfoList)
  442. {
  443. auto listTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoList>(typeInfo);
  444. if(value != nullptr)
  445. return value->getManagedInstance();
  446. return nullptr;
  447. }
  448. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  449. }
  450. void* ManagedSerializableFieldDataDictionary::getValue(const ManagedSerializableTypeInfoPtr& typeInfo)
  451. {
  452. if(typeInfo->getTypeId() == TID_SerializableTypeInfoDictionary)
  453. {
  454. auto dictionaryTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoDictionary>(typeInfo);
  455. if(value != nullptr)
  456. return value->getManagedInstance();
  457. return nullptr;
  458. }
  459. CM_EXCEPT(InvalidParametersException, "Requesting an invalid type in serializable field.");
  460. }
  461. RTTITypeBase* ManagedSerializableFieldKey::getRTTIStatic()
  462. {
  463. return ManagedSerializableFieldKeyRTTI::instance();
  464. }
  465. RTTITypeBase* ManagedSerializableFieldKey::getRTTI() const
  466. {
  467. return ManagedSerializableFieldKey::getRTTIStatic();
  468. }
  469. RTTITypeBase* ManagedSerializableFieldData::getRTTIStatic()
  470. {
  471. return ManagedSerializableFieldDataRTTI::instance();
  472. }
  473. RTTITypeBase* ManagedSerializableFieldData::getRTTI() const
  474. {
  475. return ManagedSerializableFieldData::getRTTIStatic();
  476. }
  477. RTTITypeBase* ManagedSerializableFieldDataEntry::getRTTIStatic()
  478. {
  479. return ManagedSerializableFieldDataEntryRTTI::instance();
  480. }
  481. RTTITypeBase* ManagedSerializableFieldDataEntry::getRTTI() const
  482. {
  483. return ManagedSerializableFieldDataEntry::getRTTIStatic();
  484. }
  485. RTTITypeBase* ManagedSerializableFieldDataBool::getRTTIStatic()
  486. {
  487. return ManagedSerializableFieldDataBoolRTTI::instance();
  488. }
  489. RTTITypeBase* ManagedSerializableFieldDataBool::getRTTI() const
  490. {
  491. return ManagedSerializableFieldDataBool::getRTTIStatic();
  492. }
  493. RTTITypeBase* ManagedSerializableFieldDataChar::getRTTIStatic()
  494. {
  495. return ManagedSerializableFieldDataCharRTTI::instance();
  496. }
  497. RTTITypeBase* ManagedSerializableFieldDataChar::getRTTI() const
  498. {
  499. return ManagedSerializableFieldDataChar::getRTTIStatic();
  500. }
  501. RTTITypeBase* ManagedSerializableFieldDataI8::getRTTIStatic()
  502. {
  503. return ManagedSerializableFieldDataI8RTTI::instance();
  504. }
  505. RTTITypeBase* ManagedSerializableFieldDataI8::getRTTI() const
  506. {
  507. return ManagedSerializableFieldDataI8::getRTTIStatic();
  508. }
  509. RTTITypeBase* ManagedSerializableFieldDataU8::getRTTIStatic()
  510. {
  511. return ManagedSerializableFieldDataU8RTTI::instance();
  512. }
  513. RTTITypeBase* ManagedSerializableFieldDataU8::getRTTI() const
  514. {
  515. return ManagedSerializableFieldDataU8::getRTTIStatic();
  516. }
  517. RTTITypeBase* ManagedSerializableFieldDataI16::getRTTIStatic()
  518. {
  519. return ManagedSerializableFieldDataI16RTTI::instance();
  520. }
  521. RTTITypeBase* ManagedSerializableFieldDataI16::getRTTI() const
  522. {
  523. return ManagedSerializableFieldDataI16::getRTTIStatic();
  524. }
  525. RTTITypeBase* ManagedSerializableFieldDataU16::getRTTIStatic()
  526. {
  527. return ManagedSerializableFieldDataU16RTTI::instance();
  528. }
  529. RTTITypeBase* ManagedSerializableFieldDataU16::getRTTI() const
  530. {
  531. return ManagedSerializableFieldDataU16::getRTTIStatic();
  532. }
  533. RTTITypeBase* ManagedSerializableFieldDataI32::getRTTIStatic()
  534. {
  535. return ManagedSerializableFieldDataI32RTTI::instance();
  536. }
  537. RTTITypeBase* ManagedSerializableFieldDataI32::getRTTI() const
  538. {
  539. return ManagedSerializableFieldDataI32::getRTTIStatic();
  540. }
  541. RTTITypeBase* ManagedSerializableFieldDataU32::getRTTIStatic()
  542. {
  543. return ManagedSerializableFieldDataU32RTTI::instance();
  544. }
  545. RTTITypeBase* ManagedSerializableFieldDataU32::getRTTI() const
  546. {
  547. return ManagedSerializableFieldDataU32::getRTTIStatic();
  548. }
  549. RTTITypeBase* ManagedSerializableFieldDataI64::getRTTIStatic()
  550. {
  551. return ManagedSerializableFieldDataI64RTTI::instance();
  552. }
  553. RTTITypeBase* ManagedSerializableFieldDataI64::getRTTI() const
  554. {
  555. return ManagedSerializableFieldDataI64::getRTTIStatic();
  556. }
  557. RTTITypeBase* ManagedSerializableFieldDataU64::getRTTIStatic()
  558. {
  559. return ManagedSerializableFieldDataU64RTTI::instance();
  560. }
  561. RTTITypeBase* ManagedSerializableFieldDataU64::getRTTI() const
  562. {
  563. return ManagedSerializableFieldDataU64::getRTTIStatic();
  564. }
  565. RTTITypeBase* ManagedSerializableFieldDataFloat::getRTTIStatic()
  566. {
  567. return ManagedSerializableFieldDataFloatRTTI::instance();
  568. }
  569. RTTITypeBase* ManagedSerializableFieldDataFloat::getRTTI() const
  570. {
  571. return ManagedSerializableFieldDataFloat::getRTTIStatic();
  572. }
  573. RTTITypeBase* ManagedSerializableFieldDataDouble::getRTTIStatic()
  574. {
  575. return ManagedSerializableFieldDataDoubleRTTI::instance();
  576. }
  577. RTTITypeBase* ManagedSerializableFieldDataDouble::getRTTI() const
  578. {
  579. return ManagedSerializableFieldDataDouble::getRTTIStatic();
  580. }
  581. RTTITypeBase* ManagedSerializableFieldDataString::getRTTIStatic()
  582. {
  583. return ManagedSerializableFieldDataStringRTTI::instance();
  584. }
  585. RTTITypeBase* ManagedSerializableFieldDataString::getRTTI() const
  586. {
  587. return ManagedSerializableFieldDataString::getRTTIStatic();
  588. }
  589. RTTITypeBase* ManagedSerializableFieldDataResourceRef::getRTTIStatic()
  590. {
  591. return ManagedSerializableFieldDataResourceRefRTTI::instance();
  592. }
  593. RTTITypeBase* ManagedSerializableFieldDataResourceRef::getRTTI() const
  594. {
  595. return ManagedSerializableFieldDataResourceRef::getRTTIStatic();
  596. }
  597. RTTITypeBase* ManagedSerializableFieldDataGameObjectRef::getRTTIStatic()
  598. {
  599. return ManagedSerializableFieldDataGameObjectRefRTTI::instance();
  600. }
  601. RTTITypeBase* ManagedSerializableFieldDataGameObjectRef::getRTTI() const
  602. {
  603. return ManagedSerializableFieldDataGameObjectRef::getRTTIStatic();
  604. }
  605. RTTITypeBase* ManagedSerializableFieldDataObject::getRTTIStatic()
  606. {
  607. return ManagedSerializableFieldDataObjectRTTI::instance();
  608. }
  609. RTTITypeBase* ManagedSerializableFieldDataObject::getRTTI() const
  610. {
  611. return ManagedSerializableFieldDataObject::getRTTIStatic();
  612. }
  613. RTTITypeBase* ManagedSerializableFieldDataArray::getRTTIStatic()
  614. {
  615. return ManagedSerializableFieldDataArrayRTTI::instance();
  616. }
  617. RTTITypeBase* ManagedSerializableFieldDataArray::getRTTI() const
  618. {
  619. return ManagedSerializableFieldDataArray::getRTTIStatic();
  620. }
  621. RTTITypeBase* ManagedSerializableFieldDataList::getRTTIStatic()
  622. {
  623. return ManagedSerializableFieldDataListRTTI::instance();
  624. }
  625. RTTITypeBase* ManagedSerializableFieldDataList::getRTTI() const
  626. {
  627. return ManagedSerializableFieldDataList::getRTTIStatic();
  628. }
  629. RTTITypeBase* ManagedSerializableFieldDataDictionary::getRTTIStatic()
  630. {
  631. return ManagedSerializableFieldDataDictionaryRTTI::instance();
  632. }
  633. RTTITypeBase* ManagedSerializableFieldDataDictionary::getRTTI() const
  634. {
  635. return ManagedSerializableFieldDataDictionary::getRTTIStatic();
  636. }
  637. }