auser-poolparty 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (353) hide show
  1. data/VERSION.yml +1 -1
  2. data/examples/monitored_cloud.rb +1 -1
  3. data/examples/thrift/thrift_example.rb +1 -1
  4. data/lib/proto/command_interface_handler.rb +1 -1
  5. data/vendor/gems/thrift/CHANGES +35 -0
  6. data/vendor/gems/thrift/CONTRIBUTORS +77 -0
  7. data/vendor/gems/thrift/DISCLAIMER +6 -0
  8. data/vendor/gems/thrift/LICENSE +202 -0
  9. data/vendor/gems/thrift/Makefile.am +28 -0
  10. data/vendor/gems/thrift/NEWS +79 -0
  11. data/vendor/gems/thrift/NOTICE +26 -0
  12. data/vendor/gems/thrift/README +137 -0
  13. data/vendor/gems/thrift/aclocal/ax_boost_base.m4 +198 -0
  14. data/vendor/gems/thrift/aclocal/ax_javac_and_java.m4 +107 -0
  15. data/vendor/gems/thrift/aclocal/ax_lib_event.m4 +194 -0
  16. data/vendor/gems/thrift/aclocal/ax_lib_zlib.m4 +173 -0
  17. data/vendor/gems/thrift/aclocal/ax_signed_right_shift.m4 +127 -0
  18. data/vendor/gems/thrift/aclocal/ax_thrift_internal.m4 +39 -0
  19. data/vendor/gems/thrift/bootstrap.sh +35 -0
  20. data/vendor/gems/thrift/cleanup.sh +58 -0
  21. data/vendor/gems/thrift/compiler/cpp/Makefile.am +136 -0
  22. data/vendor/gems/thrift/compiler/cpp/README +39 -0
  23. data/vendor/gems/thrift/compiler/cpp/src/generate/t_cocoa_generator.cc +2331 -0
  24. data/vendor/gems/thrift/compiler/cpp/src/generate/t_cpp_generator.cc +3003 -0
  25. data/vendor/gems/thrift/compiler/cpp/src/generate/t_csharp_generator.cc +1700 -0
  26. data/vendor/gems/thrift/compiler/cpp/src/generate/t_erl_generator.cc +932 -0
  27. data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.cc +173 -0
  28. data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.h +321 -0
  29. data/vendor/gems/thrift/compiler/cpp/src/generate/t_hs_generator.cc +1445 -0
  30. data/vendor/gems/thrift/compiler/cpp/src/generate/t_html_generator.cc +637 -0
  31. data/vendor/gems/thrift/compiler/cpp/src/generate/t_java_generator.cc +3069 -0
  32. data/vendor/gems/thrift/compiler/cpp/src/generate/t_ocaml_generator.cc +1673 -0
  33. data/vendor/gems/thrift/compiler/cpp/src/generate/t_oop_generator.h +77 -0
  34. data/vendor/gems/thrift/compiler/cpp/src/generate/t_perl_generator.cc +1812 -0
  35. data/vendor/gems/thrift/compiler/cpp/src/generate/t_php_generator.cc +2281 -0
  36. data/vendor/gems/thrift/compiler/cpp/src/generate/t_py_generator.cc +2310 -0
  37. data/vendor/gems/thrift/compiler/cpp/src/generate/t_rb_generator.cc +1114 -0
  38. data/vendor/gems/thrift/compiler/cpp/src/generate/t_st_generator.cc +1071 -0
  39. data/vendor/gems/thrift/compiler/cpp/src/generate/t_xsd_generator.cc +354 -0
  40. data/vendor/gems/thrift/compiler/cpp/src/globals.h +117 -0
  41. data/vendor/gems/thrift/compiler/cpp/src/main.cc +1207 -0
  42. data/vendor/gems/thrift/compiler/cpp/src/main.h +103 -0
  43. data/vendor/gems/thrift/compiler/cpp/src/md5.c +381 -0
  44. data/vendor/gems/thrift/compiler/cpp/src/md5.h +91 -0
  45. data/vendor/gems/thrift/compiler/cpp/src/parse/t_base_type.h +137 -0
  46. data/vendor/gems/thrift/compiler/cpp/src/parse/t_const.h +59 -0
  47. data/vendor/gems/thrift/compiler/cpp/src/parse/t_const_value.h +121 -0
  48. data/vendor/gems/thrift/compiler/cpp/src/parse/t_container.h +56 -0
  49. data/vendor/gems/thrift/compiler/cpp/src/parse/t_doc.h +51 -0
  50. data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum.h +59 -0
  51. data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum_value.h +64 -0
  52. data/vendor/gems/thrift/compiler/cpp/src/parse/t_field.h +150 -0
  53. data/vendor/gems/thrift/compiler/cpp/src/parse/t_function.h +93 -0
  54. data/vendor/gems/thrift/compiler/cpp/src/parse/t_list.h +56 -0
  55. data/vendor/gems/thrift/compiler/cpp/src/parse/t_map.h +64 -0
  56. data/vendor/gems/thrift/compiler/cpp/src/parse/t_program.h +223 -0
  57. data/vendor/gems/thrift/compiler/cpp/src/parse/t_scope.h +86 -0
  58. data/vendor/gems/thrift/compiler/cpp/src/parse/t_service.h +68 -0
  59. data/vendor/gems/thrift/compiler/cpp/src/parse/t_set.h +55 -0
  60. data/vendor/gems/thrift/compiler/cpp/src/parse/t_struct.h +127 -0
  61. data/vendor/gems/thrift/compiler/cpp/src/parse/t_type.h +176 -0
  62. data/vendor/gems/thrift/compiler/cpp/src/parse/t_typedef.h +70 -0
  63. data/vendor/gems/thrift/compiler/cpp/src/platform.h +36 -0
  64. data/vendor/gems/thrift/compiler/cpp/src/thriftl.ll +303 -0
  65. data/vendor/gems/thrift/compiler/cpp/src/thrifty.yy +1140 -0
  66. data/vendor/gems/thrift/configure.ac +255 -0
  67. data/vendor/gems/thrift/contrib/fb303/LICENSE +16 -0
  68. data/vendor/gems/thrift/contrib/fb303/Makefile.am +31 -0
  69. data/vendor/gems/thrift/contrib/fb303/README +37 -0
  70. data/vendor/gems/thrift/contrib/fb303/acinclude.m4 +258 -0
  71. data/vendor/gems/thrift/contrib/fb303/aclocal/ax_boost_base.m4 +198 -0
  72. data/vendor/gems/thrift/contrib/fb303/bootstrap.sh +26 -0
  73. data/vendor/gems/thrift/contrib/fb303/configure.ac +115 -0
  74. data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.cpp +124 -0
  75. data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.h +103 -0
  76. data/vendor/gems/thrift/contrib/fb303/cpp/Makefile.am +84 -0
  77. data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.cpp +481 -0
  78. data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.h +215 -0
  79. data/vendor/gems/thrift/contrib/fb303/global_footer.mk +21 -0
  80. data/vendor/gems/thrift/contrib/fb303/global_header.mk +38 -0
  81. data/vendor/gems/thrift/contrib/fb303/if/fb303.thrift +112 -0
  82. data/vendor/gems/thrift/contrib/fb303/java/FacebookBase.java +103 -0
  83. data/vendor/gems/thrift/contrib/fb303/java/build.xml +84 -0
  84. data/vendor/gems/thrift/contrib/fb303/php/FacebookBase.php +89 -0
  85. data/vendor/gems/thrift/contrib/fb303/py/Makefile.am +44 -0
  86. data/vendor/gems/thrift/contrib/fb303/py/fb303/FacebookBase.py +82 -0
  87. data/vendor/gems/thrift/contrib/fb303/py/fb303_scripts/__init__.py +20 -0
  88. data/vendor/gems/thrift/contrib/fb303/py/fb303_scripts/fb303_simple_mgmt.py +195 -0
  89. data/vendor/gems/thrift/contrib/fb303/py/setup.py +27 -0
  90. data/vendor/gems/thrift/contrib/thrift.el +126 -0
  91. data/vendor/gems/thrift/contrib/thrift.spec +206 -0
  92. data/vendor/gems/thrift/contrib/thrift.vim +91 -0
  93. data/vendor/gems/thrift/contrib/thrift_dump.cpp +91 -0
  94. data/vendor/gems/thrift/doc/lgpl-2.1.txt +504 -0
  95. data/vendor/gems/thrift/doc/otp-base-license.txt +20 -0
  96. data/vendor/gems/thrift/doc/thrift.bnf +96 -0
  97. data/vendor/gems/thrift/doc/thrift.tex +1057 -0
  98. data/vendor/gems/thrift/lib/Makefile.am +55 -0
  99. data/vendor/gems/thrift/lib/cocoa/README +21 -0
  100. data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.h +44 -0
  101. data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.m +130 -0
  102. data/vendor/gems/thrift/lib/cocoa/src/TException.h +34 -0
  103. data/vendor/gems/thrift/lib/cocoa/src/TException.m +64 -0
  104. data/vendor/gems/thrift/lib/cocoa/src/TProcessor.h +29 -0
  105. data/vendor/gems/thrift/lib/cocoa/src/TProcessorFactory.h +27 -0
  106. data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.h +27 -0
  107. data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.m +51 -0
  108. data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.h +51 -0
  109. data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.m +477 -0
  110. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocol.h +148 -0
  111. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolException.h +25 -0
  112. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolException.m +23 -0
  113. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolFactory.h +29 -0
  114. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.h +29 -0
  115. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.m +104 -0
  116. data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.h +50 -0
  117. data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.m +153 -0
  118. data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.h +42 -0
  119. data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.m +159 -0
  120. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.h +35 -0
  121. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.m +91 -0
  122. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.h +38 -0
  123. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.m +89 -0
  124. data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.h +32 -0
  125. data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.m +58 -0
  126. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransport.h +36 -0
  127. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.h +30 -0
  128. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.m +43 -0
  129. data/vendor/gems/thrift/lib/cpp/Makefile.am +158 -0
  130. data/vendor/gems/thrift/lib/cpp/README +67 -0
  131. data/vendor/gems/thrift/lib/cpp/src/TLogging.h +163 -0
  132. data/vendor/gems/thrift/lib/cpp/src/TProcessor.h +53 -0
  133. data/vendor/gems/thrift/lib/cpp/src/TReflectionLocal.h +96 -0
  134. data/vendor/gems/thrift/lib/cpp/src/Thrift.cpp +148 -0
  135. data/vendor/gems/thrift/lib/cpp/src/Thrift.h +191 -0
  136. data/vendor/gems/thrift/lib/cpp/src/concurrency/Exception.h +60 -0
  137. data/vendor/gems/thrift/lib/cpp/src/concurrency/FunctionRunner.h +77 -0
  138. data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.cpp +137 -0
  139. data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.h +84 -0
  140. data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.cpp +160 -0
  141. data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.h +114 -0
  142. data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.cpp +314 -0
  143. data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.h +130 -0
  144. data/vendor/gems/thrift/lib/cpp/src/concurrency/Thread.h +125 -0
  145. data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.cpp +493 -0
  146. data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.h +169 -0
  147. data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.cpp +284 -0
  148. data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.h +122 -0
  149. data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.cpp +55 -0
  150. data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.h +100 -0
  151. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/Tests.cpp +155 -0
  152. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadFactoryTests.h +354 -0
  153. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadManagerTests.h +379 -0
  154. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/TimerManagerTests.h +155 -0
  155. data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.cpp +122 -0
  156. data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.h +77 -0
  157. data/vendor/gems/thrift/lib/cpp/src/processor/StatsProcessor.h +264 -0
  158. data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.cpp +79 -0
  159. data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.h +42 -0
  160. data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.cpp +394 -0
  161. data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.h +254 -0
  162. data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.cpp +736 -0
  163. data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.h +279 -0
  164. data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.cpp +346 -0
  165. data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.h +225 -0
  166. data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.cpp +762 -0
  167. data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.h +253 -0
  168. data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.cpp +998 -0
  169. data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.h +340 -0
  170. data/vendor/gems/thrift/lib/cpp/src/protocol/TOneWayProtocol.h +304 -0
  171. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocol.h +438 -0
  172. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolException.h +104 -0
  173. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolTap.h +187 -0
  174. data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.cpp +750 -0
  175. data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.h +435 -0
  176. data/vendor/gems/thrift/lib/cpp/src/server/TServer.cpp +38 -0
  177. data/vendor/gems/thrift/lib/cpp/src/server/TServer.h +213 -0
  178. data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.cpp +118 -0
  179. data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.h +70 -0
  180. data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.cpp +217 -0
  181. data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.h +79 -0
  182. data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.cpp +243 -0
  183. data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.h +74 -0
  184. data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.cpp +370 -0
  185. data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.h +667 -0
  186. data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.cpp +77 -0
  187. data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.h +73 -0
  188. data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.cpp +953 -0
  189. data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.h +442 -0
  190. data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.cpp +348 -0
  191. data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.h +111 -0
  192. data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.cpp +368 -0
  193. data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.h +76 -0
  194. data/vendor/gems/thrift/lib/cpp/src/transport/TServerTransport.h +92 -0
  195. data/vendor/gems/thrift/lib/cpp/src/transport/TShortReadTransport.h +96 -0
  196. data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.cpp +54 -0
  197. data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.h +41 -0
  198. data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.cpp +591 -0
  199. data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.h +242 -0
  200. data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.cpp +235 -0
  201. data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.h +191 -0
  202. data/vendor/gems/thrift/lib/cpp/src/transport/TTransport.h +224 -0
  203. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.cpp +31 -0
  204. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.h +117 -0
  205. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.cpp +178 -0
  206. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.h +287 -0
  207. data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.cpp +299 -0
  208. data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.h +219 -0
  209. data/vendor/gems/thrift/lib/cpp/thrift-nb.pc.in +30 -0
  210. data/vendor/gems/thrift/lib/cpp/thrift-z.pc.in +30 -0
  211. data/vendor/gems/thrift/lib/cpp/thrift.pc.in +29 -0
  212. data/vendor/gems/thrift/lib/csharp/Makefile.am +70 -0
  213. data/vendor/gems/thrift/lib/csharp/README +26 -0
  214. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs +55 -0
  215. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftBuild.cs +242 -0
  216. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftMSBuildTask.csproj +62 -0
  217. data/vendor/gems/thrift/lib/csharp/src/Collections/THashSet.cs +142 -0
  218. data/vendor/gems/thrift/lib/csharp/src/Protocol/TBase.cs +34 -0
  219. data/vendor/gems/thrift/lib/csharp/src/Protocol/TBinaryProtocol.cs +392 -0
  220. data/vendor/gems/thrift/lib/csharp/src/Protocol/TField.cs +58 -0
  221. data/vendor/gems/thrift/lib/csharp/src/Protocol/TList.cs +50 -0
  222. data/vendor/gems/thrift/lib/csharp/src/Protocol/TMap.cs +58 -0
  223. data/vendor/gems/thrift/lib/csharp/src/Protocol/TMessage.cs +58 -0
  224. data/vendor/gems/thrift/lib/csharp/src/Protocol/TMessageType.cs +31 -0
  225. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocol.cs +87 -0
  226. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolException.cs +61 -0
  227. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolFactory.cs +29 -0
  228. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolUtil.cs +94 -0
  229. data/vendor/gems/thrift/lib/csharp/src/Protocol/TSet.cs +50 -0
  230. data/vendor/gems/thrift/lib/csharp/src/Protocol/TStruct.cs +42 -0
  231. data/vendor/gems/thrift/lib/csharp/src/Protocol/TType.cs +40 -0
  232. data/vendor/gems/thrift/lib/csharp/src/Server/TServer.cs +135 -0
  233. data/vendor/gems/thrift/lib/csharp/src/Server/TSimpleServer.cs +148 -0
  234. data/vendor/gems/thrift/lib/csharp/src/Server/TThreadPoolServer.cs +186 -0
  235. data/vendor/gems/thrift/lib/csharp/src/Server/TThreadedServer.cs +234 -0
  236. data/vendor/gems/thrift/lib/csharp/src/TApplicationException.cs +131 -0
  237. data/vendor/gems/thrift/lib/csharp/src/TProcessor.cs +29 -0
  238. data/vendor/gems/thrift/lib/csharp/src/Thrift.csproj +73 -0
  239. data/vendor/gems/thrift/lib/csharp/src/Thrift.sln +35 -0
  240. data/vendor/gems/thrift/lib/csharp/src/Transport/TBufferedTransport.cs +100 -0
  241. data/vendor/gems/thrift/lib/csharp/src/Transport/TServerSocket.cs +157 -0
  242. data/vendor/gems/thrift/lib/csharp/src/Transport/TServerTransport.cs +39 -0
  243. data/vendor/gems/thrift/lib/csharp/src/Transport/TSocket.cs +144 -0
  244. data/vendor/gems/thrift/lib/csharp/src/Transport/TStreamTransport.cs +103 -0
  245. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransport.cs +66 -0
  246. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportException.cs +64 -0
  247. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportFactory.cs +38 -0
  248. data/vendor/gems/thrift/lib/erl/Makefile +37 -0
  249. data/vendor/gems/thrift/lib/erl/README +56 -0
  250. data/vendor/gems/thrift/lib/erl/build/beamver +59 -0
  251. data/vendor/gems/thrift/lib/erl/build/buildtargets.mk +15 -0
  252. data/vendor/gems/thrift/lib/erl/build/colors.mk +24 -0
  253. data/vendor/gems/thrift/lib/erl/build/docs.mk +12 -0
  254. data/vendor/gems/thrift/lib/erl/build/mime.types +98 -0
  255. data/vendor/gems/thrift/lib/erl/build/otp.mk +146 -0
  256. data/vendor/gems/thrift/lib/erl/build/otp_subdir.mk +85 -0
  257. data/vendor/gems/thrift/lib/erl/build/raw_test.mk +29 -0
  258. data/vendor/gems/thrift/lib/erl/include/thrift_constants.hrl +54 -0
  259. data/vendor/gems/thrift/lib/erl/include/thrift_protocol.hrl +31 -0
  260. data/vendor/gems/thrift/lib/erl/src/Makefile +116 -0
  261. data/vendor/gems/thrift/lib/erl/src/test_handler.erl +26 -0
  262. data/vendor/gems/thrift/lib/erl/src/test_service.erl +29 -0
  263. data/vendor/gems/thrift/lib/erl/src/thrift.app.src +44 -0
  264. data/vendor/gems/thrift/lib/erl/src/thrift.appup.src +1 -0
  265. data/vendor/gems/thrift/lib/erl/src/thrift_base64_transport.erl +64 -0
  266. data/vendor/gems/thrift/lib/erl/src/thrift_binary_protocol.erl +325 -0
  267. data/vendor/gems/thrift/lib/erl/src/thrift_buffered_transport.erl +180 -0
  268. data/vendor/gems/thrift/lib/erl/src/thrift_client.erl +384 -0
  269. data/vendor/gems/thrift/lib/erl/src/thrift_disk_log_transport.erl +118 -0
  270. data/vendor/gems/thrift/lib/erl/src/thrift_file_transport.erl +87 -0
  271. data/vendor/gems/thrift/lib/erl/src/thrift_framed_transport.erl +208 -0
  272. data/vendor/gems/thrift/lib/erl/src/thrift_http_transport.erl +199 -0
  273. data/vendor/gems/thrift/lib/erl/src/thrift_memory_buffer.erl +164 -0
  274. data/vendor/gems/thrift/lib/erl/src/thrift_processor.erl +188 -0
  275. data/vendor/gems/thrift/lib/erl/src/thrift_protocol.erl +356 -0
  276. data/vendor/gems/thrift/lib/erl/src/thrift_server.erl +183 -0
  277. data/vendor/gems/thrift/lib/erl/src/thrift_service.erl +25 -0
  278. data/vendor/gems/thrift/lib/erl/src/thrift_socket_server.erl +249 -0
  279. data/vendor/gems/thrift/lib/erl/src/thrift_socket_transport.erl +119 -0
  280. data/vendor/gems/thrift/lib/erl/src/thrift_transport.erl +57 -0
  281. data/vendor/gems/thrift/lib/erl/vsn.mk +1 -0
  282. data/vendor/gems/thrift/lib/hs/README +82 -0
  283. data/vendor/gems/thrift/lib/hs/Setup.lhs +23 -0
  284. data/vendor/gems/thrift/lib/hs/TODO +2 -0
  285. data/vendor/gems/thrift/lib/hs/Thrift.cabal +20 -0
  286. data/vendor/gems/thrift/lib/hs/src/Thrift.hs +111 -0
  287. data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol.hs +191 -0
  288. data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol/Binary.hs +147 -0
  289. data/vendor/gems/thrift/lib/hs/src/Thrift/Server.hs +65 -0
  290. data/vendor/gems/thrift/lib/hs/src/Thrift/Transport.hs +60 -0
  291. data/vendor/gems/thrift/lib/hs/src/Thrift/Transport/Handle.hs +58 -0
  292. data/vendor/gems/thrift/lib/java/Makefile.am +38 -0
  293. data/vendor/gems/thrift/lib/java/README +43 -0
  294. data/vendor/gems/thrift/lib/java/build.xml +195 -0
  295. data/vendor/gems/thrift/lib/java/ivy.xml +8 -0
  296. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/IntRangeSet.java +171 -0
  297. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TApplicationException.java +123 -0
  298. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBase.java +66 -0
  299. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBaseHelper.java +102 -0
  300. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TByteArrayOutputStream.java +46 -0
  301. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TDeserializer.java +94 -0
  302. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TException.java +45 -0
  303. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TFieldRequirementType.java +30 -0
  304. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessor.java +32 -0
  305. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessorFactory.java +39 -0
  306. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TSerializer.java +110 -0
  307. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldMetaData.java +69 -0
  308. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java +42 -0
  309. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/ListMetaData.java +29 -0
  310. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/MapMetaData.java +31 -0
  311. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/SetMetaData.java +29 -0
  312. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/StructMetaData.java +31 -0
  313. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBase64Utils.java +128 -0
  314. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBinaryProtocol.java +331 -0
  315. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TCompactProtocol.java +741 -0
  316. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TField.java +48 -0
  317. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TJSONProtocol.java +927 -0
  318. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TList.java +38 -0
  319. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMap.java +40 -0
  320. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessage.java +48 -0
  321. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessageType.java +31 -0
  322. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocol.java +146 -0
  323. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolException.java +81 -0
  324. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolFactory.java +30 -0
  325. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolUtil.java +158 -0
  326. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSet.java +42 -0
  327. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSimpleJSONProtocol.java +384 -0
  328. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TStruct.java +36 -0
  329. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TType.java +40 -0
  330. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/THsHaServer.java +304 -0
  331. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TNonblockingServer.java +772 -0
  332. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TServer.java +126 -0
  333. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TSimpleServer.java +145 -0
  334. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java +271 -0
  335. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TFramedTransport.java +126 -0
  336. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/THttpClient.java +157 -0
  337. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TIOStreamTransport.java +159 -0
  338. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TMemoryBuffer.java +98 -0
  339. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerSocket.java +160 -0
  340. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerTransport.java +31 -0
  341. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingSocket.java +213 -0
  342. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingTransport.java +31 -0
  343. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TServerSocket.java +145 -0
  344. metadata +348 -37
  345. data/vendor/gems/trollop/FAQ.txt +0 -35
  346. data/vendor/gems/trollop/History.txt +0 -84
  347. data/vendor/gems/trollop/Manifest.txt +0 -7
  348. data/vendor/gems/trollop/README.txt +0 -38
  349. data/vendor/gems/trollop/Rakefile +0 -36
  350. data/vendor/gems/trollop/lib/trollop.rb +0 -695
  351. data/vendor/gems/trollop/release-script.txt +0 -13
  352. data/vendor/gems/trollop/test/test_trollop.rb +0 -957
  353. data/vendor/gems/trollop/www/index.html +0 -167
