tars2c.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  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 _TARS2C_H
  17. #define _TARS2C_H
  18. #include "parse.h"
  19. #include <cassert>
  20. #include <string>
  21. using namespace tars;
  22. /**
  23. * 根据tars生成c文件
  24. * 包括结构的编解码以及生成Proxy和Servant
  25. */
  26. class Tars2C
  27. {
  28. public:
  29. /**
  30. * 生成
  31. * @param file
  32. */
  33. void createFile(const string &file);
  34. /**
  35. * 设置生成文件的目录
  36. *
  37. */
  38. void setBaseDir(const std::string & sPath) { m_sBaseDir = sPath; }
  39. /**
  40. * 设置是否检查默认值
  41. *
  42. * @author kevintian (2010-10-8)
  43. *
  44. * @param bCheck
  45. */
  46. void setCheckDefault(const bool bCheck) { m_bCheckDefault = bCheck; }
  47. //下面是编解码的源码生成
  48. protected:
  49. /**
  50. * 生成某类型的解码源码
  51. * @param pPtr
  52. *
  53. * @return string
  54. */
  55. string writeTo(const TypeIdPtr &pPtr,const string& namespaceId = "") const;
  56. /**
  57. * 生成某类型的编码源码
  58. * @param pPtr
  59. *
  60. * @return string
  61. */
  62. string readFrom(const TypeIdPtr &pPtr, bool bIsRequire = true,const string& namespaceId="") const;
  63. /**
  64. *
  65. * @param pPtr
  66. *
  67. * @return string
  68. */
  69. string display(const TypeIdPtr &pPtr) const;
  70. /**
  71. *
  72. * @param pPtr
  73. *
  74. * @return string
  75. */
  76. string displaySimple(const TypeIdPtr &pPtr, bool bSep) const;
  77. // 下面是类型描述的源码生成
  78. protected:
  79. /**
  80. * 生成某类型的字符串描述源码
  81. * @param pPtr
  82. *
  83. * @return string
  84. */
  85. string tostr(const TypePtr &pPtr) const;
  86. /**
  87. * 生成内建类型的字符串源码
  88. * @param pPtr
  89. *
  90. * @return string
  91. */
  92. string tostrBuiltin(const BuiltinPtr &pPtr) const;
  93. /**
  94. * 生成vector的字符串描述
  95. * @param pPtr
  96. *
  97. * @return string
  98. */
  99. string tostrVector(const VectorPtr &pPtr) const;
  100. /**
  101. * 生成map的字符串描述
  102. * @param pPtr
  103. *
  104. * @return string
  105. */
  106. string tostrMap(const MapPtr &pPtr) const;
  107. /**
  108. * 生成某种结构的符串描述
  109. * @param pPtr
  110. *
  111. * @return string
  112. */
  113. string tostrStruct(const StructPtr &pPtr) const;
  114. /**
  115. * 生成某种枚举的符串描述
  116. * @param pPtr
  117. *
  118. * @return string
  119. */
  120. string tostrEnum(const EnumPtr &pPtr) const;
  121. /**
  122. * 生成接口名称
  123. * @param pPtr
  124. *
  125. * @return string
  126. */
  127. string toFuncName(const TypePtr &pPtr) const;
  128. string toClassName(const TypePtr &pPtr) const;
  129. /**
  130. * 生成类型变量的解码源码
  131. * @param pPtr
  132. *
  133. * @return string
  134. */
  135. string decode(const TypeIdPtr &pPtr) const;
  136. /**
  137. * 生成类型变量的编码源码
  138. * @param pPtr
  139. *
  140. * @return string
  141. */
  142. string encode(const TypeIdPtr &pPtr) const;
  143. // 以下是h和c文件的具体生成
  144. protected:
  145. /**
  146. * 结构的md5
  147. * @param pPtr
  148. *
  149. * @return string
  150. */
  151. string MD5(const StructPtr &pPtr) const;
  152. /**
  153. * 生成结构的头文件内容
  154. * @param pPtr
  155. *
  156. * @return string
  157. */
  158. string generateH(const StructPtr &pPtr, const string& namespaceId) const;
  159. /**
  160. * 生成结构的cpp文件内容
  161. * @param pPtr
  162. *
  163. * @return string
  164. */
  165. string generateC(const StructPtr &pPtr, const string& namespaceId) const;
  166. /**
  167. * 生成容器的头文件源码
  168. * @param pPtr
  169. *
  170. * @return string
  171. */
  172. string generateH(const ContainerPtr &pPtr) const;
  173. /**
  174. * 生成容器的c源码
  175. * @param pPtr
  176. *
  177. * @return string
  178. */
  179. string generateCpp(const ContainerPtr &pPtr) const;
  180. /**
  181. * 生成参数声明的头文件内容
  182. * @param pPtr
  183. *
  184. * @return string
  185. */
  186. string generateH(const ParamDeclPtr &pPtr) const;
  187. /**
  188. *
  189. * @param pPtr
  190. *
  191. * @return string
  192. */
  193. string generateOutH(const ParamDeclPtr &pPtr) const;
  194. /**
  195. *
  196. * @param pPtr
  197. * @param cn
  198. *
  199. * @return string
  200. */
  201. //string generateAsyncResponseCpp(const OperationPtr &pPtr, const string &cn) const;
  202. /**
  203. * 生成参数声明的cpp文件内容
  204. * @param pPtr
  205. *
  206. * @return string
  207. */
  208. string generateCpp(const ParamDeclPtr &pPtr) const;
  209. /**
  210. * 生成作操作的proxy的cpp文件内容
  211. * @param pPtr
  212. * @param cn
  213. *
  214. * @return string
  215. */
  216. string generateCpp(const OperationPtr &pPtr, const string &cn) const;
  217. /**
  218. * 生成操作的servant的头文件源码
  219. * @param pPtr
  220. * @param bVirtual
  221. *
  222. * @return string
  223. */
  224. string generateH(const OperationPtr &pPtr, bool bVirtual, const string& interfaceId) const;
  225. /**
  226. * 生成接口的头文件源码
  227. * @param pPtr
  228. *
  229. * @return string
  230. */
  231. string generateH(const InterfacePtr &pPtr) const;
  232. /**
  233. * 生的接口的cpp文件的源码
  234. * @param pPtr
  235. *
  236. * @return string
  237. */
  238. string generateCpp(const InterfacePtr &pPtr, const NamespacePtr &nPtr) const;
  239. /**
  240. * 生成枚举的头文件源码
  241. * @param pPtr
  242. *
  243. * @return string
  244. */
  245. string generateH(const EnumPtr &pPtr, const string& namespaceId) const;
  246. /**
  247. * 生成常量头文件源码
  248. * @param pPtr
  249. *
  250. * @return string
  251. */
  252. string generateH(const ConstPtr &pPtr) const;
  253. /**
  254. * 生成名字空间的头文件源码
  255. * @param pPtr
  256. *
  257. * @return string
  258. */
  259. string generateH(const NamespacePtr &pPtr) const;
  260. /**
  261. * 生成名字空间cpp文件源码
  262. * @param pPtr
  263. *
  264. * @return string
  265. */
  266. string generateC(const NamespacePtr &pPtr) const;
  267. /**
  268. * 生成名字空间的头文件源码
  269. * @param pPtr
  270. *
  271. * @return string
  272. */
  273. void generateH(const ContextPtr &pPtr) const;
  274. /**
  275. * 生成名字空间cpp文件源码
  276. * @param pPtr
  277. *
  278. * @return string
  279. */
  280. void generateC(const ContextPtr &pPtr) const;
  281. /**
  282. *
  283. * 根据名字查找结构
  284. * @param pPtr
  285. * @param id
  286. *
  287. * @return StructPtr
  288. */
  289. StructPtr findStruct(const ContextPtr &pPtr,const string &id);
  290. std::string m_sBaseDir;
  291. /**
  292. * 是否检查默认值
  293. *
  294. * @author kevintian (2010-10-8)
  295. */
  296. bool m_bCheckDefault;
  297. };
  298. #endif