BsManagedSerializableField.h 27 KB

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