BsManagedSerializableField.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463
  1. #pragma once
  2. #include "BsScriptEnginePrerequisites.h"
  3. #include "BsIReflectable.h"
  4. #include <mono/jit/jit.h>
  5. namespace BansheeEngine
  6. {
  7. class BS_SCR_BE_EXPORT ManagedSerializableFieldKey : public IReflectable
  8. {
  9. public:
  10. ManagedSerializableFieldKey();
  11. ManagedSerializableFieldKey(UINT16 typeId, UINT16 fieldId);
  12. static ManagedSerializableFieldKeyPtr create(UINT16 typeId, UINT16 fieldId);
  13. UINT16 mTypeId;
  14. UINT16 mFieldId;
  15. /************************************************************************/
  16. /* RTTI */
  17. /************************************************************************/
  18. public:
  19. friend class ScriptSerializableFieldDataKeyRTTI;
  20. static RTTITypeBase* getRTTIStatic();
  21. virtual RTTITypeBase* getRTTI() const;
  22. };
  23. class BS_SCR_BE_EXPORT ManagedSerializableFieldData : public IReflectable
  24. {
  25. public:
  26. virtual ~ManagedSerializableFieldData() { }
  27. static ManagedSerializableFieldDataPtr create(const ManagedSerializableTypeInfoPtr& typeInfo, MonoObject* value);
  28. virtual void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) = 0;
  29. virtual MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) = 0;
  30. virtual bool equals(const ManagedSerializableFieldDataPtr& other) = 0;
  31. virtual size_t getHash() = 0;
  32. virtual void serialize() { }
  33. virtual void deserialize() { }
  34. /************************************************************************/
  35. /* RTTI */
  36. /************************************************************************/
  37. public:
  38. friend class ManagedSerializableFieldDataRTTI;
  39. static RTTITypeBase* getRTTIStatic();
  40. virtual RTTITypeBase* getRTTI() const;
  41. };
  42. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataEntry : public IReflectable
  43. {
  44. public:
  45. static ManagedSerializableFieldDataEntryPtr create(const ManagedSerializableFieldKeyPtr& key, const ManagedSerializableFieldDataPtr& value);
  46. ManagedSerializableFieldKeyPtr mKey;
  47. ManagedSerializableFieldDataPtr mValue;
  48. /************************************************************************/
  49. /* RTTI */
  50. /************************************************************************/
  51. public:
  52. friend class ManagedSerializableFieldDataEntryRTTI;
  53. static RTTITypeBase* getRTTIStatic();
  54. virtual RTTITypeBase* getRTTI() const;
  55. };
  56. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataBool : public ManagedSerializableFieldData
  57. {
  58. public:
  59. bool value = false;
  60. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  61. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  62. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  63. size_t getHash() override;
  64. /************************************************************************/
  65. /* RTTI */
  66. /************************************************************************/
  67. public:
  68. friend class ManagedSerializableFieldDataBoolRTTI;
  69. static RTTITypeBase* getRTTIStatic();
  70. virtual RTTITypeBase* getRTTI() const;
  71. };
  72. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataChar : public ManagedSerializableFieldData
  73. {
  74. public:
  75. wchar_t value = 0;
  76. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  77. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  78. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  79. size_t getHash() override;
  80. /************************************************************************/
  81. /* RTTI */
  82. /************************************************************************/
  83. public:
  84. friend class ManagedSerializableFieldDataCharRTTI;
  85. static RTTITypeBase* getRTTIStatic();
  86. virtual RTTITypeBase* getRTTI() const;
  87. };
  88. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataI8 : public ManagedSerializableFieldData
  89. {
  90. public:
  91. INT8 value = 0;
  92. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  93. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  94. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  95. size_t getHash() override;
  96. /************************************************************************/
  97. /* RTTI */
  98. /************************************************************************/
  99. public:
  100. friend class ManagedSerializableFieldDataI8RTTI;
  101. static RTTITypeBase* getRTTIStatic();
  102. virtual RTTITypeBase* getRTTI() const;
  103. };
  104. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataU8 : public ManagedSerializableFieldData
  105. {
  106. public:
  107. UINT8 value = 0;
  108. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  109. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  110. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  111. size_t getHash() override;
  112. /************************************************************************/
  113. /* RTTI */
  114. /************************************************************************/
  115. public:
  116. friend class ManagedSerializableFieldDataU8RTTI;
  117. static RTTITypeBase* getRTTIStatic();
  118. virtual RTTITypeBase* getRTTI() const;
  119. };
  120. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataI16 : public ManagedSerializableFieldData
  121. {
  122. public:
  123. INT16 value = 0;
  124. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  125. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  126. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  127. size_t getHash() override;
  128. /************************************************************************/
  129. /* RTTI */
  130. /************************************************************************/
  131. public:
  132. friend class ManagedSerializableFieldDataI16RTTI;
  133. static RTTITypeBase* getRTTIStatic();
  134. virtual RTTITypeBase* getRTTI() const;
  135. };
  136. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataU16 : public ManagedSerializableFieldData
  137. {
  138. public:
  139. UINT16 value = 0;
  140. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  141. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  142. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  143. size_t getHash() override;
  144. /************************************************************************/
  145. /* RTTI */
  146. /************************************************************************/
  147. public:
  148. friend class ManagedSerializableFieldDataU16RTTI;
  149. static RTTITypeBase* getRTTIStatic();
  150. virtual RTTITypeBase* getRTTI() const;
  151. };
  152. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataI32 : public ManagedSerializableFieldData
  153. {
  154. public:
  155. INT32 value = 0;
  156. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  157. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  158. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  159. size_t getHash() override;
  160. /************************************************************************/
  161. /* RTTI */
  162. /************************************************************************/
  163. public:
  164. friend class ManagedSerializableFieldDataI32RTTI;
  165. static RTTITypeBase* getRTTIStatic();
  166. virtual RTTITypeBase* getRTTI() const;
  167. };
  168. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataU32 : public ManagedSerializableFieldData
  169. {
  170. public:
  171. UINT32 value = 0;
  172. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  173. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  174. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  175. size_t getHash() override;
  176. /************************************************************************/
  177. /* RTTI */
  178. /************************************************************************/
  179. public:
  180. friend class ManagedSerializableFieldDataU32RTTI;
  181. static RTTITypeBase* getRTTIStatic();
  182. virtual RTTITypeBase* getRTTI() const;
  183. };
  184. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataI64 : public ManagedSerializableFieldData
  185. {
  186. public:
  187. INT64 value = 0;
  188. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  189. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  190. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  191. size_t getHash() override;
  192. /************************************************************************/
  193. /* RTTI */
  194. /************************************************************************/
  195. public:
  196. friend class ManagedSerializableFieldDataI64RTTI;
  197. static RTTITypeBase* getRTTIStatic();
  198. virtual RTTITypeBase* getRTTI() const;
  199. };
  200. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataU64 : public ManagedSerializableFieldData
  201. {
  202. public:
  203. UINT64 value = 0;
  204. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  205. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  206. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  207. size_t getHash() override;
  208. /************************************************************************/
  209. /* RTTI */
  210. /************************************************************************/
  211. public:
  212. friend class ManagedSerializableFieldDataU64RTTI;
  213. static RTTITypeBase* getRTTIStatic();
  214. virtual RTTITypeBase* getRTTI() const;
  215. };
  216. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataFloat : public ManagedSerializableFieldData
  217. {
  218. public:
  219. float value = 0.0f;
  220. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  221. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  222. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  223. size_t getHash() override;
  224. /************************************************************************/
  225. /* RTTI */
  226. /************************************************************************/
  227. public:
  228. friend class ManagedSerializableFieldDataFloatRTTI;
  229. static RTTITypeBase* getRTTIStatic();
  230. virtual RTTITypeBase* getRTTI() const;
  231. };
  232. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataDouble : public ManagedSerializableFieldData
  233. {
  234. public:
  235. double value = 0.0;
  236. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  237. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  238. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  239. size_t getHash() override;
  240. /************************************************************************/
  241. /* RTTI */
  242. /************************************************************************/
  243. public:
  244. friend class ManagedSerializableFieldDataDoubleRTTI;
  245. static RTTITypeBase* getRTTIStatic();
  246. virtual RTTITypeBase* getRTTI() const;
  247. };
  248. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataString : public ManagedSerializableFieldData
  249. {
  250. public:
  251. WString value;
  252. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  253. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  254. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  255. size_t getHash() override;
  256. /************************************************************************/
  257. /* RTTI */
  258. /************************************************************************/
  259. public:
  260. friend class ManagedSerializableFieldDataStringRTTI;
  261. static RTTITypeBase* getRTTIStatic();
  262. virtual RTTITypeBase* getRTTI() const;
  263. };
  264. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataResourceRef : public ManagedSerializableFieldData
  265. {
  266. public:
  267. HResource value;
  268. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  269. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  270. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  271. size_t getHash() override;
  272. /************************************************************************/
  273. /* RTTI */
  274. /************************************************************************/
  275. public:
  276. friend class ManagedSerializableFieldDataResourceRefRTTI;
  277. static RTTITypeBase* getRTTIStatic();
  278. virtual RTTITypeBase* getRTTI() const;
  279. };
  280. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataGameObjectRef : public ManagedSerializableFieldData
  281. {
  282. public:
  283. HGameObject value;
  284. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  285. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  286. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  287. size_t getHash() override;
  288. /************************************************************************/
  289. /* RTTI */
  290. /************************************************************************/
  291. public:
  292. friend class ManagedSerializableFieldDataGameObjectRefRTTI;
  293. static RTTITypeBase* getRTTIStatic();
  294. virtual RTTITypeBase* getRTTI() const;
  295. };
  296. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataObject : public ManagedSerializableFieldData
  297. {
  298. public:
  299. ManagedSerializableObjectPtr value;
  300. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  301. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  302. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  303. size_t getHash() override;
  304. virtual void serialize() override;
  305. virtual void deserialize() override;
  306. /************************************************************************/
  307. /* RTTI */
  308. /************************************************************************/
  309. public:
  310. friend class ManagedSerializableFieldDataObjectRTTI;
  311. static RTTITypeBase* getRTTIStatic();
  312. virtual RTTITypeBase* getRTTI() const;
  313. };
  314. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataArray : public ManagedSerializableFieldData
  315. {
  316. public:
  317. ManagedSerializableArrayPtr value;
  318. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  319. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  320. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  321. size_t getHash() override;
  322. virtual void serialize() override;
  323. virtual void deserialize() override;
  324. /************************************************************************/
  325. /* RTTI */
  326. /************************************************************************/
  327. public:
  328. friend class ManagedSerializableFieldDataArrayRTTI;
  329. static RTTITypeBase* getRTTIStatic();
  330. virtual RTTITypeBase* getRTTI() const;
  331. };
  332. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataList : public ManagedSerializableFieldData
  333. {
  334. public:
  335. ManagedSerializableListPtr value;
  336. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  337. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  338. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  339. size_t getHash() override;
  340. virtual void serialize() override;
  341. virtual void deserialize() override;
  342. /************************************************************************/
  343. /* RTTI */
  344. /************************************************************************/
  345. public:
  346. friend class ManagedSerializableFieldDataListRTTI;
  347. static RTTITypeBase* getRTTIStatic();
  348. virtual RTTITypeBase* getRTTI() const;
  349. };
  350. class BS_SCR_BE_EXPORT ManagedSerializableFieldDataDictionary : public ManagedSerializableFieldData
  351. {
  352. public:
  353. ManagedSerializableDictionaryPtr value;
  354. void* getValue(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  355. MonoObject* getValueBoxed(const ManagedSerializableTypeInfoPtr& typeInfo) override;
  356. bool equals(const ManagedSerializableFieldDataPtr& other) override;
  357. size_t getHash() override;
  358. virtual void serialize() override;
  359. virtual void deserialize() override;
  360. /************************************************************************/
  361. /* RTTI */
  362. /************************************************************************/
  363. public:
  364. friend class ManagedSerializableFieldDataDictionaryRTTI;
  365. static RTTITypeBase* getRTTIStatic();
  366. virtual RTTITypeBase* getRTTI() const;
  367. };
  368. }