BsManagedSerializableField.h 28 KB

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