@@ -0,0 +1,1071 @@
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one
3
+ * or more contributor license agreements. See the NOTICE file
4
+ * distributed with this work for additional information
5
+ * regarding copyright ownership. The ASF licenses this file
6
+ * to you under the Apache License, Version 2.0 (the
7
+ * "License"); you may not use this file except in compliance
8
+ * with the License. You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an
14
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ * KIND, either express or implied. See the License for the
16
+ * specific language governing permissions and limitations
17
+ * under the License.
18
+ */
19
+
20
+ #include <string>
21
+ #include <fstream>
22
+ #include <iostream>
23
+ #include <vector>
24
+
25
+ #include <stdlib.h>
26
+ #include <boost/tokenizer.hpp>
27
+ #include <sys/stat.h>
28
+ #include <sys/types.h>
29
+ #include <sstream>
30
+
31
+ #include "platform.h"
32
+ #include "t_oop_generator.h"
33
+ using namespace std;
34
+
35
+
36
+ /**
37
+ * Smalltalk code generator.
38
+ *
39
+ */
40
+ class t_st_generator : public t_oop_generator {
41
+ public:
42
+ t_st_generator(
43
+ t_program* program,
44
+ const std::map<std::string, std::string>& parsed_options,
45
+ const std::string& option_string)
46
+ : t_oop_generator(program)
47
+ {
48
+ out_dir_base_ = "gen-st";
49
+ }
50
+
51
+ /**
52
+ * Init and close methods
53
+ */
54
+
55
+ void init_generator();
56
+ void close_generator();
57
+
58
+ /**
59
+ * Program-level generation functions
60
+ */
61
+
62
+ void generate_typedef (t_typedef* ttypedef);
63
+ void generate_enum (t_enum* tenum);
64
+ void generate_const (t_const* tconst);
65
+ void generate_struct (t_struct* tstruct);
66
+ void generate_xception (t_struct* txception);
67
+ void generate_service (t_service* tservice);
68
+ void generate_class_side_definition ();
69
+ void generate_force_consts ();
70
+
71
+
72
+ std::string render_const_value(t_type* type, t_const_value* value);
73
+
74
+ /**
75
+ * Struct generation code
76
+ */
77
+
78
+ void generate_st_struct (std::ofstream& out, t_struct* tstruct, bool is_exception);
79
+ void generate_accessors (std::ofstream& out, t_struct* tstruct);
80
+
81
+ /**
82
+ * Service-level generation functions
83
+ */
84
+
85
+ void generate_service_client (t_service* tservice);
86
+
87
+ void generate_send_method (t_function* tfunction);
88
+ void generate_recv_method (t_function* tfunction);
89
+
90
+ std::string map_reader (t_map *tmap);
91
+ std::string list_reader (t_list *tlist);
92
+ std::string set_reader (t_set *tset);
93
+ std::string struct_reader (t_struct *tstruct, std::string clsName);
94
+
95
+ std::string map_writer (t_map *tmap, std::string name);
96
+ std::string list_writer (t_list *tlist, std::string name);
97
+ std::string set_writer (t_set *tset, std::string name);
98
+ std::string struct_writer (t_struct *tstruct, std::string fname);
99
+
100
+ std::string write_val (t_type *t, std::string fname);
101
+ std::string read_val (t_type *t);
102
+
103
+ /**
104
+ * Helper rendering functions
105
+ */
106
+
107
+ std::string st_autogen_comment();
108
+
109
+ void st_class_def(std::ofstream &out, std::string name);
110
+ void st_method(std::ofstream &out, std::string cls, std::string name);
111
+ void st_method(std::ofstream &out, std::string cls, std::string name, std::string category);
112
+ void st_close_method(std::ofstream &out);
113
+ void st_class_method(std::ofstream &out, std::string cls, std::string name);
114
+ void st_class_method(std::ofstream &out, std::string cls, std::string name, std::string category);
115
+ void st_setter(std::ofstream &out, std::string cls, std::string name, std::string type);
116
+ void st_getter(std::ofstream &out, std::string cls, std::string name);
117
+ void st_accessors(std::ofstream &out, std::string cls, std::string name, std::string type);
118
+
119
+ std::string class_name();
120
+ std::string client_class_name();
121
+ std::string prefix(std::string name);
122
+ std::string declare_field(t_field* tfield);
123
+ std::string sanitize(std::string s);
124
+ std::string type_name(t_type* ttype);
125
+
126
+ std::string function_signature(t_function* tfunction);
127
+ std::string argument_list(t_struct* tstruct);
128
+ std::string function_types_comment(t_function* fn);
129
+
130
+ std::string type_to_enum(t_type* ttype);
131
+ std::string a_type(t_type* type);
132
+ bool is_vowel(char c);
133
+ std::string temp_name();
134
+ std::string generated_category();
135
+
136
+ private:
137
+
138
+ /**
139
+ * File streams
140
+ */
141
+ int temporary_var;
142
+ std::ofstream f_;
143
+
144
+ };
145
+
146
+
147
+ /**
148
+ * Prepares for file generation by opening up the necessary file output
149
+ * streams.
150
+ *
151
+ * @param tprogram The program to generate
152
+ */
153
+ void t_st_generator::init_generator() {
154
+ // Make output directory
155
+ MKDIR(get_out_dir().c_str());
156
+
157
+ temporary_var = 0;
158
+
159
+ // Make output file
160
+ string f_name = get_out_dir()+"/"+program_name_+".st";
161
+ f_.open(f_name.c_str());
162
+
163
+ // Print header
164
+ f_ << st_autogen_comment() << endl;
165
+
166
+ st_class_def(f_, program_name_);
167
+ generate_class_side_definition();
168
+
169
+ //Generate enums
170
+ vector<t_enum*> enums = program_->get_enums();
171
+ vector<t_enum*>::iterator en_iter;
172
+ for (en_iter = enums.begin(); en_iter != enums.end(); ++en_iter) {
173
+ generate_enum(*en_iter);
174
+ }
175
+ }
176
+
177
+ string t_st_generator::class_name() {
178
+ return capitalize(program_name_);
179
+ }
180
+
181
+ string t_st_generator::prefix(string class_name) {
182
+ string prefix = program_->get_namespace("smalltalk.prefix");
183
+ string name = capitalize(class_name);
184
+ name = prefix.empty() ? name : (prefix + name);
185
+ return name;
186
+ }
187
+
188
+ string t_st_generator::client_class_name() {
189
+ return capitalize(service_name_) + "Client";
190
+ }
191
+
192
+ /**
193
+ * Autogen'd comment
194
+ */
195
+ string t_st_generator::st_autogen_comment() {
196
+ return
197
+ std::string("'") +
198
+ "Autogenerated by Thrift\n" +
199
+ "\n" +
200
+ "DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING\n" +
201
+ "'!\n";
202
+ }
203
+
204
+ void t_st_generator::generate_force_consts() {
205
+ f_ << prefix(class_name()) << " enums keysAndValuesDo: [:k :v | " <<
206
+ prefix(class_name()) << " enums at: k put: v value].!" << endl;
207
+
208
+ f_ << prefix(class_name()) << " constants keysAndValuesDo: [:k :v | " <<
209
+ prefix(class_name()) << " constants at: k put: v value].!" << endl;
210
+
211
+ }
212
+
213
+ void t_st_generator::close_generator() {
214
+ generate_force_consts();
215
+ f_.close();
216
+ }
217
+
218
+ string t_st_generator::generated_category() {
219
+ string cat = program_->get_namespace("smalltalk.category");
220
+ // For compatibility with the Thrift grammar, the category must
221
+ // be punctuated by dots. Replaces them with dashes here.
222
+ for (string::iterator iter = cat.begin(); iter != cat.end(); ++iter) {
223
+ if (*iter == '.') {
224
+ *iter = '-';
225
+ }
226
+ }
227
+ return cat.size() ? cat : "Generated-" + class_name();
228
+ }
229
+
230
+ /**
231
+ * Generates a typedef. This is not done in Smalltalk, types are all implicit.
232
+ *
233
+ * @param ttypedef The type definition
234
+ */
235
+ void t_st_generator::generate_typedef(t_typedef* ttypedef) {}
236
+
237
+ void t_st_generator::st_class_def(std::ofstream &out, string name) {
238
+ out << "Object subclass: #" << prefix(name) << endl;
239
+ indent_up();
240
+ out << indent() << "instanceVariableNames: ''" << endl <<
241
+ indent() << "classVariableNames: ''" << endl <<
242
+ indent() << "poolDictionaries: ''" << endl <<
243
+ indent() << "category: '" << generated_category() << "'!" << endl << endl;
244
+ }
245
+
246
+ void t_st_generator::st_method(std::ofstream &out, string cls, string name) {
247
+ st_method(out, cls, name, "as yet uncategorized");
248
+ }
249
+
250
+ void t_st_generator::st_class_method(std::ofstream &out, string cls, string name) {
251
+ st_method(out, cls + " class", name);
252
+ }
253
+
254
+ void t_st_generator::st_class_method(std::ofstream &out, string cls, string name, string category) {
255
+ st_method(out, cls, name, category);
256
+ }
257
+
258
+ void t_st_generator::st_method(std::ofstream &out, string cls, string name, string category) {
259
+ char timestr[50];
260
+ time_t rawtime;
261
+ struct tm *tinfo;
262
+
263
+ time(&rawtime);
264
+ tinfo = localtime(&rawtime);
265
+ strftime(timestr, 50, "%m/%d/%Y %H:%M", tinfo);
266
+
267
+ out << "!" << prefix(cls) <<
268
+ " methodsFor: '"+category+"' stamp: 'thrift " << timestr << "'!\n" <<
269
+ name << endl;
270
+
271
+ indent_up();
272
+ out << indent();
273
+ }
274
+
275
+ void t_st_generator::st_close_method(std::ofstream &out) {
276
+ out << "! !" << endl << endl;
277
+ indent_down();
278
+ }
279
+
280
+ void t_st_generator::st_setter(std::ofstream &out, string cls, string name, string type = "anObject") {
281
+ st_method(out, cls, name + ": " + type);
282
+ out << name << " := " + type;
283
+ st_close_method(out);
284
+ }
285
+
286
+ void t_st_generator::st_getter(std::ofstream &out, string cls, string name) {
287
+ st_method(out, cls, name + "");
288
+ out << "^ " << name;
289
+ st_close_method(out);
290
+ }
291
+
292
+ void t_st_generator::st_accessors(std::ofstream &out, string cls, string name, string type = "anObject") {
293
+ st_setter(out, cls, name, type);
294
+ st_getter(out, cls, name);
295
+ }
296
+
297
+ void t_st_generator::generate_class_side_definition() {
298
+ f_ << prefix(class_name()) << " class" << endl <<
299
+ "\tinstanceVariableNames: 'constants enums'!" << endl << endl;
300
+
301
+ st_accessors(f_, class_name() + " class", "enums");
302
+ st_accessors(f_, class_name() + " class", "constants");
303
+
304
+ f_ << prefix(class_name()) << " enums: Dictionary new!" << endl;
305
+ f_ << prefix(class_name()) << " constants: Dictionary new!" << endl;
306
+
307
+ f_ << endl;
308
+ }
309
+
310
+ /**
311
+ * Generates code for an enumerated type. Done using a class to scope
312
+ * the values.
313
+ *
314
+ * @param tenum The enumeration
315
+ */
316
+ void t_st_generator::generate_enum(t_enum* tenum) {
317
+ string cls_name = program_name_ + capitalize(tenum->get_name());
318
+
319
+ f_ << prefix(class_name()) << " enums at: '" << tenum->get_name() << "' put: [" <<
320
+ "(Dictionary new " << endl;
321
+
322
+ vector<t_enum_value*> constants = tenum->get_constants();
323
+ vector<t_enum_value*>::iterator c_iter;
324
+ int value = -1;
325
+ for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) {
326
+ if ((*c_iter)->has_value()) {
327
+ value = (*c_iter)->get_value();
328
+ } else {
329
+ ++value;
330
+ }
331
+
332
+ f_ << "\tat: '" << (*c_iter)->get_name() << "' put: " << value << ";" << endl;
333
+ }
334
+
335
+ f_ << "\tyourself)]!" << endl << endl;
336
+ }
337
+
338
+ /**
339
+ * Generate a constant value
340
+ */
341
+ void t_st_generator::generate_const(t_const* tconst) {
342
+ t_type* type = tconst->get_type();
343
+ string name = tconst->get_name();
344
+ t_const_value* value = tconst->get_value();
345
+
346
+ f_ << prefix(class_name()) << " constants at: '" << name << "' put: [" <<
347
+ render_const_value(type, value) << "]!" << endl << endl;
348
+ }
349
+
350
+ /**
351
+ * Prints the value of a constant with the given type. Note that type checking
352
+ * is NOT performed in this function as it is always run beforehand using the
353
+ * validate_types method in main.cc
354
+ */
355
+ string t_st_generator::render_const_value(t_type* type, t_const_value* value) {
356
+ type = get_true_type(type);
357
+ std::ostringstream out;
358
+ if (type->is_base_type()) {
359
+ t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
360
+ switch (tbase) {
361
+ case t_base_type::TYPE_STRING:
362
+ out << '"' << get_escaped_string(value) << '"';
363
+ break;
364
+ case t_base_type::TYPE_BOOL:
365
+ out << (value->get_integer() > 0 ? "true" : "false");
366
+ break;
367
+ case t_base_type::TYPE_BYTE:
368
+ case t_base_type::TYPE_I16:
369
+ case t_base_type::TYPE_I32:
370
+ case t_base_type::TYPE_I64:
371
+ out << value->get_integer();
372
+ break;
373
+ case t_base_type::TYPE_DOUBLE:
374
+ if (value->get_type() == t_const_value::CV_INTEGER) {
375
+ out << value->get_integer();
376
+ } else {
377
+ out << value->get_double();
378
+ }
379
+ break;
380
+ default:
381
+ throw "compiler error: no const of base type " + t_base_type::t_base_name(tbase);
382
+ }
383
+ } else if (type->is_enum()) {
384
+ indent(out) << value->get_integer();
385
+ } else if (type->is_struct() || type->is_xception()) {
386
+ out << "(" << capitalize(type->get_name()) << " new " << endl;
387
+ indent_up();
388
+
389
+ const vector<t_field*>& fields = ((t_struct*)type)->get_members();
390
+ vector<t_field*>::const_iterator f_iter;
391
+ const map<t_const_value*, t_const_value*>& val = value->get_map();
392
+ map<t_const_value*, t_const_value*>::const_iterator v_iter;
393
+
394
+ for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
395
+ t_type* field_type = NULL;
396
+ for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
397
+ if ((*f_iter)->get_name() == v_iter->first->get_string()) {
398
+ field_type = (*f_iter)->get_type();
399
+ }
400
+ }
401
+ if (field_type == NULL) {
402
+ throw "type error: " + type->get_name() + " has no field " + v_iter->first->get_string();
403
+ }
404
+
405
+ out << indent() << v_iter->first->get_string() << ": " <<
406
+ render_const_value(field_type, v_iter->second) << ";" << endl;
407
+ }
408
+ out << indent() << "yourself)";
409
+
410
+ indent_down();
411
+ } else if (type->is_map()) {
412
+ t_type* ktype = ((t_map*)type)->get_key_type();
413
+ t_type* vtype = ((t_map*)type)->get_val_type();
414
+ out << "(Dictionary new" << endl;
415
+ indent_up();
416
+ indent_up();
417
+ const map<t_const_value*, t_const_value*>& val = value->get_map();
418
+ map<t_const_value*, t_const_value*>::const_iterator v_iter;
419
+ for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
420
+ out << indent() << indent();
421
+ out << "at: " << render_const_value(ktype, v_iter->first);
422
+ out << " put: ";
423
+ out << render_const_value(vtype, v_iter->second);
424
+ out << ";" << endl;
425
+ }
426
+ out << indent() << indent() << "yourself)";
427
+ indent_down();
428
+ indent_down();
429
+ } else if (type->is_list() || type->is_set()) {
430
+ t_type* etype;
431
+ if (type->is_list()) {
432
+ etype = ((t_list*)type)->get_elem_type();
433
+ } else {
434
+ etype = ((t_set*)type)->get_elem_type();
435
+ }
436
+ if (type->is_set()) {
437
+ out << "(Set new" << endl;
438
+ } else {
439
+ out << "(OrderedCollection new" << endl;
440
+ }
441
+ indent_up();
442
+ indent_up();
443
+ const vector<t_const_value*>& val = value->get_list();
444
+ vector<t_const_value*>::const_iterator v_iter;
445
+ for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
446
+ out << indent() << indent();
447
+ out << "add: " << render_const_value(etype, *v_iter);
448
+ out << ";" << endl;
449
+ }
450
+ out << indent() << indent() << "yourself)";
451
+ indent_down();
452
+ indent_down();
453
+ } else {
454
+ throw "CANNOT GENERATE CONSTANT FOR TYPE: " + type->get_name();
455
+ }
456
+ return out.str();
457
+ }
458
+
459
+ /**
460
+ * Generates a Smalltalk struct
461
+ */
462
+ void t_st_generator::generate_struct(t_struct* tstruct) {
463
+ generate_st_struct(f_, tstruct, false);
464
+ }
465
+
466
+ /**
467
+ * Generates a struct definition for a thrift exception. Basically the same
468
+ * as a struct but extends the Exception class.
469
+ *
470
+ * @param txception The struct definition
471
+ */
472
+ void t_st_generator::generate_xception(t_struct* txception) {
473
+ generate_st_struct(f_, txception, true);
474
+ }
475
+
476
+ /**
477
+ * Generates a smalltalk class to represent a struct
478
+ */
479
+ void t_st_generator::generate_st_struct(std::ofstream& out, t_struct* tstruct, bool is_exception = false) {
480
+ const vector<t_field*>& members = tstruct->get_members();
481
+ vector<t_field*>::const_iterator m_iter;
482
+
483
+ if (is_exception)
484
+ out << "Error";
485
+ else
486
+ out << "Object";
487
+
488
+ out << " subclass: #" << prefix(type_name(tstruct)) << endl <<
489
+ "\tinstanceVariableNames: '";
490
+
491
+ if (members.size() > 0) {
492
+ for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
493
+ if (m_iter != members.begin()) out << " ";
494
+ out << sanitize((*m_iter)->get_name());
495
+ }
496
+ }
497
+
498
+ out << "'\n" <<
499
+ "\tclassVariableNames: ''\n" <<
500
+ "\tpoolDictionaries: ''\n" <<
501
+ "\tcategory: '" << generated_category() << "'!\n\n";
502
+
503
+ generate_accessors(out, tstruct);
504
+ }
505
+
506
+ bool t_st_generator::is_vowel(char c) {
507
+ switch(tolower(c)) {
508
+ case 'a': case 'e': case 'i': case 'o': case 'u':
509
+ return true;
510
+ }
511
+ return false;
512
+ }
513
+
514
+ string t_st_generator::a_type(t_type* type) {
515
+ string prefix;
516
+
517
+ if (is_vowel(type_name(type)[0]))
518
+ prefix = "an";
519
+ else
520
+ prefix = "a";
521
+
522
+ return prefix + capitalize(type_name(type));
523
+ }
524
+
525
+ void t_st_generator::generate_accessors(std::ofstream& out, t_struct* tstruct) {
526
+ const vector<t_field*>& members = tstruct->get_members();
527
+ vector<t_field*>::const_iterator m_iter;
528
+ string type;
529
+ string prefix;
530
+
531
+ if (members.size() > 0) {
532
+ for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
533
+ st_accessors(out,
534
+ capitalize(type_name(tstruct)),
535
+ sanitize((*m_iter)->get_name()),
536
+ a_type((*m_iter)->get_type()));
537
+ }
538
+ out << endl;
539
+ }
540
+ }
541
+
542
+ /**
543
+ * Generates a thrift service.
544
+ *
545
+ * @param tservice The service definition
546
+ */
547
+ void t_st_generator::generate_service(t_service* tservice) {
548
+ generate_service_client(tservice);
549
+ // generate_service_server(tservice);
550
+ }
551
+
552
+ string t_st_generator::temp_name() {
553
+ std::ostringstream out;
554
+ out << "temp" << temporary_var++;
555
+ return out.str();
556
+ }
557
+
558
+ string t_st_generator::map_writer(t_map *tmap, string fname) {
559
+ std::ostringstream out;
560
+ string key = temp_name();
561
+ string val = temp_name();
562
+
563
+ out << "[oprot writeMapBegin: (TMap new keyType: " << type_to_enum(tmap->get_key_type()) <<
564
+ "; valueType: " << type_to_enum(tmap->get_val_type()) << "; size: " << fname << " size)." << endl;
565
+ indent_up();
566
+
567
+ out << indent() << fname << " keysAndValuesDo: [:" << key << " :" << val << " |" << endl;
568
+ indent_up();
569
+
570
+ out << indent() << write_val(tmap->get_key_type(), key) << "." << endl <<
571
+ indent() << write_val(tmap->get_val_type(), val);
572
+ indent_down();
573
+
574
+ out << "]." << endl <<
575
+ indent() << "oprot writeMapEnd] value";
576
+ indent_down();
577
+
578
+ return out.str();
579
+ }
580
+
581
+ string t_st_generator::map_reader(t_map *tmap) {
582
+ std::ostringstream out;
583
+ string desc = temp_name();
584
+ string val = temp_name();
585
+
586
+ out << "[|" << desc << " " << val << "| " << endl;
587
+ indent_up();
588
+
589
+ out << indent() << desc << " := iprot readMapBegin." << endl <<
590
+ indent() << val << " := Dictionary new." << endl <<
591
+ indent() << desc << " size timesRepeat: [" << endl;
592
+
593
+ indent_up();
594
+ out << indent() << val << " at: " << read_val(tmap->get_key_type()) <<
595
+ " put: " << read_val(tmap->get_val_type());
596
+ indent_down();
597
+
598
+ out << "]." << endl <<
599
+ indent() << "iprot readMapEnd." << endl <<
600
+ indent() << val << "] value";
601
+ indent_down();
602
+
603
+ return out.str();
604
+ }
605
+
606
+ string t_st_generator::list_writer(t_list *tlist, string fname) {
607
+ std::ostringstream out;
608
+ string val = temp_name();
609
+
610
+ out << "[oprot writeListBegin: (TList new elemType: " <<
611
+ type_to_enum(tlist->get_elem_type()) << "; size: " << fname << " size)." << endl;
612
+ indent_up();
613
+
614
+ out << indent() << fname << " do: [:" << val << "|" << endl;
615
+ indent_up();
616
+
617
+ out << indent() << write_val(tlist->get_elem_type(), val) << endl;
618
+ indent_down();
619
+
620
+ out << "]." << endl <<
621
+ indent() << "oprot writeListEnd] value";
622
+ indent_down();
623
+
624
+ return out.str();
625
+ }
626
+
627
+ string t_st_generator::list_reader(t_list *tlist) {
628
+ std::ostringstream out;
629
+ string desc = temp_name();
630
+ string val = temp_name();
631
+
632
+ out << "[|" << desc << " " << val << "| " << desc << " := iprot readListBegin." << endl;
633
+ indent_up();
634
+
635
+ out << indent() << val << " := OrderedCollection new." << endl <<
636
+ indent() << desc << " size timesRepeat: [" << endl;
637
+
638
+ indent_up();
639
+ out << indent() << val << " add: " << read_val(tlist->get_elem_type());
640
+ indent_down();
641
+
642
+ out << "]." << endl <<
643
+ indent() << "iprot readListEnd." << endl <<
644
+ indent() << val << "] value";
645
+ indent_down();
646
+
647
+ return out.str();
648
+ }
649
+
650
+ string t_st_generator::set_writer(t_set *tset, string fname) {
651
+ std::ostringstream out;
652
+ string val = temp_name();
653
+
654
+ out << "[oprot writeSetBegin: (TSet new elemType: " << type_to_enum(tset->get_elem_type()) <<
655
+ "; size: " << fname << " size)." << endl;
656
+ indent_up();
657
+
658
+ out << indent() << fname << " do: [:" << val << "|" << endl;
659
+ indent_up();
660
+
661
+ out << indent() << write_val(tset->get_elem_type(), val) << endl;
662
+ indent_down();
663
+
664
+ out << "]." << endl <<
665
+ indent() << "oprot writeSetEnd] value";
666
+ indent_down();
667
+
668
+ return out.str();
669
+ }
670
+
671
+ string t_st_generator::set_reader(t_set *tset) {
672
+ std::ostringstream out;
673
+ string desc = temp_name();
674
+ string val = temp_name();
675
+
676
+ out << "[|" << desc << " " << val << "| " << desc << " := iprot readSetBegin." << endl;
677
+ indent_up();
678
+
679
+ out << indent() << val << " := Set new." << endl <<
680
+ indent() << desc << " size timesRepeat: [" << endl;
681
+
682
+ indent_up();
683
+ out << indent() << val << " add: " << read_val(tset->get_elem_type());
684
+ indent_down();
685
+
686
+ out << "]." << endl <<
687
+ indent() << "iprot readSetEnd." << endl <<
688
+ indent() << val << "] value";
689
+ indent_down();
690
+
691
+ return out.str();
692
+ }
693
+
694
+ string t_st_generator::struct_writer(t_struct *tstruct, string sname) {
695
+ std::ostringstream out;
696
+ const vector<t_field*>& fields = tstruct->get_sorted_members();
697
+ vector<t_field*>::const_iterator fld_iter;
698
+
699
+ out << "[oprot writeStructBegin: " <<
700
+ "(TStruct new name: '" + tstruct->get_name() +"')." << endl;
701
+ indent_up();
702
+
703
+ for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
704
+ bool optional = (*fld_iter)->get_req() == t_field::T_OPTIONAL;
705
+ string fname = (*fld_iter)->get_name();
706
+ string accessor = sname + " " + sanitize(fname);
707
+
708
+ if (optional) {
709
+ out << indent() << accessor << " ifNotNil: [" << endl;
710
+ indent_up();
711
+ }
712
+
713
+ out << indent() << "oprot writeFieldBegin: (TField new name: '" << fname <<
714
+ "'; type: " << type_to_enum((*fld_iter)->get_type()) <<
715
+ "; id: " << (*fld_iter)->get_key() << ")." << endl;
716
+
717
+ out << indent() << write_val((*fld_iter)->get_type(), accessor) << "." << endl <<
718
+ indent() << "oprot writeFieldEnd";
719
+
720
+ if (optional) {
721
+ out << "]";
722
+ indent_down();
723
+ }
724
+
725
+ out << "." << endl;
726
+ }
727
+
728
+ out << indent() << "oprot writeFieldStop; writeStructEnd] value";
729
+ indent_down();
730
+
731
+ return out.str();
732
+ }
733
+
734
+ string t_st_generator::struct_reader(t_struct *tstruct, string clsName = "") {
735
+ std::ostringstream out;
736
+ const vector<t_field*>& fields = tstruct->get_members();
737
+ vector<t_field*>::const_iterator fld_iter;
738
+ string val = temp_name();
739
+ string desc = temp_name();
740
+ string found = temp_name();
741
+
742
+ if (clsName.size() == 0) {
743
+ clsName = tstruct->get_name();
744
+ }
745
+
746
+ out << "[|" << desc << " " << val << "|" << endl;
747
+ indent_up();
748
+
749
+ //This is nasty, but without it we'll break things by prefixing TResult.
750
+ string name = ((capitalize(clsName) == "TResult") ? capitalize(clsName) : prefix(clsName));
751
+ out << indent() << val << " := " << name << " new." << endl;
752
+
753
+ out << indent() << "iprot readStructBegin." << endl <<
754
+ indent() << "[" << desc << " := iprot readFieldBegin." << endl <<
755
+ indent() << desc << " type = TType stop] whileFalse: [|" << found << "|" << endl;
756
+ indent_up();
757
+
758
+ for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
759
+ out << indent() << desc << " id = " << (*fld_iter)->get_key() <<
760
+ " ifTrue: [" << endl;
761
+ indent_up();
762
+
763
+ out << indent() << found << " := true." << endl <<
764
+ indent() << val << " " << sanitize((*fld_iter)->get_name()) << ": " <<
765
+ read_val((*fld_iter)->get_type());
766
+ indent_down();
767
+
768
+ out << "]." << endl;
769
+ }
770
+
771
+ out << indent() << found << " ifNil: [iprot skip: " << desc << " type]]." << endl;
772
+ indent_down();
773
+
774
+ out << indent() << "oprot readStructEnd." << endl <<
775
+ indent() << val << "] value";
776
+ indent_down();
777
+
778
+ return out.str();
779
+ }
780
+
781
+ string t_st_generator::write_val(t_type *t, string fname) {
782
+ t = get_true_type(t);
783
+
784
+ if (t->is_base_type()) {
785
+ t_base_type::t_base tbase = ((t_base_type*) t)->get_base();
786
+ switch(tbase) {
787
+ case t_base_type::TYPE_DOUBLE:
788
+ return "iprot writeDouble: " + fname + " asFloat";
789
+ break;
790
+ case t_base_type::TYPE_BYTE:
791
+ case t_base_type::TYPE_I16:
792
+ case t_base_type::TYPE_I32:
793
+ case t_base_type::TYPE_I64:
794
+ return "iprot write" + capitalize(type_name(t)) + ": " + fname + " asInteger";
795
+ default:
796
+ return "iprot write" + capitalize(type_name(t)) + ": " + fname;
797
+ }
798
+ } else if (t->is_map()) {
799
+ return map_writer((t_map*) t, fname);
800
+ } else if (t->is_struct() || t->is_xception()) {
801
+ return struct_writer((t_struct*) t, fname);
802
+ } else if (t->is_list()) {
803
+ return list_writer((t_list*) t, fname);
804
+ } else if (t->is_set()) {
805
+ return set_writer((t_set*) t, fname);
806
+ } else if (t->is_enum()) {
807
+ return "iprot writeI32: " + fname;
808
+ } else {
809
+ throw "Sorry, I don't know how to write this: " + type_name(t);
810
+ }
811
+ }
812
+
813
+ string t_st_generator::read_val(t_type *t) {
814
+ t = get_true_type(t);
815
+
816
+ if (t->is_base_type()) {
817
+ return "iprot read" + capitalize(type_name(t));
818
+ } else if (t->is_map()) {
819
+ return map_reader((t_map*) t);
820
+ } else if (t->is_struct() || t->is_xception()) {
821
+ return struct_reader((t_struct*) t);
822
+ } else if (t->is_list()) {
823
+ return list_reader((t_list*) t);
824
+ } else if (t->is_set()) {
825
+ return set_reader((t_set*) t);
826
+ } else if (t->is_enum()) {
827
+ return "iprot readI32";
828
+ } else {
829
+ throw "Sorry, I don't know how to read this: " + type_name(t);
830
+ }
831
+ }
832
+
833
+ void t_st_generator::generate_send_method(t_function* function) {
834
+ string funname = function->get_name();
835
+ string signature = function_signature(function);
836
+ t_struct* arg_struct = function->get_arglist();
837
+ const vector<t_field*>& fields = arg_struct->get_members();
838
+ vector<t_field*>::const_iterator fld_iter;
839
+
840
+ st_method(f_, client_class_name(), "send" + capitalize(signature));
841
+ f_ << "oprot writeMessageBegin:" << endl;
842
+ indent_up();
843
+
844
+ f_ << indent() << "(TCallMessage new" << endl;
845
+ indent_up();
846
+
847
+ f_ << indent() << "name: '" << funname << "'; " << endl <<
848
+ indent() << "seqid: self nextSeqid)." << endl;
849
+ indent_down();
850
+ indent_down();
851
+
852
+ f_ << indent() << "oprot writeStructBegin: " <<
853
+ "(TStruct new name: '" + capitalize(function->get_name()) + "_args')." << endl;
854
+
855
+ for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
856
+ string fname = (*fld_iter)->get_name();
857
+
858
+ f_ << indent() << "oprot writeFieldBegin: (TField new name: '" << fname <<
859
+ "'; type: " << type_to_enum((*fld_iter)->get_type()) <<
860
+ "; id: " << (*fld_iter)->get_key() << ")." << endl;
861
+
862
+ f_ << indent() << write_val((*fld_iter)->get_type(), fname) << "." << endl <<
863
+ indent() << "oprot writeFieldEnd." << endl;
864
+ }
865
+
866
+ f_ << indent() << "oprot writeFieldStop; writeStructEnd; writeMessageEnd." << endl;
867
+ f_ << indent() << "oprot transport flush";
868
+
869
+ st_close_method(f_);
870
+ }
871
+
872
+ // We only support receiving TResult structures (so this won't work on the server side)
873
+ void t_st_generator::generate_recv_method(t_function* function) {
874
+ string funname = function->get_name();
875
+ string signature = function_signature(function);
876
+
877
+ t_struct result(program_, "TResult");
878
+ t_field success(function->get_returntype(), "success", 0);
879
+ result.append(&success);
880
+
881
+ t_struct* xs = function->get_xceptions();
882
+ const vector<t_field*>& fields = xs->get_members();
883
+ vector<t_field*>::const_iterator f_iter;
884
+ for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
885
+ // duplicate the field, but call it "exception"... we don't need a dynamic name
886
+ t_field *exception = new t_field((*f_iter)->get_type(), "exception", (*f_iter)->get_key());
887
+ result.append(exception);
888
+ }
889
+
890
+ st_method(f_, client_class_name(), "recv" + capitalize(funname));
891
+ f_ << "| f msg res | " << endl <<
892
+ indent() << "msg := oprot readMessageBegin." << endl <<
893
+ indent() << "self validateRemoteMessage: msg." << endl <<
894
+ indent() << "res := " << struct_reader(&result) << "." << endl <<
895
+ indent() << "oprot readMessageEnd." << endl <<
896
+ indent() << "oprot transport flush." << endl <<
897
+ indent() << "res exception ifNotNil: [res exception signal]." << endl <<
898
+ indent() << "^ res";
899
+ st_close_method(f_);
900
+ }
901
+
902
+ string t_st_generator::function_types_comment(t_function* fn) {
903
+ std::ostringstream out;
904
+ const vector<t_field*>& fields = fn->get_arglist()->get_members();
905
+ vector<t_field*>::const_iterator f_iter;
906
+
907
+ out << "\"";
908
+
909
+ for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
910
+ out << (*f_iter)->get_name() << ": " << type_name((*f_iter)->get_type());
911
+ if ((f_iter + 1) != fields.end()) {
912
+ out << ", ";
913
+ }
914
+ }
915
+
916
+ out << "\"";
917
+
918
+ return out.str();
919
+ }
920
+
921
+ /**
922
+ * Generates a service client definition.
923
+ *
924
+ * @param tservice The service to generate a server for.
925
+ */
926
+ void t_st_generator::generate_service_client(t_service* tservice) {
927
+ string extends = "";
928
+ string extends_client = "TClient";
929
+ vector<t_function*> functions = tservice->get_functions();
930
+ vector<t_function*>::iterator f_iter;
931
+
932
+ if (tservice->get_extends() != NULL) {
933
+ extends = type_name(tservice->get_extends());
934
+ extends_client = extends + "Client";
935
+ }
936
+
937
+ f_ << extends_client << " subclass: #" << prefix(client_class_name()) << endl <<
938
+ "\tinstanceVariableNames: ''\n" <<
939
+ "\tclassVariableNames: ''\n" <<
940
+ "\tpoolDictionaries: ''\n" <<
941
+ "\tcategory: '" << generated_category() << "'!\n\n";
942
+
943
+ for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
944
+ string funname = (*f_iter)->get_name();
945
+ string signature = function_signature(*f_iter);
946
+
947
+ st_method(f_, client_class_name(), signature);
948
+ f_ << function_types_comment(*f_iter) << endl <<
949
+ indent() << "self send" << capitalize(signature) << "." << endl;
950
+
951
+ if (!(*f_iter)->is_oneway()) {
952
+ f_ << indent() << "^ self recv" << capitalize(funname) << " success " << endl;
953
+ }
954
+
955
+ st_close_method(f_);
956
+
957
+ generate_send_method(*f_iter);
958
+ if (!(*f_iter)->is_oneway()) {
959
+ generate_recv_method(*f_iter);
960
+ }
961
+ }
962
+ }
963
+
964
+ string t_st_generator::sanitize(string s) {
965
+ std::ostringstream out;
966
+ bool underscore = false;
967
+
968
+ for (unsigned int i = 0; i < s.size(); i++) {
969
+ if (s[i] == '_') {
970
+ underscore = true;
971
+ continue;
972
+ }
973
+ if (underscore) {
974
+ out << (char) toupper(s[i]);
975
+ underscore = false;
976
+ continue;
977
+ }
978
+ out << s[i];
979
+ }
980
+
981
+ return out.str();
982
+ }
983
+
984
+ /**
985
+ * Renders a function signature of the form 'type name(args)'
986
+ *
987
+ * @param tfunction Function definition
988
+ * @return String of rendered function definition
989
+ */
990
+ string t_st_generator::function_signature(t_function* tfunction) {
991
+ return tfunction->get_name() + capitalize(argument_list(tfunction->get_arglist()));
992
+ }
993
+
994
+ /**
995
+ * Renders a field list
996
+ */
997
+ string t_st_generator::argument_list(t_struct* tstruct) {
998
+ string result = "";
999
+
1000
+ const vector<t_field*>& fields = tstruct->get_members();
1001
+ vector<t_field*>::const_iterator f_iter;
1002
+ bool first = true;
1003
+ for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
1004
+ if (first) {
1005
+ first = false;
1006
+ } else {
1007
+ result += " ";
1008
+ }
1009
+ result += (*f_iter)->get_name() + ": " + (*f_iter)->get_name();
1010
+ }
1011
+ return result;
1012
+ }
1013
+
1014
+ string t_st_generator::type_name(t_type* ttype) {
1015
+ string prefix = "";
1016
+ t_program* program = ttype->get_program();
1017
+ if (program != NULL && program != program_) {
1018
+ if (!ttype->is_service()) {
1019
+ prefix = program->get_name() + "_types.";
1020
+ }
1021
+ }
1022
+
1023
+ string name = ttype->get_name();
1024
+ if (ttype->is_struct() || ttype->is_xception()) {
1025
+ name = capitalize(ttype->get_name());
1026
+ }
1027
+
1028
+ return prefix + name;
1029
+ }
1030
+
1031
+ /* Convert t_type to Smalltalk type code */
1032
+ string t_st_generator::type_to_enum(t_type* type) {
1033
+ type = get_true_type(type);
1034
+
1035
+ if (type->is_base_type()) {
1036
+ t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
1037
+ switch (tbase) {
1038
+ case t_base_type::TYPE_VOID:
1039
+ throw "NO T_VOID CONSTRUCT";
1040
+ case t_base_type::TYPE_STRING:
1041
+ return "TType string";
1042
+ case t_base_type::TYPE_BOOL:
1043
+ return "TType bool";
1044
+ case t_base_type::TYPE_BYTE:
1045
+ return "TType byte";
1046
+ case t_base_type::TYPE_I16:
1047
+ return "TType i16";
1048
+ case t_base_type::TYPE_I32:
1049
+ return "TType i32";
1050
+ case t_base_type::TYPE_I64:
1051
+ return "TType i64";
1052
+ case t_base_type::TYPE_DOUBLE:
1053
+ return "TType double";
1054
+ }
1055
+ } else if (type->is_enum()) {
1056
+ return "TType i32";
1057
+ } else if (type->is_struct() || type->is_xception()) {
1058
+ return "TType struct";
1059
+ } else if (type->is_map()) {
1060
+ return "TType map";
1061
+ } else if (type->is_set()) {
1062
+ return "TType set";
1063
+ } else if (type->is_list()) {
1064
+ return "TType list";
1065
+ }
1066
+
1067
+ throw "INVALID TYPE IN type_to_enum: " + type->get_name();
1068
+ }
1069
+
1070
+
1071
+ THRIFT_REGISTER_GENERATOR(st, "Smalltalk", "");