tars2oc.h 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. /**
  2. * Tencent is pleased to support the open source community by making Tars available.
  3. *
  4. * Copyright (C) 2016THL A29 Limited, a Tencent company. All rights reserved.
  5. *
  6. * Licensed under the BSD 3-Clause License (the "License"); you may not use this file except
  7. * in compliance with the License. You may obtain a copy of the License at
  8. *
  9. * https://opensource.org/licenses/BSD-3-Clause
  10. *
  11. * Unless required by applicable law or agreed to in writing, software distributed
  12. * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
  13. * CONDITIONS OF ANY KIND, either express or implied. See the License for the
  14. * specific language governing permissions and limitations under the License.
  15. */
  16. #ifndef _TARS2OC_H
  17. #define _TARS2OC_H
  18. #include "parse.h"
  19. #include <cassert>
  20. #include <string>
  21. using namespace tars;
  22. /**
  23. * ����tars����h��m�ļ�
  24. */
  25. class Tars2OC
  26. {
  27. public:
  28. /**
  29. * ����
  30. * @param file
  31. */
  32. void createFile(const string &file);
  33. /**
  34. * ���������ļ���Ŀ¼
  35. *
  36. */
  37. void setBaseDir(const std::string & sPath) { m_sBaseDir = sPath; }
  38. /**
  39. * �����Ƿ���Ĭ��ֵ
  40. *
  41. * @param bCheck
  42. */
  43. void setArc(const bool bArc) { m_bARC = bArc; }
  44. /**
  45. * ���ø�����Ա�����Ƿ�������ֿռ�ǰ׺
  46. */
  47. void setNeedNS(bool bNeed) { m_bNeedNS = bNeed;}
  48. /**
  49. * �����û��Զ������ֿռ�
  50. */
  51. void setNS(const string& sNS) {m_sNamespace = sNS;}
  52. //����������������Դ������
  53. protected:
  54. /**
  55. * ��ȡö�ٻ��߽ṹ������ǰ׺�ַ���
  56. * @param sTarsNS tars�ļ��ж�������ֿռ�
  57. * @param bEnum �Ƿ���ö������
  58. *
  59. * @return �������ǰ׺�ַ���
  60. */
  61. string getNamePrix(const string& sTarsNS) const;
  62. /**
  63. * ��ȡ���Ϲ淶�ij�Ա����
  64. */
  65. string getPropertyName(const string& sId) const;
  66. /**
  67. *
  68. * ��ȡ�Զ���setter������
  69. */
  70. string getSetterName(const string& sId) const;
  71. /**
  72. * ����ij���͵��ַ�������Դ��
  73. * @param pPtr
  74. *
  75. * @return string
  76. */
  77. string tostr(const TypePtr &pPtr) const;
  78. /**
  79. * �����ڽ����͵��ַ���Դ��
  80. * @param pPtr
  81. *
  82. * @return string
  83. */
  84. string tostrBuiltin(const BuiltinPtr &pPtr) const;
  85. /**
  86. * ����vector���ַ�������
  87. * @param pPtr
  88. *
  89. * @return string
  90. */
  91. string tostrVector(const VectorPtr &pPtr) const;
  92. /**
  93. * ����map���ַ�������
  94. * @param pPtr
  95. *
  96. * @return string
  97. */
  98. string tostrMap(const MapPtr &pPtr) const;
  99. /**
  100. * ����ij�ֽṹ�ķ�������
  101. * @param pPtr
  102. *
  103. * @return string
  104. */
  105. string tostrStruct(const StructPtr &pPtr) const;
  106. /**
  107. * ����ij��ö�ٵķ�������
  108. * @param pPtr
  109. *
  110. * @return string
  111. */
  112. string tostrEnum(const EnumPtr &pPtr) const;
  113. /**
  114. * ����OBJC �汾2�����Զ���
  115. * @param pPtr
  116. *
  117. * @return string
  118. */
  119. string toTarsV2Procstr(const TypeIdPtr &pPtr) const;
  120. /**
  121. * ����OBJC�汾2�ĸ�����Ϣ����
  122. * @param pPtr
  123. *
  124. * @return string
  125. */
  126. string toAddtionalClassName(const TypePtr &pPtr) const;
  127. /**
  128. * ���ɽṹ�����Ե�synthesize����
  129. * @param vMember
  130. *
  131. * @return string
  132. */
  133. string writesynthesize(const vector<TypeIdPtr>& vMember) const;
  134. /**
  135. * ����Initialize����
  136. * @param pPtr
  137. *
  138. * @return string
  139. */
  140. string writeInitialize(const StructPtr &pPtr) const;
  141. /**
  142. * ���ɳ�ʼ�����庯��init
  143. * @param vMember
  144. *
  145. * @return string
  146. */
  147. string writeInit(const vector<TypeIdPtr>& vMember) const;
  148. /**
  149. * ������������
  150. * @param vMember
  151. *
  152. * @return string
  153. */
  154. string writedealloc(const vector<TypeIdPtr>& vMember) const;
  155. /**
  156. * ���ɽṹ���ƶ���
  157. * @param pPtr
  158. *
  159. * @return string
  160. */
  161. string writeTarsType(const StructPtr &pPtr) const;
  162. /**
  163. * �������ͱ�ʾ��
  164. * @param pPtr
  165. *
  166. * @return string
  167. */
  168. string toClassName(const TypePtr &pPtr) const;
  169. protected:
  170. /**
  171. * ��ȡtars�ж�����������ͣ�require��optional
  172. * @param pPtr
  173. *
  174. */
  175. string getReqOptionType(const TypeIdPtr &pPtr) const;
  176. /**
  177. * �ж������Ƿ�����retain���ͣ�string�Ͷ������Ͷ�����retain
  178. * @param pPtr
  179. *
  180. */
  181. bool IsRetainType(const TypePtr &pPtr) const;
  182. bool isNumberType(const TypePtr &pPtr) const;
  183. /**
  184. * ��ȡ�ṹ���������������͵ı�ʶ�����ƺ����ͣ�Ŀǰ�ǽṹ���ö����������
  185. *
  186. * @param pPtr
  187. * @param namespaceId
  188. *
  189. * @return
  190. */
  191. map<string,int> getReferences(const StructPtr &pPtr, const string& namespaceId="") const;
  192. /**
  193. * ��ȡ��Ա�������������ͱ�ʶ������,
  194. * ����, stHello hello;stHelloΪ���ͱ�ʶ������,����Ϊ�ṹ��
  195. *
  196. * @param pPtr
  197. * @param mRefs
  198. */
  199. void toIncludeName(const TypePtr &pPtr,map<string,int>& mRefs) const;
  200. /**
  201. * ���ɽṹ��ͷ�ļ�����
  202. * @param pPtr
  203. *
  204. * @return string
  205. */
  206. string generateH(const StructPtr &pPtr, const string& namespaceId) const;
  207. /**
  208. * ���ɽṹ��m�ļ�����
  209. * @param pPtr
  210. *
  211. * @return string
  212. */
  213. string generateM(const StructPtr &pPtr, const string& namespaceId) const;
  214. /**
  215. * ����ö�ٵ�m�ļ�����
  216. * @param pPtr
  217. *
  218. * @return string
  219. */
  220. string generateM(const EnumPtr &pPtr, const string& namespaceId) const;
  221. /**
  222. * ����������ͷ�ļ�Դ��
  223. * @param pPtr
  224. *
  225. * @return string
  226. */
  227. string generateH(const ContainerPtr &pPtr) const;
  228. /**
  229. * ����ö�ٵ�ͷ�ļ�Դ��
  230. * @param pPtr
  231. *
  232. * @return string
  233. */
  234. string generateH(const EnumPtr &pPtr, const string& namespaceId) const;
  235. /**
  236. * �������ֿռ��ͷ�ļ���ʵ��Դ��
  237. * @param pPtr
  238. *
  239. * @return string
  240. */
  241. string generate(const NamespacePtr &pPtr) const;
  242. /**
  243. * �������ֿռ�m�ļ�Դ��
  244. * @param pPtr
  245. *
  246. * @return string
  247. */
  248. string generateM(const NamespacePtr &pPtr) const;
  249. /**
  250. * �������ֿռ��ͷ�ļ�Դ��
  251. * @param pPtr
  252. *
  253. * @return string
  254. */
  255. void generate(const ContextPtr &pPtr) const;
  256. /**
  257. * �������ֿռ�m�ļ�Դ��
  258. * @param pPtr
  259. *
  260. * @return string
  261. */
  262. void generateM(const ContextPtr &pPtr) const;
  263. private:
  264. enum EM_TYPE
  265. {
  266. EM_STRUCT_TYPE = 1,
  267. EM_ENUM_TYPE = 2
  268. };
  269. std::string m_sBaseDir;
  270. //<modulename,EM_TYPE>, 2:enum,1,stuct;
  271. mutable map<string,int> m_mIncludes;
  272. /**
  273. * �Ƿ�֧��arc�汾
  274. *
  275. */
  276. bool m_bARC;
  277. /**
  278. * �Ƿ�֧���������ֿռ�ǰ׺
  279. */
  280. bool m_bNeedNS;
  281. /**
  282. *�û��Զ�������ֿռ�ǰ׺�������ֵΪ�գ�Ĭ����ȡtars�ļ��ж����ֵ
  283. */
  284. string m_sNamespace;
  285. };
  286. #endif