BsManagedSerializableField.h 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsScriptEnginePrerequisites.h"
  5. #include "BsIReflectable.h"
  6. #include <mono/jit/jit.h>
  7. namespace BansheeEngine
  8. {
  9. /**
  10. * @brief Contains data that can be used for identifying a field in an object
  11. * when cross referenced with the object type.
  12. *
  13. * @note Essentially a light-weight identifier for the field so that we
  14. * don't need to store entire field type for each field when serializing.
  15. * Instead field types are stored separately and we just use this object
  16. * for lookup.
  17. */
  18. class BS_SCR_BE_EXPORT ManagedSerializableFieldKey : public IReflectable
  19. {
  20. public:
  21. ManagedSerializableFieldKey();
  22. ManagedSerializableFieldKey(UINT16 typeId, UINT16 fieldId);
  23. /**
  24. * @brief Creates a new field key.
  25. *
  26. * @param typeId Unique ID of the parent type the field belongs to. See ManagedSerializableTypeInfoObject.
  27. * @param fieldId Unique ID of the field within its parent class. See ManagedSerializableObjectInfo.
  28. */
  29. static ManagedSerializableFieldKeyPtr create(UINT16 typeId, UINT16 fieldId);
  30. UINT16 mTypeId;
  31. UINT16 mFieldId;
  32. /************************************************************************/
  33. /* RTTI */
  34. /************************************************************************/
  35. public:
  36. friend class ScriptSerializableFieldDataKeyRTTI;
  37. static RTTITypeBase* getRTTIStatic();
  38. virtual RTTITypeBase* getRTTI() const override;
  39. };
  40. /**
  41. * @brief Contains value of a single field in a managed object. This
  42. * class can contain any data type and should be overridden for specific types.
  43. *
  44. * Stored values can be serialized and stored for later use, and deserialized
  45. * back to managed objects when needed. You must call ::serialize before
  46. * performing RTTI serialization. After field data has been serialized
  47. * you should not call any methods on it before calling ::deserialize.
  48. */
  49. class BS_SCR_BE_EXPORT ManagedSerializableFieldData : public IReflectable
  50. {
  51. public:
  52. virtual ~ManagedSerializableFieldData() { }
  53. /**
  54. * @brief Creates a new data wrapper for some field data.
  55. *
  56. * @param typeInfo Type of the data we're storing.
  57. * @param value Managed boxed value to store in the field. Value will be copied
  58. * into the internal buffer and stored.
  59. */
  60. static ManagedSerializableFieldDataPtr create(const ManagedSerializableTypeInfoPtr& typeInfo, MonoObject* value);
  61. /**
  62. * @brief Creates a new data wrapper containing default instance of the provided type.
  63. *
  64. * @param typeInfo Type of the data we're storing.
  65. */
  66. static ManagedSerializableFieldDataPtr createDefault(const ManagedSerializableTypeInfoPtr& typeInfo);
  67. /**
  68. * @brief Returns the internal value.
  69. *
  70. * @param typeInfo Type of the data we're looking to retrieve. This isn't required
  71. * for actually retrieving the data but is used as an extra check
  72. * to ensure the field contains the data type we're looking for.
  73. *
  74. * @return Pointer to the internal serialized data. Caller must ensure the pointer
  75. * is cast to the proper type.
  76. */
  77. virtual void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) = 0;
  78. /**
  79. * @brief Boxes the internal value and returns it.
  80. *
  81. * @param typeInfo Type of the data we're looking to retrieve. This isn't required
  82. * for actually retrieving the data but is used as an extra check
  83. * to ensure the field contains the data type we're looking for.
  84. *
  85. * @return Boxed representation of the internal value.
  86. */
  87. virtual MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) = 0;
  88. /**
  89. * @brief Checks if the internal value stored in this object matches the value stored in another.
  90. * Does shallow comparison for complex objects.
  91. */
  92. virtual bool equals(const ManagedSerializableFieldDataPtr& other) = 0;
  93. /**
  94. * @brief Returns a hash value for the internally stored value.
  95. */
  96. virtual size_t getHash() = 0;
  97. /**
  98. * @brief Serializes the internal value so that it may be stored and deserialized later.
  99. *
  100. * @note This is generally only relevant for complex objects, as primitive types have their
  101. * values copied and serialized automatically whenever field data is created.
  102. */
  103. virtual void serialize() { }
  104. /**
  105. * @brief Deserializes the internal value so that the managed instance can be retrieved.
  106. */
  107. virtual void deserialize() { }
  108. private:
  109. /**
  110. * @brief Creates a new data wrapper for some field data.
  111. *
  112. * @param typeInfo Type of the data we're storing.
  113. * @param value Managed boxed value to store in the field. Value will be copied
  114. * into the internal buffer and stored.
  115. * @param allowNull Determines should null values be allowed. If false the objects with null values will instead
  116. * be instantiated to their default values.
  117. */
  118. static ManagedSerializableFieldDataPtr create(const ManagedSerializableTypeInfoPtr& typeInfo, MonoObject* value,
  119. bool allowNull);
  120. /************************************************************************/
  121. /* RTTI */
  122. /************************************************************************/
  123. public:
  124. friend class ManagedSerializableFieldDataRTTI;
  125. static RTTITypeBase* getRTTIStatic();
  126. virtual RTTITypeBase* getRTTI() const override;
  127. };
  128. /**
  129. * @brief Contains type and value of a single field in an object.
  130. */
  131. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataEntry : public IReflectable
  132. {
  133. public:
  134. static ManagedSerializableFieldDataEntryPtr create(const ManagedSerializableFieldKeyPtr& key, const ManagedSerializableFieldDataPtr& value);
  135. ManagedSerializableFieldKeyPtr mKey;
  136. ManagedSerializableFieldDataPtr mValue;
  137. /************************************************************************/
  138. /* RTTI */
  139. /************************************************************************/
  140. public:
  141. friend class ManagedSerializableFieldDataEntryRTTI;
  142. static RTTITypeBase* getRTTIStatic();
  143. virtual RTTITypeBase* getRTTI() const override;
  144. };
  145. /**
  146. * @brief Contains boolean field data.
  147. *
  148. * @copydoc ManagedSerializableFieldData
  149. */
  150. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataBool : public ManagedSerializableFieldData
  151. {
  152. public:
  153. /**
  154. * @copydoc ManagedSerializableFieldData::getValue
  155. */
  156. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  157. /**
  158. * @copydoc ManagedSerializableFieldData::getValueBoxed
  159. */
  160. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  161. /**
  162. * @copydoc ManagedSerializableFieldData::equals
  163. */
  164. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  165. /**
  166. * @copydoc ManagedSerializableFieldData::getHash
  167. */
  168. size_t getHash() override;
  169. bool value = false;
  170. /************************************************************************/
  171. /* RTTI */
  172. /************************************************************************/
  173. public:
  174. friend class ManagedSerializableFieldDataBoolRTTI;
  175. static RTTITypeBase* getRTTIStatic();
  176. virtual RTTITypeBase* getRTTI() const override;
  177. };
  178. /**
  179. * @brief Contains wide character field data.
  180. *
  181. * @copydoc ManagedSerializableFieldData
  182. */
  183. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataChar : public ManagedSerializableFieldData
  184. {
  185. public:
  186. /**
  187. * @copydoc ManagedSerializableFieldData::getValue
  188. */
  189. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  190. /**
  191. * @copydoc ManagedSerializableFieldData::getValueBoxed
  192. */
  193. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  194. /**
  195. * @copydoc ManagedSerializableFieldData::equals
  196. */
  197. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  198. /**
  199. * @copydoc ManagedSerializableFieldData::getHash
  200. */
  201. size_t getHash() override;
  202. wchar_t value = 0;
  203. /************************************************************************/
  204. /* RTTI */
  205. /************************************************************************/
  206. public:
  207. friend class ManagedSerializableFieldDataCharRTTI;
  208. static RTTITypeBase* getRTTIStatic();
  209. virtual RTTITypeBase* getRTTI() const override;
  210. };
  211. /**
  212. * @brief Contains signed 8-bit integer field data.
  213. *
  214. * @copydoc ManagedSerializableFieldData
  215. */
  216. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataI8 : public ManagedSerializableFieldData
  217. {
  218. public:
  219. /**
  220. * @copydoc ManagedSerializableFieldData::getValue
  221. */
  222. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  223. /**
  224. * @copydoc ManagedSerializableFieldData::getValueBoxed
  225. */
  226. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  227. /**
  228. * @copydoc ManagedSerializableFieldData::equals
  229. */
  230. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  231. /**
  232. * @copydoc ManagedSerializableFieldData::getHash
  233. */
  234. size_t getHash() override;
  235. INT8 value = 0;
  236. /************************************************************************/
  237. /* RTTI */
  238. /************************************************************************/
  239. public:
  240. friend class ManagedSerializableFieldDataI8RTTI;
  241. static RTTITypeBase* getRTTIStatic();
  242. virtual RTTITypeBase* getRTTI() const override;
  243. };
  244. /**
  245. * @brief Contains unsigned 8-bit integer field data.
  246. *
  247. * @copydoc ManagedSerializableFieldData
  248. */
  249. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataU8 : public ManagedSerializableFieldData
  250. {
  251. public:
  252. /**
  253. * @copydoc ManagedSerializableFieldData::getValue
  254. */
  255. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  256. /**
  257. * @copydoc ManagedSerializableFieldData::getValueBoxed
  258. */
  259. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  260. /**
  261. * @copydoc ManagedSerializableFieldData::equals
  262. */
  263. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  264. /**
  265. * @copydoc ManagedSerializableFieldData::getHash
  266. */
  267. size_t getHash() override;
  268. UINT8 value = 0;
  269. /************************************************************************/
  270. /* RTTI */
  271. /************************************************************************/
  272. public:
  273. friend class ManagedSerializableFieldDataU8RTTI;
  274. static RTTITypeBase* getRTTIStatic();
  275. virtual RTTITypeBase* getRTTI() const override;
  276. };
  277. /**
  278. * @brief Contains signed 16-bit integer field data.
  279. *
  280. * @copydoc ManagedSerializableFieldData
  281. */
  282. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataI16 : public ManagedSerializableFieldData
  283. {
  284. public:
  285. /**
  286. * @copydoc ManagedSerializableFieldData::getValue
  287. */
  288. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  289. /**
  290. * @copydoc ManagedSerializableFieldData::getValueBoxed
  291. */
  292. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  293. /**
  294. * @copydoc ManagedSerializableFieldData::equals
  295. */
  296. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  297. /**
  298. * @copydoc ManagedSerializableFieldData::getHash
  299. */
  300. size_t getHash() override;
  301. INT16 value = 0;
  302. /************************************************************************/
  303. /* RTTI */
  304. /************************************************************************/
  305. public:
  306. friend class ManagedSerializableFieldDataI16RTTI;
  307. static RTTITypeBase* getRTTIStatic();
  308. virtual RTTITypeBase* getRTTI() const override;
  309. };
  310. /**
  311. * @brief Contains unsigned 16-bit field data.
  312. *
  313. * @copydoc ManagedSerializableFieldData
  314. */
  315. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataU16 : public ManagedSerializableFieldData
  316. {
  317. public:
  318. /**
  319. * @copydoc ManagedSerializableFieldData::getValue
  320. */
  321. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  322. /**
  323. * @copydoc ManagedSerializableFieldData::getValueBoxed
  324. */
  325. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  326. /**
  327. * @copydoc ManagedSerializableFieldData::equals
  328. */
  329. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  330. /**
  331. * @copydoc ManagedSerializableFieldData::getHash
  332. */
  333. size_t getHash() override;
  334. UINT16 value = 0;
  335. /************************************************************************/
  336. /* RTTI */
  337. /************************************************************************/
  338. public:
  339. friend class ManagedSerializableFieldDataU16RTTI;
  340. static RTTITypeBase* getRTTIStatic();
  341. virtual RTTITypeBase* getRTTI() const override;
  342. };
  343. /**
  344. * @brief Contains signed 32-bit integer field data.
  345. *
  346. * @copydoc ManagedSerializableFieldData
  347. */
  348. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataI32 : public ManagedSerializableFieldData
  349. {
  350. public:
  351. /**
  352. * @copydoc ManagedSerializableFieldData::getValue
  353. */
  354. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  355. /**
  356. * @copydoc ManagedSerializableFieldData::getValueBoxed
  357. */
  358. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  359. /**
  360. * @copydoc ManagedSerializableFieldData::equals
  361. */
  362. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  363. /**
  364. * @copydoc ManagedSerializableFieldData::getHash
  365. */
  366. size_t getHash() override;
  367. INT32 value = 0;
  368. /************************************************************************/
  369. /* RTTI */
  370. /************************************************************************/
  371. public:
  372. friend class ManagedSerializableFieldDataI32RTTI;
  373. static RTTITypeBase* getRTTIStatic();
  374. virtual RTTITypeBase* getRTTI() const override;
  375. };
  376. /**
  377. * @brief Contains unsigned 32-bit integer field data.
  378. *
  379. * @copydoc ManagedSerializableFieldData
  380. */
  381. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataU32 : public ManagedSerializableFieldData
  382. {
  383. public:
  384. /**
  385. * @copydoc ManagedSerializableFieldData::getValue
  386. */
  387. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  388. /**
  389. * @copydoc ManagedSerializableFieldData::getValueBoxed
  390. */
  391. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  392. /**
  393. * @copydoc ManagedSerializableFieldData::equals
  394. */
  395. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  396. /**
  397. * @copydoc ManagedSerializableFieldData::getHash
  398. */
  399. size_t getHash() override;
  400. UINT32 value = 0;
  401. /************************************************************************/
  402. /* RTTI */
  403. /************************************************************************/
  404. public:
  405. friend class ManagedSerializableFieldDataU32RTTI;
  406. static RTTITypeBase* getRTTIStatic();
  407. virtual RTTITypeBase* getRTTI() const override;
  408. };
  409. /**
  410. * @brief Contains signed 64-bit integer field data.
  411. *
  412. * @copydoc ManagedSerializableFieldData
  413. */
  414. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataI64 : public ManagedSerializableFieldData
  415. {
  416. public:
  417. /**
  418. * @copydoc ManagedSerializableFieldData::getValue
  419. */
  420. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  421. /**
  422. * @copydoc ManagedSerializableFieldData::getValueBoxed
  423. */
  424. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  425. /**
  426. * @copydoc ManagedSerializableFieldData::equals
  427. */
  428. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  429. /**
  430. * @copydoc ManagedSerializableFieldData::getHash
  431. */
  432. size_t getHash() override;
  433. INT64 value = 0;
  434. /************************************************************************/
  435. /* RTTI */
  436. /************************************************************************/
  437. public:
  438. friend class ManagedSerializableFieldDataI64RTTI;
  439. static RTTITypeBase* getRTTIStatic();
  440. virtual RTTITypeBase* getRTTI() const override;
  441. };
  442. /**
  443. * @brief Contains unsigned 64-bit integer field data.
  444. *
  445. * @copydoc ManagedSerializableFieldData
  446. */
  447. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataU64 : public ManagedSerializableFieldData
  448. {
  449. public:
  450. /**
  451. * @copydoc ManagedSerializableFieldData::getValue
  452. */
  453. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  454. /**
  455. * @copydoc ManagedSerializableFieldData::getValueBoxed
  456. */
  457. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  458. /**
  459. * @copydoc ManagedSerializableFieldData::equals
  460. */
  461. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  462. /**
  463. * @copydoc ManagedSerializableFieldData::getHash
  464. */
  465. size_t getHash() override;
  466. UINT64 value = 0;
  467. /************************************************************************/
  468. /* RTTI */
  469. /************************************************************************/
  470. public:
  471. friend class ManagedSerializableFieldDataU64RTTI;
  472. static RTTITypeBase* getRTTIStatic();
  473. virtual RTTITypeBase* getRTTI() const override;
  474. };
  475. /**
  476. * @brief Contains single precision floating point field data.
  477. *
  478. * @copydoc ManagedSerializableFieldData
  479. */
  480. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataFloat : public ManagedSerializableFieldData
  481. {
  482. public:
  483. /**
  484. * @copydoc ManagedSerializableFieldData::getValue
  485. */
  486. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  487. /**
  488. * @copydoc ManagedSerializableFieldData::getValueBoxed
  489. */
  490. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  491. /**
  492. * @copydoc ManagedSerializableFieldData::equals
  493. */
  494. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  495. /**
  496. * @copydoc ManagedSerializableFieldData::getHash
  497. */
  498. size_t getHash() override;
  499. float value = 0.0f;
  500. /************************************************************************/
  501. /* RTTI */
  502. /************************************************************************/
  503. public:
  504. friend class ManagedSerializableFieldDataFloatRTTI;
  505. static RTTITypeBase* getRTTIStatic();
  506. virtual RTTITypeBase* getRTTI() const override;
  507. };
  508. /**
  509. * @brief Contains double precision floating point field data.
  510. *
  511. * @copydoc ManagedSerializableFieldData
  512. */
  513. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataDouble : public ManagedSerializableFieldData
  514. {
  515. public:
  516. /**
  517. * @copydoc ManagedSerializableFieldData::getValue
  518. */
  519. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  520. /**
  521. * @copydoc ManagedSerializableFieldData::getValueBoxed
  522. */
  523. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  524. /**
  525. * @copydoc ManagedSerializableFieldData::equals
  526. */
  527. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  528. /**
  529. * @copydoc ManagedSerializableFieldData::getHash
  530. */
  531. size_t getHash() override;
  532. double value = 0.0;
  533. /************************************************************************/
  534. /* RTTI */
  535. /************************************************************************/
  536. public:
  537. friend class ManagedSerializableFieldDataDoubleRTTI;
  538. static RTTITypeBase* getRTTIStatic();
  539. virtual RTTITypeBase* getRTTI() const override;
  540. };
  541. /**
  542. * @brief Contains wide character string field data.
  543. *
  544. * @copydoc ManagedSerializableFieldData
  545. */
  546. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataString : public ManagedSerializableFieldData
  547. {
  548. public:
  549. /**
  550. * @copydoc ManagedSerializableFieldData::getValue
  551. */
  552. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  553. /**
  554. * @copydoc ManagedSerializableFieldData::getValueBoxed
  555. */
  556. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  557. /**
  558. * @copydoc ManagedSerializableFieldData::equals
  559. */
  560. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  561. /**
  562. * @copydoc ManagedSerializableFieldData::getHash
  563. */
  564. size_t getHash() override;
  565. WString value;
  566. bool isNull = false;
  567. /************************************************************************/
  568. /* RTTI */
  569. /************************************************************************/
  570. public:
  571. friend class ManagedSerializableFieldDataStringRTTI;
  572. static RTTITypeBase* getRTTIStatic();
  573. virtual RTTITypeBase* getRTTI() const override;
  574. };
  575. /**
  576. * @brief Contains resource reference field data.
  577. *
  578. * @copydoc ManagedSerializableFieldData
  579. */
  580. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataResourceRef : public ManagedSerializableFieldData
  581. {
  582. public:
  583. /**
  584. * @copydoc ManagedSerializableFieldData::getValue
  585. */
  586. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  587. /**
  588. * @copydoc ManagedSerializableFieldData::getValueBoxed
  589. */
  590. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  591. /**
  592. * @copydoc ManagedSerializableFieldData::equals
  593. */
  594. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  595. /**
  596. * @copydoc ManagedSerializableFieldData::getHash
  597. */
  598. size_t getHash() override;
  599. HResource value;
  600. /************************************************************************/
  601. /* RTTI */
  602. /************************************************************************/
  603. public:
  604. friend class ManagedSerializableFieldDataResourceRefRTTI;
  605. static RTTITypeBase* getRTTIStatic();
  606. virtual RTTITypeBase* getRTTI() const override;
  607. };
  608. /**
  609. * @brief Contains game object reference field data.
  610. *
  611. * @copydoc ManagedSerializableFieldData
  612. */
  613. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataGameObjectRef : public ManagedSerializableFieldData
  614. {
  615. public:
  616. /**
  617. * @copydoc ManagedSerializableFieldData::getValue
  618. */
  619. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  620. /**
  621. * @copydoc ManagedSerializableFieldData::getValueBoxed
  622. */
  623. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  624. /**
  625. * @copydoc ManagedSerializableFieldData::equals
  626. */
  627. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  628. /**
  629. * @copydoc ManagedSerializableFieldData::getHash
  630. */
  631. size_t getHash() override;
  632. HGameObject value;
  633. /************************************************************************/
  634. /* RTTI */
  635. /************************************************************************/
  636. public:
  637. friend class ManagedSerializableFieldDataGameObjectRefRTTI;
  638. static RTTITypeBase* getRTTIStatic();
  639. virtual RTTITypeBase* getRTTI() const override;
  640. };
  641. /**
  642. * @brief Contains complex object field data.
  643. *
  644. * @copydoc ManagedSerializableFieldData
  645. */
  646. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataObject : public ManagedSerializableFieldData
  647. {
  648. public:
  649. /**
  650. * @copydoc ManagedSerializableFieldData::getValue
  651. */
  652. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  653. /**
  654. * @copydoc ManagedSerializableFieldData::getValueBoxed
  655. */
  656. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  657. /**
  658. * @copydoc ManagedSerializableFieldData::equals
  659. */
  660. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  661. /**
  662. * @copydoc ManagedSerializableFieldData::getHash
  663. */
  664. size_t getHash() override;
  665. /**
  666. * @copydoc ManagedSerializableFieldData::serialize
  667. */
  668. virtual void serialize() override;
  669. /**
  670. * @copydoc ManagedSerializableFieldData::deserialize
  671. */
  672. virtual void deserialize() override;
  673. ManagedSerializableObjectPtr value;
  674. /************************************************************************/
  675. /* RTTI */
  676. /************************************************************************/
  677. public:
  678. friend class ManagedSerializableFieldDataObjectRTTI;
  679. static RTTITypeBase* getRTTIStatic();
  680. virtual RTTITypeBase* getRTTI() const override;
  681. };
  682. /**
  683. * @brief Contains array field data.
  684. *
  685. * @copydoc ManagedSerializableFieldData
  686. */
  687. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataArray : public ManagedSerializableFieldData
  688. {
  689. public:
  690. /**
  691. * @copydoc ManagedSerializableFieldData::getValue
  692. */
  693. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  694. /**
  695. * @copydoc ManagedSerializableFieldData::getValueBoxed
  696. */
  697. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  698. /**
  699. * @copydoc ManagedSerializableFieldData::equals
  700. */
  701. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  702. /**
  703. * @copydoc ManagedSerializableFieldData::getHash
  704. */
  705. size_t getHash() override;
  706. /**
  707. * @copydoc ManagedSerializableFieldData::serialize
  708. */
  709. virtual void serialize() override;
  710. /**
  711. * @copydoc ManagedSerializableFieldData::deserialize
  712. */
  713. virtual void deserialize() override;
  714. ManagedSerializableArrayPtr value;
  715. /************************************************************************/
  716. /* RTTI */
  717. /************************************************************************/
  718. public:
  719. friend class ManagedSerializableFieldDataArrayRTTI;
  720. static RTTITypeBase* getRTTIStatic();
  721. virtual RTTITypeBase* getRTTI() const override;
  722. };
  723. /**
  724. * @brief Contains list field data.
  725. *
  726. * @copydoc ManagedSerializableFieldData
  727. */
  728. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataList : public ManagedSerializableFieldData
  729. {
  730. public:
  731. /**
  732. * @copydoc ManagedSerializableFieldData::getValue
  733. */
  734. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  735. /**
  736. * @copydoc ManagedSerializableFieldData::getValueBoxed
  737. */
  738. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  739. /**
  740. * @copydoc ManagedSerializableFieldData::equals
  741. */
  742. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  743. /**
  744. * @copydoc ManagedSerializableFieldData::getHash
  745. */
  746. size_t getHash() override;
  747. /**
  748. * @copydoc ManagedSerializableFieldData::serialize
  749. */
  750. virtual void serialize() override;
  751. /**
  752. * @copydoc ManagedSerializableFieldData::deserialize
  753. */
  754. virtual void deserialize() override;
  755. ManagedSerializableListPtr value;
  756. /************************************************************************/
  757. /* RTTI */
  758. /************************************************************************/
  759. public:
  760. friend class ManagedSerializableFieldDataListRTTI;
  761. static RTTITypeBase* getRTTIStatic();
  762. virtual RTTITypeBase* getRTTI() const override;
  763. };
  764. /**
  765. * @brief Contains dictionary field data.
  766. *
  767. * @copydoc ManagedSerializableFieldData
  768. */
  769. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataDictionary : public ManagedSerializableFieldData
  770. {
  771. public:
  772. /**
  773. * @copydoc ManagedSerializableFieldData::getValue
  774. */
  775. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  776. /**
  777. * @copydoc ManagedSerializableFieldData::getValueBoxed
  778. */
  779. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  780. /**
  781. * @copydoc ManagedSerializableFieldData::equals
  782. */
  783. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  784. /**
  785. * @copydoc ManagedSerializableFieldData::getHash
  786. */
  787. size_t getHash() override;
  788. /**
  789. * @copydoc ManagedSerializableFieldData::serialize
  790. */
  791. virtual void serialize() override;
  792. /**
  793. * @copydoc ManagedSerializableFieldData::deserialize
  794. */
  795. virtual void deserialize() override;
  796. ManagedSerializableDictionaryPtr value;
  797. /************************************************************************/
  798. /* RTTI */
  799. /************************************************************************/
  800. public:
  801. friend class ManagedSerializableFieldDataDictionaryRTTI;
  802. static RTTITypeBase* getRTTIStatic();
  803. virtual RTTITypeBase* getRTTI() const override;
  804. };
  805. }