BsManagedSerializableObjectInfoRTTI.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486
  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 "BsRTTIType.h"
  6. #include "BsManagedSerializableObjectInfo.h"
  7. #include "BsException.h"
  8. namespace BansheeEngine
  9. {
  10. /** @addtogroup RTTI-Impl-SEngine
  11. * @{
  12. */
  13. class BS_SCR_BE_EXPORT ManagedSerializableAssemblyInfoRTTI : public RTTIType<ManagedSerializableAssemblyInfo, IReflectable, ManagedSerializableAssemblyInfoRTTI>
  14. {
  15. private:
  16. String& getName(ManagedSerializableAssemblyInfo* obj)
  17. {
  18. return obj->mName;
  19. }
  20. void setName(ManagedSerializableAssemblyInfo* obj, String& val)
  21. {
  22. obj->mName = val;
  23. }
  24. ManagedSerializableObjectInfoPtr getSerializableObjectInfo(ManagedSerializableAssemblyInfo* obj, UINT32 idx)
  25. {
  26. auto iter = obj->mObjectInfos.begin();
  27. for(UINT32 i = 0; i < idx; i++)
  28. iter++;
  29. return iter->second;
  30. }
  31. void setSerializableObjectInfo(ManagedSerializableAssemblyInfo* obj, UINT32 idx, ManagedSerializableObjectInfoPtr val)
  32. {
  33. obj->mTypeNameToId[val->getFullTypeName()] = val->mTypeInfo->mTypeId;
  34. obj->mObjectInfos[val->mTypeInfo->mTypeId] = val;
  35. }
  36. UINT32 getSerializableObjectInfoArraySize(ManagedSerializableAssemblyInfo* obj) { return (UINT32)obj->mObjectInfos.size(); }
  37. void setSerializableObjectInfoArraySize(ManagedSerializableAssemblyInfo* obj, UINT32 size) { }
  38. public:
  39. ManagedSerializableAssemblyInfoRTTI()
  40. {
  41. addPlainField("mName", 0, &ManagedSerializableAssemblyInfoRTTI::getName, &ManagedSerializableAssemblyInfoRTTI::setName);
  42. addReflectablePtrArrayField("mObjectInfos", 1, &ManagedSerializableAssemblyInfoRTTI::getSerializableObjectInfo,
  43. &ManagedSerializableAssemblyInfoRTTI::getSerializableObjectInfoArraySize, &ManagedSerializableAssemblyInfoRTTI::setSerializableObjectInfo,
  44. &ManagedSerializableAssemblyInfoRTTI::setSerializableObjectInfoArraySize);
  45. }
  46. const String& getRTTIName() override
  47. {
  48. static String name = "ScriptSerializableAssemblyInfo";
  49. return name;
  50. }
  51. UINT32 getRTTIId() override
  52. {
  53. return TID_SerializableAssemblyInfo;
  54. }
  55. std::shared_ptr<IReflectable> newRTTIObject() override
  56. {
  57. return bs_shared_ptr_new<ManagedSerializableAssemblyInfo>();
  58. }
  59. };
  60. class BS_SCR_BE_EXPORT ManagedSerializableObjectInfoRTTI : public RTTIType<ManagedSerializableObjectInfo, IReflectable, ManagedSerializableObjectInfoRTTI>
  61. {
  62. private:
  63. ManagedSerializableTypeInfoObjectPtr getTypeInfo(ManagedSerializableObjectInfo* obj)
  64. {
  65. return obj->mTypeInfo;
  66. }
  67. void setTypeInfo(ManagedSerializableObjectInfo* obj, ManagedSerializableTypeInfoObjectPtr val)
  68. {
  69. obj->mTypeInfo = val;
  70. }
  71. ManagedSerializableObjectInfoPtr getBaseClass(ManagedSerializableObjectInfo* obj)
  72. {
  73. return obj->mBaseClass;
  74. }
  75. void setBaseClass(ManagedSerializableObjectInfo* obj, ManagedSerializableObjectInfoPtr val)
  76. {
  77. obj->mBaseClass = val;
  78. }
  79. ManagedSerializableFieldInfoPtr getSerializableFieldInfo(ManagedSerializableObjectInfo* obj, UINT32 idx)
  80. {
  81. auto iter = obj->mFields.begin();
  82. for(UINT32 i = 0; i < idx; i++)
  83. iter++;
  84. return iter->second;
  85. }
  86. void setSerializableFieldInfo(ManagedSerializableObjectInfo* obj, UINT32 idx, ManagedSerializableFieldInfoPtr val)
  87. {
  88. obj->mFieldNameToId[val->mName] = val->mFieldId;
  89. obj->mFields[val->mFieldId] = val;
  90. }
  91. UINT32 getSerializableFieldInfoArraySize(ManagedSerializableObjectInfo* obj) { return (UINT32)obj->mFields.size(); }
  92. void setSerializableFieldInfoArraySize(ManagedSerializableObjectInfo* obj, UINT32 size) { }
  93. public:
  94. ManagedSerializableObjectInfoRTTI()
  95. {
  96. addReflectablePtrField("mTypeInfo", 0, &ManagedSerializableObjectInfoRTTI::getTypeInfo, &ManagedSerializableObjectInfoRTTI::setTypeInfo);
  97. addReflectablePtrField("mBaseClass", 2, &ManagedSerializableObjectInfoRTTI::getBaseClass, &ManagedSerializableObjectInfoRTTI::setBaseClass);
  98. addReflectablePtrArrayField("mFields", 3, &ManagedSerializableObjectInfoRTTI::getSerializableFieldInfo,
  99. &ManagedSerializableObjectInfoRTTI::getSerializableFieldInfoArraySize, &ManagedSerializableObjectInfoRTTI::setSerializableFieldInfo,
  100. &ManagedSerializableObjectInfoRTTI::setSerializableFieldInfoArraySize);
  101. }
  102. const String& getRTTIName() override
  103. {
  104. static String name = "ScriptSerializableObjectInfo";
  105. return name;
  106. }
  107. UINT32 getRTTIId() override
  108. {
  109. return TID_SerializableObjectInfo;
  110. }
  111. std::shared_ptr<IReflectable> newRTTIObject() override
  112. {
  113. return bs_shared_ptr_new<ManagedSerializableObjectInfo>();
  114. }
  115. };
  116. class BS_SCR_BE_EXPORT ManagedSerializableFieldInfoRTTI : public RTTIType<ManagedSerializableFieldInfo, IReflectable, ManagedSerializableFieldInfoRTTI>
  117. {
  118. private:
  119. ManagedSerializableTypeInfoPtr getTypeInfo(ManagedSerializableFieldInfo* obj)
  120. {
  121. return obj->mTypeInfo;
  122. }
  123. void setTypeInfo(ManagedSerializableFieldInfo* obj, ManagedSerializableTypeInfoPtr val)
  124. {
  125. obj->mTypeInfo = val;
  126. }
  127. String& getName(ManagedSerializableFieldInfo* obj)
  128. {
  129. return obj->mName;
  130. }
  131. void setName(ManagedSerializableFieldInfo* obj, String& val)
  132. {
  133. obj->mName = val;
  134. }
  135. UINT32& getFieldId(ManagedSerializableFieldInfo* obj)
  136. {
  137. return obj->mFieldId;
  138. }
  139. void setFieldId(ManagedSerializableFieldInfo* obj, UINT32& val)
  140. {
  141. obj->mFieldId = val;
  142. }
  143. UINT32& getParentTypeId(ManagedSerializableFieldInfo* obj)
  144. {
  145. return obj->mParentTypeId;
  146. }
  147. void setParentTypeId(ManagedSerializableFieldInfo* obj, UINT32& val)
  148. {
  149. obj->mParentTypeId = val;
  150. }
  151. UINT32& getFlags(ManagedSerializableFieldInfo* obj)
  152. {
  153. return (UINT32&)obj->mFlags;
  154. }
  155. void setFlags(ManagedSerializableFieldInfo* obj, UINT32& val)
  156. {
  157. obj->mFlags = (ScriptFieldFlags)val;
  158. }
  159. public:
  160. ManagedSerializableFieldInfoRTTI()
  161. {
  162. addPlainField("mName", 0, &ManagedSerializableFieldInfoRTTI::getName, &ManagedSerializableFieldInfoRTTI::setName);
  163. addReflectablePtrField("mTypeInfo", 1, &ManagedSerializableFieldInfoRTTI::getTypeInfo, &ManagedSerializableFieldInfoRTTI::setTypeInfo);
  164. addPlainField("mFieldId", 2, &ManagedSerializableFieldInfoRTTI::getFieldId, &ManagedSerializableFieldInfoRTTI::setFieldId);
  165. addPlainField("mFlags", 3, &ManagedSerializableFieldInfoRTTI::getFlags, &ManagedSerializableFieldInfoRTTI::setFlags);
  166. addPlainField("mParentTypeId", 4, &ManagedSerializableFieldInfoRTTI::getParentTypeId, &ManagedSerializableFieldInfoRTTI::setParentTypeId);
  167. }
  168. const String& getRTTIName() override
  169. {
  170. static String name = "ScriptSerializableFieldInfo";
  171. return name;
  172. }
  173. UINT32 getRTTIId() override
  174. {
  175. return TID_SerializableFieldInfo;
  176. }
  177. std::shared_ptr<IReflectable> newRTTIObject() override
  178. {
  179. return bs_shared_ptr_new<ManagedSerializableFieldInfo>();
  180. }
  181. };
  182. class BS_SCR_BE_EXPORT ManagedSerializableTypeInfoRTTI : public RTTIType<ManagedSerializableTypeInfo, IReflectable, ManagedSerializableTypeInfoRTTI>
  183. {
  184. private:
  185. public:
  186. ManagedSerializableTypeInfoRTTI()
  187. {
  188. }
  189. const String& getRTTIName() override
  190. {
  191. static String name = "ScriptSerializableTypeInfo";
  192. return name;
  193. }
  194. UINT32 getRTTIId() override
  195. {
  196. return TID_SerializableTypeInfo;
  197. }
  198. std::shared_ptr<IReflectable> newRTTIObject() override
  199. {
  200. BS_EXCEPT(InvalidStateException, "Cannot instantiate an abstract class");
  201. return nullptr;
  202. }
  203. };
  204. class BS_SCR_BE_EXPORT ManagedSerializableTypeInfoPrimitiveRTTI : public RTTIType<ManagedSerializableTypeInfoPrimitive, ManagedSerializableTypeInfo, ManagedSerializableTypeInfoPrimitiveRTTI>
  205. {
  206. private:
  207. ScriptPrimitiveType& getType(ManagedSerializableTypeInfoPrimitive* obj)
  208. {
  209. return obj->mType;
  210. }
  211. void setType(ManagedSerializableTypeInfoPrimitive* obj, ScriptPrimitiveType& val)
  212. {
  213. obj->mType = val;
  214. }
  215. public:
  216. ManagedSerializableTypeInfoPrimitiveRTTI()
  217. {
  218. addPlainField("mType", 0, &ManagedSerializableTypeInfoPrimitiveRTTI::getType, &ManagedSerializableTypeInfoPrimitiveRTTI::setType);
  219. }
  220. const String& getRTTIName() override
  221. {
  222. static String name = "ScriptSerializableTypeInfoPrimitive";
  223. return name;
  224. }
  225. UINT32 getRTTIId() override
  226. {
  227. return TID_SerializableTypeInfoPrimitive;
  228. }
  229. std::shared_ptr<IReflectable> newRTTIObject() override
  230. {
  231. return bs_shared_ptr_new<ManagedSerializableTypeInfoPrimitive>();
  232. }
  233. };
  234. class BS_SCR_BE_EXPORT ManagedSerializableTypeInfoObjectRTTI : public RTTIType<ManagedSerializableTypeInfoObject, ManagedSerializableTypeInfo, ManagedSerializableTypeInfoObjectRTTI>
  235. {
  236. private:
  237. String& getTypeNamespace(ManagedSerializableTypeInfoObject* obj)
  238. {
  239. return obj->mTypeNamespace;
  240. }
  241. void setTypeNamespace(ManagedSerializableTypeInfoObject* obj, String& val)
  242. {
  243. obj->mTypeNamespace = val;
  244. }
  245. String& getTypeName(ManagedSerializableTypeInfoObject* obj)
  246. {
  247. return obj->mTypeName;
  248. }
  249. void setTypeName(ManagedSerializableTypeInfoObject* obj, String& val)
  250. {
  251. obj->mTypeName = val;
  252. }
  253. bool& getIsValueType(ManagedSerializableTypeInfoObject* obj)
  254. {
  255. return obj->mValueType;
  256. }
  257. void setIsValueType(ManagedSerializableTypeInfoObject* obj, bool& val)
  258. {
  259. obj->mValueType = val;
  260. }
  261. UINT32& getTypeId(ManagedSerializableTypeInfoObject* obj)
  262. {
  263. return obj->mTypeId;
  264. }
  265. void setTypeId(ManagedSerializableTypeInfoObject* obj, UINT32& val)
  266. {
  267. obj->mTypeId = val;
  268. }
  269. public:
  270. ManagedSerializableTypeInfoObjectRTTI()
  271. {
  272. addPlainField("mTypeName", 0, &ManagedSerializableTypeInfoObjectRTTI::getTypeName, &ManagedSerializableTypeInfoObjectRTTI::setTypeName);
  273. addPlainField("mTypeNamespace", 1, &ManagedSerializableTypeInfoObjectRTTI::getTypeNamespace, &ManagedSerializableTypeInfoObjectRTTI::setTypeNamespace);
  274. addPlainField("mValueType", 2, &ManagedSerializableTypeInfoObjectRTTI::getIsValueType, &ManagedSerializableTypeInfoObjectRTTI::setIsValueType);
  275. addPlainField("mTypeId", 3, &ManagedSerializableTypeInfoObjectRTTI::getIsValueType, &ManagedSerializableTypeInfoObjectRTTI::setIsValueType);
  276. }
  277. const String& getRTTIName() override
  278. {
  279. static String name = "ScriptSerializableTypeInfoObject";
  280. return name;
  281. }
  282. UINT32 getRTTIId() override
  283. {
  284. return TID_SerializableTypeInfoObject;
  285. }
  286. std::shared_ptr<IReflectable> newRTTIObject() override
  287. {
  288. return bs_shared_ptr_new<ManagedSerializableTypeInfoObject>();
  289. }
  290. };
  291. class BS_SCR_BE_EXPORT ManagedSerializableTypeInfoArrayRTTI : public RTTIType<ManagedSerializableTypeInfoArray, ManagedSerializableTypeInfo, ManagedSerializableTypeInfoArrayRTTI>
  292. {
  293. private:
  294. ManagedSerializableTypeInfoPtr getElementType(ManagedSerializableTypeInfoArray* obj)
  295. {
  296. return obj->mElementType;
  297. }
  298. void setElementType(ManagedSerializableTypeInfoArray* obj, ManagedSerializableTypeInfoPtr val)
  299. {
  300. obj->mElementType = val;
  301. }
  302. UINT32& getRank(ManagedSerializableTypeInfoArray* obj)
  303. {
  304. return obj->mRank;
  305. }
  306. void setRank(ManagedSerializableTypeInfoArray* obj, UINT32& val)
  307. {
  308. obj->mRank = val;
  309. }
  310. public:
  311. ManagedSerializableTypeInfoArrayRTTI()
  312. {
  313. addReflectablePtrField("mElementType", 0, &ManagedSerializableTypeInfoArrayRTTI::getElementType, &ManagedSerializableTypeInfoArrayRTTI::setElementType);
  314. addPlainField("mRank", 1, &ManagedSerializableTypeInfoArrayRTTI::getRank, &ManagedSerializableTypeInfoArrayRTTI::setRank);
  315. }
  316. const String& getRTTIName() override
  317. {
  318. static String name = "ScriptSerializableTypeInfoArray";
  319. return name;
  320. }
  321. UINT32 getRTTIId() override
  322. {
  323. return TID_SerializableTypeInfoArray;
  324. }
  325. std::shared_ptr<IReflectable> newRTTIObject() override
  326. {
  327. return bs_shared_ptr_new<ManagedSerializableTypeInfoArray>();
  328. }
  329. };
  330. class BS_SCR_BE_EXPORT ManagedSerializableTypeInfoListRTTI : public RTTIType<ManagedSerializableTypeInfoList, ManagedSerializableTypeInfo, ManagedSerializableTypeInfoListRTTI>
  331. {
  332. private:
  333. ManagedSerializableTypeInfoPtr getElementType(ManagedSerializableTypeInfoList* obj)
  334. {
  335. return obj->mElementType;
  336. }
  337. void setElementType(ManagedSerializableTypeInfoList* obj, ManagedSerializableTypeInfoPtr val)
  338. {
  339. obj->mElementType = val;
  340. }
  341. public:
  342. ManagedSerializableTypeInfoListRTTI()
  343. {
  344. addReflectablePtrField("mElementType", 0, &ManagedSerializableTypeInfoListRTTI::getElementType, &ManagedSerializableTypeInfoListRTTI::setElementType);
  345. }
  346. const String& getRTTIName() override
  347. {
  348. static String name = "ScriptSerializableTypeInfoList";
  349. return name;
  350. }
  351. UINT32 getRTTIId() override
  352. {
  353. return TID_SerializableTypeInfoList;
  354. }
  355. std::shared_ptr<IReflectable> newRTTIObject() override
  356. {
  357. return bs_shared_ptr_new<ManagedSerializableTypeInfoList>();
  358. }
  359. };
  360. class BS_SCR_BE_EXPORT ManagedSerializableTypeInfoDictionaryRTTI : public RTTIType<ManagedSerializableTypeInfoDictionary, ManagedSerializableTypeInfo, ManagedSerializableTypeInfoDictionaryRTTI>
  361. {
  362. private:
  363. ManagedSerializableTypeInfoPtr getKeyType(ManagedSerializableTypeInfoDictionary* obj)
  364. {
  365. return obj->mKeyType;
  366. }
  367. void setKeyType(ManagedSerializableTypeInfoDictionary* obj, ManagedSerializableTypeInfoPtr val)
  368. {
  369. obj->mKeyType = val;
  370. }
  371. ManagedSerializableTypeInfoPtr getValueType(ManagedSerializableTypeInfoDictionary* obj)
  372. {
  373. return obj->mValueType;
  374. }
  375. void setValueType(ManagedSerializableTypeInfoDictionary* obj, ManagedSerializableTypeInfoPtr val)
  376. {
  377. obj->mValueType = val;
  378. }
  379. public:
  380. ManagedSerializableTypeInfoDictionaryRTTI()
  381. {
  382. addReflectablePtrField("mKeyType", 0, &ManagedSerializableTypeInfoDictionaryRTTI::getKeyType, &ManagedSerializableTypeInfoDictionaryRTTI::setKeyType);
  383. addReflectablePtrField("mValueType", 1, &ManagedSerializableTypeInfoDictionaryRTTI::getValueType, &ManagedSerializableTypeInfoDictionaryRTTI::setValueType);
  384. }
  385. const String& getRTTIName() override
  386. {
  387. static String name = "ScriptSerializableTypeInfoDictionary";
  388. return name;
  389. }
  390. UINT32 getRTTIId() override
  391. {
  392. return TID_SerializableTypeInfoDictionary;
  393. }
  394. std::shared_ptr<IReflectable> newRTTIObject() override
  395. {
  396. return bs_shared_ptr_new<ManagedSerializableTypeInfoDictionary>();
  397. }
  398. };
  399. /** @} */
  400. }