BsManagedSerializableField.h 28 KB

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