zeroc-ice 3.6b1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (675) hide show
  1. checksums.yaml +7 -0
  2. data/ICE_LICENSE +54 -0
  3. data/LICENSE +339 -0
  4. data/bin/slice2rb +17 -0
  5. data/ext/Communicator.cpp +596 -0
  6. data/ext/Communicator.h +25 -0
  7. data/ext/Config.h +111 -0
  8. data/ext/Connection.cpp +381 -0
  9. data/ext/Connection.h +26 -0
  10. data/ext/Endpoint.cpp +311 -0
  11. data/ext/Endpoint.h +27 -0
  12. data/ext/ImplicitContext.cpp +152 -0
  13. data/ext/ImplicitContext.h +25 -0
  14. data/ext/Init.cpp +52 -0
  15. data/ext/Logger.cpp +151 -0
  16. data/ext/Logger.h +28 -0
  17. data/ext/ObjectFactory.cpp +140 -0
  18. data/ext/ObjectFactory.h +50 -0
  19. data/ext/Operation.cpp +676 -0
  20. data/ext/Operation.h +36 -0
  21. data/ext/Properties.cpp +369 -0
  22. data/ext/Properties.h +25 -0
  23. data/ext/Proxy.cpp +1354 -0
  24. data/ext/Proxy.h +27 -0
  25. data/ext/Slice.cpp +223 -0
  26. data/ext/Slice.h +22 -0
  27. data/ext/Types.cpp +3160 -0
  28. data/ext/Types.h +545 -0
  29. data/ext/Util.cpp +792 -0
  30. data/ext/Util.h +511 -0
  31. data/ext/extconf.rb +118 -0
  32. data/ext/ice/BZIP_LICENSE +42 -0
  33. data/ext/ice/MCPP_LICENSE +36 -0
  34. data/ext/ice/bzip2/blocksort.c +1094 -0
  35. data/ext/ice/bzip2/bzlib.c +1572 -0
  36. data/ext/ice/bzip2/bzlib.h +282 -0
  37. data/ext/ice/bzip2/bzlib_private.h +509 -0
  38. data/ext/ice/bzip2/compress.c +672 -0
  39. data/ext/ice/bzip2/crctable.c +104 -0
  40. data/ext/ice/bzip2/decompress.c +646 -0
  41. data/ext/ice/bzip2/huffman.c +205 -0
  42. data/ext/ice/bzip2/randtable.c +84 -0
  43. data/ext/ice/cpp/include/Ice/ACMF.h +30 -0
  44. data/ext/ice/cpp/include/Ice/Application.h +156 -0
  45. data/ext/ice/cpp/include/Ice/AsyncResult.h +363 -0
  46. data/ext/ice/cpp/include/Ice/AsyncResultF.h +26 -0
  47. data/ext/ice/cpp/include/Ice/BasicStream.h +1315 -0
  48. data/ext/ice/cpp/include/Ice/Buffer.h +159 -0
  49. data/ext/ice/cpp/include/Ice/BuiltinSequences.h +74 -0
  50. data/ext/ice/cpp/include/Ice/Communicator.h +194 -0
  51. data/ext/ice/cpp/include/Ice/CommunicatorAsync.h +115 -0
  52. data/ext/ice/cpp/include/Ice/CommunicatorF.h +60 -0
  53. data/ext/ice/cpp/include/Ice/Config.h +97 -0
  54. data/ext/ice/cpp/include/Ice/Connection.h +495 -0
  55. data/ext/ice/cpp/include/Ice/ConnectionAsync.h +115 -0
  56. data/ext/ice/cpp/include/Ice/ConnectionF.h +72 -0
  57. data/ext/ice/cpp/include/Ice/ConnectionFactoryF.h +30 -0
  58. data/ext/ice/cpp/include/Ice/ConnectionIF.h +37 -0
  59. data/ext/ice/cpp/include/Ice/Current.h +94 -0
  60. data/ext/ice/cpp/include/Ice/DefaultObjectFactory.h +48 -0
  61. data/ext/ice/cpp/include/Ice/DeprecatedStringConverter.h +62 -0
  62. data/ext/ice/cpp/include/Ice/DispatchInterceptor.h +33 -0
  63. data/ext/ice/cpp/include/Ice/Dispatcher.h +51 -0
  64. data/ext/ice/cpp/include/Ice/DynamicLibrary.h +105 -0
  65. data/ext/ice/cpp/include/Ice/DynamicLibraryF.h +29 -0
  66. data/ext/ice/cpp/include/Ice/Endpoint.h +350 -0
  67. data/ext/ice/cpp/include/Ice/EndpointF.h +97 -0
  68. data/ext/ice/cpp/include/Ice/EndpointTypes.h +74 -0
  69. data/ext/ice/cpp/include/Ice/Exception.h +114 -0
  70. data/ext/ice/cpp/include/Ice/FacetMap.h +56 -0
  71. data/ext/ice/cpp/include/Ice/FactoryTable.h +69 -0
  72. data/ext/ice/cpp/include/Ice/FactoryTableInit.h +87 -0
  73. data/ext/ice/cpp/include/Ice/Format.h +39 -0
  74. data/ext/ice/cpp/include/Ice/Functional.h +138 -0
  75. data/ext/ice/cpp/include/Ice/GCObject.h +73 -0
  76. data/ext/ice/cpp/include/Ice/Handle.h +192 -0
  77. data/ext/ice/cpp/include/Ice/Ice.h +54 -0
  78. data/ext/ice/cpp/include/Ice/Identity.h +160 -0
  79. data/ext/ice/cpp/include/Ice/ImplicitContext.h +96 -0
  80. data/ext/ice/cpp/include/Ice/ImplicitContextF.h +60 -0
  81. data/ext/ice/cpp/include/Ice/Incoming.h +131 -0
  82. data/ext/ice/cpp/include/Ice/IncomingAsync.h +108 -0
  83. data/ext/ice/cpp/include/Ice/IncomingAsyncF.h +35 -0
  84. data/ext/ice/cpp/include/Ice/Initialize.h +141 -0
  85. data/ext/ice/cpp/include/Ice/InstanceF.h +26 -0
  86. data/ext/ice/cpp/include/Ice/Instrumentation.h +377 -0
  87. data/ext/ice/cpp/include/Ice/InstrumentationF.h +71 -0
  88. data/ext/ice/cpp/include/Ice/LocalException.h +1022 -0
  89. data/ext/ice/cpp/include/Ice/LocalObject.h +36 -0
  90. data/ext/ice/cpp/include/Ice/LocalObjectF.h +26 -0
  91. data/ext/ice/cpp/include/Ice/Locator.h +2191 -0
  92. data/ext/ice/cpp/include/Ice/LocatorF.h +89 -0
  93. data/ext/ice/cpp/include/Ice/Logger.h +94 -0
  94. data/ext/ice/cpp/include/Ice/LoggerF.h +60 -0
  95. data/ext/ice/cpp/include/Ice/LoggerUtil.h +153 -0
  96. data/ext/ice/cpp/include/Ice/Makefile +26 -0
  97. data/ext/ice/cpp/include/Ice/Metrics.h +2989 -0
  98. data/ext/ice/cpp/include/Ice/MetricsAdminI.h +662 -0
  99. data/ext/ice/cpp/include/Ice/MetricsFunctional.h +144 -0
  100. data/ext/ice/cpp/include/Ice/MetricsObserverI.h +576 -0
  101. data/ext/ice/cpp/include/Ice/NativePropertiesAdmin.h +55 -0
  102. data/ext/ice/cpp/include/Ice/Object.h +165 -0
  103. data/ext/ice/cpp/include/Ice/ObjectAdapter.h +162 -0
  104. data/ext/ice/cpp/include/Ice/ObjectAdapterF.h +60 -0
  105. data/ext/ice/cpp/include/Ice/ObjectAdapterFactoryF.h +26 -0
  106. data/ext/ice/cpp/include/Ice/ObjectF.h +26 -0
  107. data/ext/ice/cpp/include/Ice/ObjectFactory.h +86 -0
  108. data/ext/ice/cpp/include/Ice/ObjectFactoryF.h +60 -0
  109. data/ext/ice/cpp/include/Ice/ObjectFactoryManagerF.h +26 -0
  110. data/ext/ice/cpp/include/Ice/ObserverHelper.h +177 -0
  111. data/ext/ice/cpp/include/Ice/Outgoing.h +197 -0
  112. data/ext/ice/cpp/include/Ice/OutgoingAsync.h +264 -0
  113. data/ext/ice/cpp/include/Ice/OutgoingAsyncF.h +38 -0
  114. data/ext/ice/cpp/include/Ice/Plugin.h +121 -0
  115. data/ext/ice/cpp/include/Ice/PluginF.h +66 -0
  116. data/ext/ice/cpp/include/Ice/Process.h +568 -0
  117. data/ext/ice/cpp/include/Ice/ProcessF.h +77 -0
  118. data/ext/ice/cpp/include/Ice/Properties.h +130 -0
  119. data/ext/ice/cpp/include/Ice/PropertiesAdmin.h +824 -0
  120. data/ext/ice/cpp/include/Ice/PropertiesF.h +83 -0
  121. data/ext/ice/cpp/include/Ice/Protocol.h +242 -0
  122. data/ext/ice/cpp/include/Ice/Proxy.h +2448 -0
  123. data/ext/ice/cpp/include/Ice/ProxyF.h +78 -0
  124. data/ext/ice/cpp/include/Ice/ProxyFactoryF.h +26 -0
  125. data/ext/ice/cpp/include/Ice/ProxyHandle.h +330 -0
  126. data/ext/ice/cpp/include/Ice/ReferenceF.h +34 -0
  127. data/ext/ice/cpp/include/Ice/RemoteLogger.h +1496 -0
  128. data/ext/ice/cpp/include/Ice/RequestHandlerF.h +29 -0
  129. data/ext/ice/cpp/include/Ice/ResponseHandlerF.h +25 -0
  130. data/ext/ice/cpp/include/Ice/Router.h +1155 -0
  131. data/ext/ice/cpp/include/Ice/RouterF.h +77 -0
  132. data/ext/ice/cpp/include/Ice/ServantLocator.h +90 -0
  133. data/ext/ice/cpp/include/Ice/ServantLocatorF.h +60 -0
  134. data/ext/ice/cpp/include/Ice/ServantManagerF.h +26 -0
  135. data/ext/ice/cpp/include/Ice/Service.h +260 -0
  136. data/ext/ice/cpp/include/Ice/SliceChecksumDict.h +56 -0
  137. data/ext/ice/cpp/include/Ice/SliceChecksums.h +34 -0
  138. data/ext/ice/cpp/include/Ice/SlicedData.h +103 -0
  139. data/ext/ice/cpp/include/Ice/SlicedDataF.h +34 -0
  140. data/ext/ice/cpp/include/Ice/Stream.h +449 -0
  141. data/ext/ice/cpp/include/Ice/StreamF.h +30 -0
  142. data/ext/ice/cpp/include/Ice/StreamHelpers.h +877 -0
  143. data/ext/ice/cpp/include/Ice/ThreadPoolF.h +28 -0
  144. data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +56 -0
  145. data/ext/ice/cpp/include/Ice/Version.h +254 -0
  146. data/ext/ice/cpp/include/IceSSL/Config.h +23 -0
  147. data/ext/ice/cpp/include/IceSSL/ConnectionInfo.h +119 -0
  148. data/ext/ice/cpp/include/IceSSL/EndpointInfo.h +101 -0
  149. data/ext/ice/cpp/include/IceSSL/IceSSL.h +22 -0
  150. data/ext/ice/cpp/include/IceSSL/Makefile +26 -0
  151. data/ext/ice/cpp/include/IceSSL/Plugin.h +558 -0
  152. data/ext/ice/cpp/include/IceUtil/AbstractMutex.h +119 -0
  153. data/ext/ice/cpp/include/IceUtil/Cache.h +362 -0
  154. data/ext/ice/cpp/include/IceUtil/Cond.h +323 -0
  155. data/ext/ice/cpp/include/IceUtil/Config.h +234 -0
  156. data/ext/ice/cpp/include/IceUtil/CountDownLatch.h +50 -0
  157. data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +70 -0
  158. data/ext/ice/cpp/include/IceUtil/DisableWarnings.h +45 -0
  159. data/ext/ice/cpp/include/IceUtil/Exception.h +184 -0
  160. data/ext/ice/cpp/include/IceUtil/Functional.h +389 -0
  161. data/ext/ice/cpp/include/IceUtil/Handle.h +266 -0
  162. data/ext/ice/cpp/include/IceUtil/IceUtil.h +51 -0
  163. data/ext/ice/cpp/include/IceUtil/IconvStringConverter.h +302 -0
  164. data/ext/ice/cpp/include/IceUtil/InputUtil.h +47 -0
  165. data/ext/ice/cpp/include/IceUtil/Iterator.h +36 -0
  166. data/ext/ice/cpp/include/IceUtil/Lock.h +135 -0
  167. data/ext/ice/cpp/include/IceUtil/Makefile +26 -0
  168. data/ext/ice/cpp/include/IceUtil/Monitor.h +249 -0
  169. data/ext/ice/cpp/include/IceUtil/Mutex.h +357 -0
  170. data/ext/ice/cpp/include/IceUtil/MutexProtocol.h +28 -0
  171. data/ext/ice/cpp/include/IceUtil/MutexPtrLock.h +83 -0
  172. data/ext/ice/cpp/include/IceUtil/MutexPtrTryLock.h +82 -0
  173. data/ext/ice/cpp/include/IceUtil/Optional.h +322 -0
  174. data/ext/ice/cpp/include/IceUtil/Options.h +141 -0
  175. data/ext/ice/cpp/include/IceUtil/OutputUtil.h +362 -0
  176. data/ext/ice/cpp/include/IceUtil/PopDisableWarnings.h +19 -0
  177. data/ext/ice/cpp/include/IceUtil/PushDisableWarnings.h +26 -0
  178. data/ext/ice/cpp/include/IceUtil/Random.h +24 -0
  179. data/ext/ice/cpp/include/IceUtil/RecMutex.h +113 -0
  180. data/ext/ice/cpp/include/IceUtil/SHA1.h +65 -0
  181. data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +44 -0
  182. data/ext/ice/cpp/include/IceUtil/ScopedArray.h +97 -0
  183. data/ext/ice/cpp/include/IceUtil/Shared.h +168 -0
  184. data/ext/ice/cpp/include/IceUtil/StringConverter.h +175 -0
  185. data/ext/ice/cpp/include/IceUtil/StringUtil.h +91 -0
  186. data/ext/ice/cpp/include/IceUtil/Thread.h +181 -0
  187. data/ext/ice/cpp/include/IceUtil/ThreadException.h +108 -0
  188. data/ext/ice/cpp/include/IceUtil/Time.h +209 -0
  189. data/ext/ice/cpp/include/IceUtil/Timer.h +143 -0
  190. data/ext/ice/cpp/include/IceUtil/UUID.h +22 -0
  191. data/ext/ice/cpp/include/IceUtil/UndefSysMacros.h +42 -0
  192. data/ext/ice/cpp/include/IceUtil/UniquePtr.h +101 -0
  193. data/ext/ice/cpp/include/Slice/CPlusPlusUtil.h +64 -0
  194. data/ext/ice/cpp/include/Slice/Checksum.h +26 -0
  195. data/ext/ice/cpp/include/Slice/CsUtil.h +92 -0
  196. data/ext/ice/cpp/include/Slice/DotNetNames.h +34 -0
  197. data/ext/ice/cpp/include/Slice/FileTracker.h +71 -0
  198. data/ext/ice/cpp/include/Slice/JavaUtil.h +277 -0
  199. data/ext/ice/cpp/include/Slice/Makefile +26 -0
  200. data/ext/ice/cpp/include/Slice/PHPUtil.h +50 -0
  201. data/ext/ice/cpp/include/Slice/Parser.h +1116 -0
  202. data/ext/ice/cpp/include/Slice/Preprocessor.h +68 -0
  203. data/ext/ice/cpp/include/Slice/PythonUtil.h +64 -0
  204. data/ext/ice/cpp/include/Slice/RubyUtil.h +54 -0
  205. data/ext/ice/cpp/include/Slice/Util.h +33 -0
  206. data/ext/ice/cpp/src/Ice/ACM.cpp +343 -0
  207. data/ext/ice/cpp/src/Ice/ACM.h +117 -0
  208. data/ext/ice/cpp/src/Ice/Acceptor.cpp +16 -0
  209. data/ext/ice/cpp/src/Ice/Acceptor.h +41 -0
  210. data/ext/ice/cpp/src/Ice/AcceptorF.h +30 -0
  211. data/ext/ice/cpp/src/Ice/Application.cpp +760 -0
  212. data/ext/ice/cpp/src/Ice/AsyncResult.cpp +599 -0
  213. data/ext/ice/cpp/src/Ice/Base64.cpp +269 -0
  214. data/ext/ice/cpp/src/Ice/Base64.h +36 -0
  215. data/ext/ice/cpp/src/Ice/BasicStream.cpp +3393 -0
  216. data/ext/ice/cpp/src/Ice/Buffer.cpp +98 -0
  217. data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +34 -0
  218. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +718 -0
  219. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.h +106 -0
  220. data/ext/ice/cpp/src/Ice/Communicator.cpp +45 -0
  221. data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +38 -0
  222. data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +386 -0
  223. data/ext/ice/cpp/src/Ice/CommunicatorI.h +112 -0
  224. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.cpp +546 -0
  225. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.h +97 -0
  226. data/ext/ice/cpp/src/Ice/Connection.cpp +58 -0
  227. data/ext/ice/cpp/src/Ice/ConnectionF.cpp +38 -0
  228. data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +1639 -0
  229. data/ext/ice/cpp/src/Ice/ConnectionFactory.h +236 -0
  230. data/ext/ice/cpp/src/Ice/ConnectionI.cpp +3876 -0
  231. data/ext/ice/cpp/src/Ice/ConnectionI.h +364 -0
  232. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +115 -0
  233. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.h +50 -0
  234. data/ext/ice/cpp/src/Ice/Connector.cpp +16 -0
  235. data/ext/ice/cpp/src/Ice/Connector.h +36 -0
  236. data/ext/ice/cpp/src/Ice/ConnectorF.h +26 -0
  237. data/ext/ice/cpp/src/Ice/Current.cpp +38 -0
  238. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +168 -0
  239. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.h +57 -0
  240. data/ext/ice/cpp/src/Ice/DefaultsAndOverridesF.h +26 -0
  241. data/ext/ice/cpp/src/Ice/DeprecatedStringConverter.cpp +60 -0
  242. data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +49 -0
  243. data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +281 -0
  244. data/ext/ice/cpp/src/Ice/Endpoint.cpp +53 -0
  245. data/ext/ice/cpp/src/Ice/EndpointF.cpp +38 -0
  246. data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +25 -0
  247. data/ext/ice/cpp/src/Ice/EndpointFactory.h +44 -0
  248. data/ext/ice/cpp/src/Ice/EndpointFactoryF.h +26 -0
  249. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.cpp +208 -0
  250. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.h +46 -0
  251. data/ext/ice/cpp/src/Ice/EndpointFactoryManagerF.h +26 -0
  252. data/ext/ice/cpp/src/Ice/EndpointI.cpp +87 -0
  253. data/ext/ice/cpp/src/Ice/EndpointI.h +165 -0
  254. data/ext/ice/cpp/src/Ice/EndpointIF.h +41 -0
  255. data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +38 -0
  256. data/ext/ice/cpp/src/Ice/EventHandler.cpp +35 -0
  257. data/ext/ice/cpp/src/Ice/EventHandler.h +78 -0
  258. data/ext/ice/cpp/src/Ice/EventHandlerF.h +26 -0
  259. data/ext/ice/cpp/src/Ice/EventLoggerMsg.h +53 -0
  260. data/ext/ice/cpp/src/Ice/Exception.cpp +832 -0
  261. data/ext/ice/cpp/src/Ice/FacetMap.cpp +34 -0
  262. data/ext/ice/cpp/src/Ice/FactoryTable.cpp +158 -0
  263. data/ext/ice/cpp/src/Ice/FactoryTableInit.cpp +95 -0
  264. data/ext/ice/cpp/src/Ice/GCObject.cpp +444 -0
  265. data/ext/ice/cpp/src/Ice/HashUtil.h +59 -0
  266. data/ext/ice/cpp/src/Ice/HttpParser.cpp +680 -0
  267. data/ext/ice/cpp/src/Ice/HttpParser.h +124 -0
  268. data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +733 -0
  269. data/ext/ice/cpp/src/Ice/IPEndpointI.h +157 -0
  270. data/ext/ice/cpp/src/Ice/IPEndpointIF.h +29 -0
  271. data/ext/ice/cpp/src/Ice/Identity.cpp +42 -0
  272. data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +41 -0
  273. data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +38 -0
  274. data/ext/ice/cpp/src/Ice/ImplicitContextI.cpp +639 -0
  275. data/ext/ice/cpp/src/Ice/ImplicitContextI.h +51 -0
  276. data/ext/ice/cpp/src/Ice/Incoming.cpp +757 -0
  277. data/ext/ice/cpp/src/Ice/IncomingAsync.cpp +340 -0
  278. data/ext/ice/cpp/src/Ice/IncomingRequest.h +37 -0
  279. data/ext/ice/cpp/src/Ice/Initialize.cpp +401 -0
  280. data/ext/ice/cpp/src/Ice/Instance.cpp +1928 -0
  281. data/ext/ice/cpp/src/Ice/Instance.h +198 -0
  282. data/ext/ice/cpp/src/Ice/Instrumentation.cpp +68 -0
  283. data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +43 -0
  284. data/ext/ice/cpp/src/Ice/InstrumentationI.cpp +1083 -0
  285. data/ext/ice/cpp/src/Ice/InstrumentationI.h +262 -0
  286. data/ext/ice/cpp/src/Ice/LocalException.cpp +2091 -0
  287. data/ext/ice/cpp/src/Ice/LocalObject.cpp +29 -0
  288. data/ext/ice/cpp/src/Ice/Locator.cpp +1946 -0
  289. data/ext/ice/cpp/src/Ice/LocatorF.cpp +39 -0
  290. data/ext/ice/cpp/src/Ice/LocatorInfo.cpp +917 -0
  291. data/ext/ice/cpp/src/Ice/LocatorInfo.h +193 -0
  292. data/ext/ice/cpp/src/Ice/LocatorInfoF.h +34 -0
  293. data/ext/ice/cpp/src/Ice/Logger.cpp +40 -0
  294. data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +862 -0
  295. data/ext/ice/cpp/src/Ice/LoggerAdminI.h +46 -0
  296. data/ext/ice/cpp/src/Ice/LoggerF.cpp +38 -0
  297. data/ext/ice/cpp/src/Ice/LoggerI.cpp +199 -0
  298. data/ext/ice/cpp/src/Ice/LoggerI.h +57 -0
  299. data/ext/ice/cpp/src/Ice/LoggerUtil.cpp +107 -0
  300. data/ext/ice/cpp/src/Ice/Makefile +190 -0
  301. data/ext/ice/cpp/src/Ice/Metrics.cpp +2159 -0
  302. data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +669 -0
  303. data/ext/ice/cpp/src/Ice/MetricsObserverI.cpp +14 -0
  304. data/ext/ice/cpp/src/Ice/Network.cpp +2694 -0
  305. data/ext/ice/cpp/src/Ice/Network.h +291 -0
  306. data/ext/ice/cpp/src/Ice/NetworkF.h +28 -0
  307. data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +325 -0
  308. data/ext/ice/cpp/src/Ice/NetworkProxy.h +74 -0
  309. data/ext/ice/cpp/src/Ice/NetworkProxyF.h +26 -0
  310. data/ext/ice/cpp/src/Ice/Object.cpp +440 -0
  311. data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +41 -0
  312. data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +38 -0
  313. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +241 -0
  314. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.h +52 -0
  315. data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +1498 -0
  316. data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +155 -0
  317. data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +41 -0
  318. data/ext/ice/cpp/src/Ice/ObjectFactoryF.cpp +38 -0
  319. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.cpp +140 -0
  320. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.h +43 -0
  321. data/ext/ice/cpp/src/Ice/ObserverHelper.cpp +84 -0
  322. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.cpp +407 -0
  323. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.h +70 -0
  324. data/ext/ice/cpp/src/Ice/Outgoing.cpp +737 -0
  325. data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +874 -0
  326. data/ext/ice/cpp/src/Ice/Plugin.cpp +43 -0
  327. data/ext/ice/cpp/src/Ice/PluginF.cpp +38 -0
  328. data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +503 -0
  329. data/ext/ice/cpp/src/Ice/PluginManagerI.h +67 -0
  330. data/ext/ice/cpp/src/Ice/Process.cpp +299 -0
  331. data/ext/ice/cpp/src/Ice/ProcessF.cpp +39 -0
  332. data/ext/ice/cpp/src/Ice/Properties.cpp +45 -0
  333. data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +555 -0
  334. data/ext/ice/cpp/src/Ice/PropertiesAdminI.cpp +207 -0
  335. data/ext/ice/cpp/src/Ice/PropertiesAdminI.h +45 -0
  336. data/ext/ice/cpp/src/Ice/PropertiesF.cpp +39 -0
  337. data/ext/ice/cpp/src/Ice/PropertiesI.cpp +759 -0
  338. data/ext/ice/cpp/src/Ice/PropertiesI.h +78 -0
  339. data/ext/ice/cpp/src/Ice/PropertyNames.cpp +1293 -0
  340. data/ext/ice/cpp/src/Ice/PropertyNames.h +81 -0
  341. data/ext/ice/cpp/src/Ice/Protocol.cpp +137 -0
  342. data/ext/ice/cpp/src/Ice/ProtocolInstance.cpp +98 -0
  343. data/ext/ice/cpp/src/Ice/ProtocolInstance.h +91 -0
  344. data/ext/ice/cpp/src/Ice/ProtocolInstanceF.h +26 -0
  345. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +51 -0
  346. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.h +67 -0
  347. data/ext/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +26 -0
  348. data/ext/ice/cpp/src/Ice/Proxy.cpp +1810 -0
  349. data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +305 -0
  350. data/ext/ice/cpp/src/Ice/ProxyFactory.h +57 -0
  351. data/ext/ice/cpp/src/Ice/Reference.cpp +1947 -0
  352. data/ext/ice/cpp/src/Ice/Reference.h +305 -0
  353. data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +937 -0
  354. data/ext/ice/cpp/src/Ice/ReferenceFactory.h +81 -0
  355. data/ext/ice/cpp/src/Ice/ReferenceFactoryF.h +24 -0
  356. data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +958 -0
  357. data/ext/ice/cpp/src/Ice/ReplyStatus.h +29 -0
  358. data/ext/ice/cpp/src/Ice/RequestHandler.cpp +40 -0
  359. data/ext/ice/cpp/src/Ice/RequestHandler.h +90 -0
  360. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.cpp +70 -0
  361. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.h +41 -0
  362. data/ext/ice/cpp/src/Ice/ResponseHandler.cpp +20 -0
  363. data/ext/ice/cpp/src/Ice/ResponseHandler.h +39 -0
  364. data/ext/ice/cpp/src/Ice/RetryQueue.cpp +154 -0
  365. data/ext/ice/cpp/src/Ice/RetryQueue.h +69 -0
  366. data/ext/ice/cpp/src/Ice/RetryQueueF.h +24 -0
  367. data/ext/ice/cpp/src/Ice/Router.cpp +849 -0
  368. data/ext/ice/cpp/src/Ice/RouterF.cpp +39 -0
  369. data/ext/ice/cpp/src/Ice/RouterInfo.cpp +381 -0
  370. data/ext/ice/cpp/src/Ice/RouterInfo.h +148 -0
  371. data/ext/ice/cpp/src/Ice/RouterInfoF.h +30 -0
  372. data/ext/ice/cpp/src/Ice/Selector.cpp +926 -0
  373. data/ext/ice/cpp/src/Ice/Selector.h +231 -0
  374. data/ext/ice/cpp/src/Ice/ServantLocator.cpp +41 -0
  375. data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +38 -0
  376. data/ext/ice/cpp/src/Ice/ServantManager.cpp +495 -0
  377. data/ext/ice/cpp/src/Ice/ServantManager.h +74 -0
  378. data/ext/ice/cpp/src/Ice/Service.cpp +1897 -0
  379. data/ext/ice/cpp/src/Ice/SharedContext.h +51 -0
  380. data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +34 -0
  381. data/ext/ice/cpp/src/Ice/SliceChecksums.cpp +80 -0
  382. data/ext/ice/cpp/src/Ice/SlicedData.cpp +80 -0
  383. data/ext/ice/cpp/src/Ice/Stream.cpp +53 -0
  384. data/ext/ice/cpp/src/Ice/StreamI.cpp +832 -0
  385. data/ext/ice/cpp/src/Ice/StreamI.h +198 -0
  386. data/ext/ice/cpp/src/Ice/StreamSocket.cpp +521 -0
  387. data/ext/ice/cpp/src/Ice/StreamSocket.h +85 -0
  388. data/ext/ice/cpp/src/Ice/StringConverterPlugin.cpp +145 -0
  389. data/ext/ice/cpp/src/Ice/SysLoggerI.cpp +167 -0
  390. data/ext/ice/cpp/src/Ice/SysLoggerI.h +43 -0
  391. data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +235 -0
  392. data/ext/ice/cpp/src/Ice/TcpAcceptor.h +67 -0
  393. data/ext/ice/cpp/src/Ice/TcpConnector.cpp +133 -0
  394. data/ext/ice/cpp/src/Ice/TcpConnector.h +51 -0
  395. data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +397 -0
  396. data/ext/ice/cpp/src/Ice/TcpEndpointI.h +93 -0
  397. data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +127 -0
  398. data/ext/ice/cpp/src/Ice/TcpTransceiver.h +61 -0
  399. data/ext/ice/cpp/src/Ice/ThreadPool.cpp +1357 -0
  400. data/ext/ice/cpp/src/Ice/ThreadPool.h +399 -0
  401. data/ext/ice/cpp/src/Ice/TraceLevels.cpp +43 -0
  402. data/ext/ice/cpp/src/Ice/TraceLevels.h +50 -0
  403. data/ext/ice/cpp/src/Ice/TraceLevelsF.h +26 -0
  404. data/ext/ice/cpp/src/Ice/TraceUtil.cpp +452 -0
  405. data/ext/ice/cpp/src/Ice/TraceUtil.h +28 -0
  406. data/ext/ice/cpp/src/Ice/Transceiver.cpp +24 -0
  407. data/ext/ice/cpp/src/Ice/Transceiver.h +52 -0
  408. data/ext/ice/cpp/src/Ice/TransceiverF.h +38 -0
  409. data/ext/ice/cpp/src/Ice/UdpConnector.cpp +144 -0
  410. data/ext/ice/cpp/src/Ice/UdpConnector.h +51 -0
  411. data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +483 -0
  412. data/ext/ice/cpp/src/Ice/UdpEndpointI.h +95 -0
  413. data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +1156 -0
  414. data/ext/ice/cpp/src/Ice/UdpTransceiver.h +123 -0
  415. data/ext/ice/cpp/src/Ice/Version.cpp +46 -0
  416. data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +103 -0
  417. data/ext/ice/cpp/src/Ice/WSAcceptor.h +61 -0
  418. data/ext/ice/cpp/src/Ice/WSConnector.cpp +113 -0
  419. data/ext/ice/cpp/src/Ice/WSConnector.h +51 -0
  420. data/ext/ice/cpp/src/Ice/WSEndpoint.cpp +441 -0
  421. data/ext/ice/cpp/src/Ice/WSEndpoint.h +97 -0
  422. data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +1728 -0
  423. data/ext/ice/cpp/src/Ice/WSTransceiver.h +149 -0
  424. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +594 -0
  425. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +1035 -0
  426. data/ext/ice/cpp/src/IceDiscovery/LocatorI.cpp +208 -0
  427. data/ext/ice/cpp/src/IceDiscovery/LocatorI.h +78 -0
  428. data/ext/ice/cpp/src/IceDiscovery/LookupI.cpp +308 -0
  429. data/ext/ice/cpp/src/IceDiscovery/LookupI.h +183 -0
  430. data/ext/ice/cpp/src/IceDiscovery/Makefile +61 -0
  431. data/ext/ice/cpp/src/IceDiscovery/PluginI.cpp +148 -0
  432. data/ext/ice/cpp/src/IceDiscovery/PluginI.h +39 -0
  433. data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +258 -0
  434. data/ext/ice/cpp/src/IceSSL/AcceptorI.h +66 -0
  435. data/ext/ice/cpp/src/IceSSL/Certificate.cpp +1334 -0
  436. data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +42 -0
  437. data/ext/ice/cpp/src/IceSSL/ConnectorI.cpp +151 -0
  438. data/ext/ice/cpp/src/IceSSL/ConnectorI.h +56 -0
  439. data/ext/ice/cpp/src/IceSSL/EndpointI.cpp +397 -0
  440. data/ext/ice/cpp/src/IceSSL/EndpointI.h +96 -0
  441. data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +41 -0
  442. data/ext/ice/cpp/src/IceSSL/Instance.cpp +38 -0
  443. data/ext/ice/cpp/src/IceSSL/Instance.h +42 -0
  444. data/ext/ice/cpp/src/IceSSL/InstanceF.h +34 -0
  445. data/ext/ice/cpp/src/IceSSL/Makefile +82 -0
  446. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +1001 -0
  447. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +607 -0
  448. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +75 -0
  449. data/ext/ice/cpp/src/IceSSL/PluginI.cpp +102 -0
  450. data/ext/ice/cpp/src/IceSSL/PluginI.h +56 -0
  451. data/ext/ice/cpp/src/IceSSL/RFC2253.cpp +541 -0
  452. data/ext/ice/cpp/src/IceSSL/RFC2253.h +67 -0
  453. data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +729 -0
  454. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +1062 -0
  455. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.h +130 -0
  456. data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +291 -0
  457. data/ext/ice/cpp/src/IceSSL/SSLEngine.h +264 -0
  458. data/ext/ice/cpp/src/IceSSL/SSLEngineF.h +41 -0
  459. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +1514 -0
  460. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +609 -0
  461. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +91 -0
  462. data/ext/ice/cpp/src/IceSSL/TrustManager.cpp +246 -0
  463. data/ext/ice/cpp/src/IceSSL/TrustManager.h +51 -0
  464. data/ext/ice/cpp/src/IceSSL/TrustManagerF.h +26 -0
  465. data/ext/ice/cpp/src/IceSSL/Util.cpp +1423 -0
  466. data/ext/ice/cpp/src/IceSSL/Util.h +136 -0
  467. data/ext/ice/cpp/src/IceUtil/ArgVector.cpp +65 -0
  468. data/ext/ice/cpp/src/IceUtil/ArgVector.h +41 -0
  469. data/ext/ice/cpp/src/IceUtil/Cond.cpp +386 -0
  470. data/ext/ice/cpp/src/IceUtil/ConvertUTF.cpp +477 -0
  471. data/ext/ice/cpp/src/IceUtil/ConvertUTF.h +144 -0
  472. data/ext/ice/cpp/src/IceUtil/CountDownLatch.cpp +184 -0
  473. data/ext/ice/cpp/src/IceUtil/CtrlCHandler.cpp +273 -0
  474. data/ext/ice/cpp/src/IceUtil/Exception.cpp +782 -0
  475. data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +532 -0
  476. data/ext/ice/cpp/src/IceUtil/FileUtil.h +159 -0
  477. data/ext/ice/cpp/src/IceUtil/InputUtil.cpp +41 -0
  478. data/ext/ice/cpp/src/IceUtil/Makefile +68 -0
  479. data/ext/ice/cpp/src/IceUtil/MutexProtocol.cpp +24 -0
  480. data/ext/ice/cpp/src/IceUtil/Options.cpp +1049 -0
  481. data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +591 -0
  482. data/ext/ice/cpp/src/IceUtil/Random.cpp +185 -0
  483. data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +257 -0
  484. data/ext/ice/cpp/src/IceUtil/SHA1.cpp +126 -0
  485. data/ext/ice/cpp/src/IceUtil/Shared.cpp +200 -0
  486. data/ext/ice/cpp/src/IceUtil/StopWatch.h +54 -0
  487. data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +450 -0
  488. data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +842 -0
  489. data/ext/ice/cpp/src/IceUtil/Thread.cpp +809 -0
  490. data/ext/ice/cpp/src/IceUtil/ThreadException.cpp +172 -0
  491. data/ext/ice/cpp/src/IceUtil/Time.cpp +306 -0
  492. data/ext/ice/cpp/src/IceUtil/Timer.cpp +251 -0
  493. data/ext/ice/cpp/src/IceUtil/UUID.cpp +174 -0
  494. data/ext/ice/cpp/src/IceUtil/Unicode.cpp +131 -0
  495. data/ext/ice/cpp/src/IceUtil/Unicode.h +49 -0
  496. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +1139 -0
  497. data/ext/ice/cpp/src/Slice/Checksum.cpp +452 -0
  498. data/ext/ice/cpp/src/Slice/CsUtil.cpp +2650 -0
  499. data/ext/ice/cpp/src/Slice/DotNetNames.cpp +146 -0
  500. data/ext/ice/cpp/src/Slice/FileTracker.cpp +203 -0
  501. data/ext/ice/cpp/src/Slice/Grammar.cpp +4755 -0
  502. data/ext/ice/cpp/src/Slice/Grammar.h +98 -0
  503. data/ext/ice/cpp/src/Slice/GrammarUtil.h +234 -0
  504. data/ext/ice/cpp/src/Slice/JavaUtil.cpp +4376 -0
  505. data/ext/ice/cpp/src/Slice/MD5.cpp +57 -0
  506. data/ext/ice/cpp/src/Slice/MD5.h +44 -0
  507. data/ext/ice/cpp/src/Slice/MD5I.cpp +385 -0
  508. data/ext/ice/cpp/src/Slice/MD5I.h +91 -0
  509. data/ext/ice/cpp/src/Slice/Makefile +65 -0
  510. data/ext/ice/cpp/src/Slice/PHPUtil.cpp +156 -0
  511. data/ext/ice/cpp/src/Slice/Parser.cpp +6386 -0
  512. data/ext/ice/cpp/src/Slice/Preprocessor.cpp +686 -0
  513. data/ext/ice/cpp/src/Slice/Python.cpp +675 -0
  514. data/ext/ice/cpp/src/Slice/PythonUtil.cpp +2614 -0
  515. data/ext/ice/cpp/src/Slice/Ruby.cpp +317 -0
  516. data/ext/ice/cpp/src/Slice/RubyUtil.cpp +1774 -0
  517. data/ext/ice/cpp/src/Slice/Scanner.cpp +2426 -0
  518. data/ext/ice/cpp/src/Slice/Util.cpp +325 -0
  519. data/ext/ice/mcpp/config.h.Darwin +227 -0
  520. data/ext/ice/mcpp/config.h.Linux +227 -0
  521. data/ext/ice/mcpp/config.h.MINGW +7 -0
  522. data/ext/ice/mcpp/configed.H +382 -0
  523. data/ext/ice/mcpp/directive.c +1699 -0
  524. data/ext/ice/mcpp/eval.c +1673 -0
  525. data/ext/ice/mcpp/expand.c +2980 -0
  526. data/ext/ice/mcpp/internal.H +564 -0
  527. data/ext/ice/mcpp/main.c +1131 -0
  528. data/ext/ice/mcpp/mbchar.c +869 -0
  529. data/ext/ice/mcpp/mcpp_lib.h +31 -0
  530. data/ext/ice/mcpp/mcpp_out.h +13 -0
  531. data/ext/ice/mcpp/support.c +2811 -0
  532. data/ext/ice/mcpp/system.H +396 -0
  533. data/ext/ice/mcpp/system.c +4940 -0
  534. data/ice.gemspec +41 -0
  535. data/lib/Glacier2.rb +12 -0
  536. data/lib/Glacier2/Metrics.rb +99 -0
  537. data/lib/Glacier2/PermissionsVerifier.rb +168 -0
  538. data/lib/Glacier2/PermissionsVerifierF.rb +34 -0
  539. data/lib/Glacier2/Router.rb +141 -0
  540. data/lib/Glacier2/RouterF.rb +29 -0
  541. data/lib/Glacier2/SSLInfo.rb +79 -0
  542. data/lib/Glacier2/Session.rb +470 -0
  543. data/lib/Ice.rb +659 -0
  544. data/lib/Ice/BuiltinSequences.rb +64 -0
  545. data/lib/Ice/Communicator.rb +93 -0
  546. data/lib/Ice/CommunicatorF.rb +28 -0
  547. data/lib/Ice/Connection.rb +414 -0
  548. data/lib/Ice/ConnectionF.rb +36 -0
  549. data/lib/Ice/Current.rb +152 -0
  550. data/lib/Ice/Endpoint.rb +265 -0
  551. data/lib/Ice/EndpointF.rb +52 -0
  552. data/lib/Ice/EndpointTypes.rb +77 -0
  553. data/lib/Ice/FacetMap.rb +28 -0
  554. data/lib/Ice/Identity.rb +70 -0
  555. data/lib/Ice/ImplicitContext.rb +59 -0
  556. data/lib/Ice/ImplicitContextF.rb +28 -0
  557. data/lib/Ice/Instrumentation.rb +425 -0
  558. data/lib/Ice/InstrumentationF.rb +35 -0
  559. data/lib/Ice/LocalException.rb +1081 -0
  560. data/lib/Ice/Locator.rb +314 -0
  561. data/lib/Ice/LocatorF.rb +34 -0
  562. data/lib/Ice/Logger.rb +57 -0
  563. data/lib/Ice/LoggerF.rb +28 -0
  564. data/lib/Ice/Metrics.rb +696 -0
  565. data/lib/Ice/ObjectAdapterF.rb +28 -0
  566. data/lib/Ice/ObjectFactory.rb +53 -0
  567. data/lib/Ice/ObjectFactoryF.rb +28 -0
  568. data/lib/Ice/Plugin.rb +87 -0
  569. data/lib/Ice/PluginF.rb +32 -0
  570. data/lib/Ice/Process.rb +93 -0
  571. data/lib/Ice/ProcessF.rb +29 -0
  572. data/lib/Ice/Properties.rb +65 -0
  573. data/lib/Ice/PropertiesAdmin.rb +104 -0
  574. data/lib/Ice/PropertiesF.rb +33 -0
  575. data/lib/Ice/Router.rb +163 -0
  576. data/lib/Ice/RouterF.rb +29 -0
  577. data/lib/Ice/SliceChecksumDict.rb +28 -0
  578. data/lib/Ice/Version.rb +100 -0
  579. data/lib/IceBox.rb +10 -0
  580. data/lib/IceBox/IceBox.rb +272 -0
  581. data/lib/IceGrid.rb +17 -0
  582. data/lib/IceGrid/Admin.rb +1076 -0
  583. data/lib/IceGrid/Descriptor.rb +1505 -0
  584. data/lib/IceGrid/Exception.rb +401 -0
  585. data/lib/IceGrid/FileParser.rb +105 -0
  586. data/lib/IceGrid/Locator.rb +105 -0
  587. data/lib/IceGrid/Observer.rb +571 -0
  588. data/lib/IceGrid/Query.rb +168 -0
  589. data/lib/IceGrid/Registry.rb +120 -0
  590. data/lib/IceGrid/Session.rb +114 -0
  591. data/lib/IceGrid/UserAccountMapper.rb +101 -0
  592. data/lib/IcePatch2.rb +10 -0
  593. data/lib/IcePatch2/FileInfo.rb +75 -0
  594. data/lib/IcePatch2/FileServer.rb +141 -0
  595. data/lib/IceStorm.rb +11 -0
  596. data/lib/IceStorm/IceStorm.rb +463 -0
  597. data/lib/IceStorm/Metrics.rb +155 -0
  598. data/slice/Freeze/BackgroundSaveEvictor.ice +111 -0
  599. data/slice/Freeze/CatalogData.ice +49 -0
  600. data/slice/Freeze/Connection.ice +111 -0
  601. data/slice/Freeze/ConnectionF.ice +20 -0
  602. data/slice/Freeze/DB.ice +37 -0
  603. data/slice/Freeze/Evictor.ice +339 -0
  604. data/slice/Freeze/EvictorF.ice +22 -0
  605. data/slice/Freeze/EvictorStorage.ice +72 -0
  606. data/slice/Freeze/Exception.ice +100 -0
  607. data/slice/Freeze/Transaction.ice +57 -0
  608. data/slice/Freeze/TransactionalEvictor.ice +50 -0
  609. data/slice/Glacier2/Metrics.ice +77 -0
  610. data/slice/Glacier2/PermissionsVerifier.ice +105 -0
  611. data/slice/Glacier2/PermissionsVerifierF.ice +21 -0
  612. data/slice/Glacier2/Router.ice +178 -0
  613. data/slice/Glacier2/RouterF.ice +20 -0
  614. data/slice/Glacier2/SSLInfo.ice +50 -0
  615. data/slice/Glacier2/Session.ice +273 -0
  616. data/slice/Ice/BuiltinSequences.ice +48 -0
  617. data/slice/Ice/Communicator.ice +567 -0
  618. data/slice/Ice/CommunicatorF.ice +20 -0
  619. data/slice/Ice/Connection.ice +323 -0
  620. data/slice/Ice/ConnectionF.ice +22 -0
  621. data/slice/Ice/Current.ice +160 -0
  622. data/slice/Ice/Endpoint.ice +227 -0
  623. data/slice/Ice/EndpointF.ice +32 -0
  624. data/slice/Ice/EndpointTypes.ice +38 -0
  625. data/slice/Ice/FacetMap.ice +25 -0
  626. data/slice/Ice/Identity.ice +59 -0
  627. data/slice/Ice/ImplicitContext.ice +109 -0
  628. data/slice/Ice/ImplicitContextF.ice +20 -0
  629. data/slice/Ice/Instrumentation.ice +499 -0
  630. data/slice/Ice/InstrumentationF.ice +26 -0
  631. data/slice/Ice/LocalException.ice +1015 -0
  632. data/slice/Ice/Locator.ice +227 -0
  633. data/slice/Ice/LocatorF.ice +21 -0
  634. data/slice/Ice/Logger.ice +86 -0
  635. data/slice/Ice/LoggerF.ice +20 -0
  636. data/slice/Ice/Metrics.ice +422 -0
  637. data/slice/Ice/ObjectAdapter.ice +673 -0
  638. data/slice/Ice/ObjectAdapterF.ice +20 -0
  639. data/slice/Ice/ObjectFactory.ice +60 -0
  640. data/slice/Ice/ObjectFactoryF.ice +20 -0
  641. data/slice/Ice/Plugin.ice +117 -0
  642. data/slice/Ice/PluginF.ice +21 -0
  643. data/slice/Ice/Process.ice +54 -0
  644. data/slice/Ice/ProcessF.ice +20 -0
  645. data/slice/Ice/Properties.ice +228 -0
  646. data/slice/Ice/PropertiesAdmin.ice +75 -0
  647. data/slice/Ice/PropertiesF.ice +21 -0
  648. data/slice/Ice/RemoteLogger.ice +232 -0
  649. data/slice/Ice/Router.ice +83 -0
  650. data/slice/Ice/RouterF.ice +20 -0
  651. data/slice/Ice/ServantLocator.ice +117 -0
  652. data/slice/Ice/ServantLocatorF.ice +20 -0
  653. data/slice/Ice/SliceChecksumDict.ice +25 -0
  654. data/slice/Ice/Version.ice +39 -0
  655. data/slice/IceBox/IceBox.ice +194 -0
  656. data/slice/IceDiscovery/IceDiscovery.ice +32 -0
  657. data/slice/IceGrid/Admin.ice +1578 -0
  658. data/slice/IceGrid/Descriptor.ice +1079 -0
  659. data/slice/IceGrid/Discovery.ice +73 -0
  660. data/slice/IceGrid/Exception.ice +383 -0
  661. data/slice/IceGrid/FileParser.ice +61 -0
  662. data/slice/IceGrid/Locator.ice +56 -0
  663. data/slice/IceGrid/Observer.ice +394 -0
  664. data/slice/IceGrid/PluginFacade.ice +316 -0
  665. data/slice/IceGrid/Query.ice +130 -0
  666. data/slice/IceGrid/Registry.ice +138 -0
  667. data/slice/IceGrid/Session.ice +124 -0
  668. data/slice/IceGrid/UserAccountMapper.ice +58 -0
  669. data/slice/IcePatch2/FileInfo.ice +49 -0
  670. data/slice/IcePatch2/FileServer.ice +129 -0
  671. data/slice/IceSSL/ConnectionInfo.ice +34 -0
  672. data/slice/IceSSL/EndpointInfo.ice +41 -0
  673. data/slice/IceStorm/IceStorm.ice +405 -0
  674. data/slice/IceStorm/Metrics.ice +71 -0
  675. metadata +737 -0
@@ -0,0 +1,317 @@
1
+ // **********************************************************************
2
+ //
3
+ // Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
4
+ //
5
+ // This copy of Ice is licensed to you under the terms described in the
6
+ // ICE_LICENSE file included in this distribution.
7
+ //
8
+ // **********************************************************************
9
+
10
+ #include <IceUtil/DisableWarnings.h>
11
+ #include <IceUtil/Options.h>
12
+ #include <IceUtil/CtrlCHandler.h>
13
+ #include <IceUtil/Mutex.h>
14
+ #include <IceUtil/MutexPtrLock.h>
15
+ #include <Slice/Preprocessor.h>
16
+ #include <Slice/FileTracker.h>
17
+ #include <Slice/RubyUtil.h>
18
+ #include <Slice/Util.h>
19
+
20
+ #include <string.h>
21
+
22
+ using namespace std;
23
+ using namespace Slice;
24
+ using namespace Slice::Ruby;
25
+
26
+ namespace
27
+ {
28
+
29
+ IceUtil::Mutex* globalMutex = 0;
30
+ bool interrupted = false;
31
+
32
+ class Init
33
+ {
34
+ public:
35
+
36
+ Init()
37
+ {
38
+ globalMutex = new IceUtil::Mutex;
39
+ }
40
+
41
+ ~Init()
42
+ {
43
+ delete globalMutex;
44
+ globalMutex = 0;
45
+ }
46
+ };
47
+
48
+ Init init;
49
+
50
+ void
51
+ interruptedCallback(int /*signal*/)
52
+ {
53
+ IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(globalMutex);
54
+
55
+ interrupted = true;
56
+ }
57
+
58
+ void
59
+ usage(const char* n)
60
+ {
61
+ getErrorStream() << "Usage: " << n << " [options] slice-files...\n";
62
+ getErrorStream() <<
63
+ "Options:\n"
64
+ "-h, --help Show this message.\n"
65
+ "-v, --version Display the Ice version.\n"
66
+ "-DNAME Define NAME as 1.\n"
67
+ "-DNAME=DEF Define NAME as DEF.\n"
68
+ "-UNAME Remove any definition for NAME.\n"
69
+ "-IDIR Put DIR in the include file search path.\n"
70
+ "-E Print preprocessor output on stdout.\n"
71
+ "--output-dir DIR Create files in the directory DIR.\n"
72
+ "--depend Generate Makefile dependencies.\n"
73
+ "-d, --debug Print debug messages.\n"
74
+ "--ice Permit `Ice' prefix (for building Ice source code only).\n"
75
+ "--underscore Permit underscores in Slice identifiers.\n"
76
+ "--all Generate code for Slice definitions in included files.\n"
77
+ "--checksum Generate checksums for Slice definitions.\n"
78
+ ;
79
+ }
80
+
81
+ }
82
+
83
+ int
84
+ Slice::Ruby::compile(int argc, char* argv[])
85
+ {
86
+ IceUtilInternal::Options opts;
87
+ opts.addOpt("h", "help");
88
+ opts.addOpt("v", "version");
89
+ opts.addOpt("D", "", IceUtilInternal::Options::NeedArg, "", IceUtilInternal::Options::Repeat);
90
+ opts.addOpt("U", "", IceUtilInternal::Options::NeedArg, "", IceUtilInternal::Options::Repeat);
91
+ opts.addOpt("I", "", IceUtilInternal::Options::NeedArg, "", IceUtilInternal::Options::Repeat);
92
+ opts.addOpt("E");
93
+ opts.addOpt("", "output-dir", IceUtilInternal::Options::NeedArg);
94
+ opts.addOpt("", "depend");
95
+ opts.addOpt("d", "debug");
96
+ opts.addOpt("", "ice");
97
+ opts.addOpt("", "underscore");
98
+ opts.addOpt("", "all");
99
+ opts.addOpt("", "checksum");
100
+
101
+ vector<string> args;
102
+ try
103
+ {
104
+ args = opts.parse(argc, const_cast<const char**>(argv));
105
+ }
106
+ catch(const IceUtilInternal::BadOptException& e)
107
+ {
108
+ getErrorStream() << argv[0] << ": error: " << e.reason << endl;
109
+ usage(argv[0]);
110
+ return EXIT_FAILURE;
111
+ }
112
+
113
+ if(opts.isSet("help"))
114
+ {
115
+ usage(argv[0]);
116
+ return EXIT_SUCCESS;
117
+ }
118
+
119
+ if(opts.isSet("version"))
120
+ {
121
+ getErrorStream() << ICE_STRING_VERSION << endl;
122
+ return EXIT_SUCCESS;
123
+ }
124
+
125
+ vector<string> cppArgs;
126
+ vector<string> optargs = opts.argVec("D");
127
+ for(vector<string>::const_iterator i = optargs.begin(); i != optargs.end(); ++i)
128
+ {
129
+ cppArgs.push_back("-D" + *i);
130
+ }
131
+
132
+ optargs = opts.argVec("U");
133
+ for(vector<string>::const_iterator i = optargs.begin(); i != optargs.end(); ++i)
134
+ {
135
+ cppArgs.push_back("-U" + *i);
136
+ }
137
+
138
+ vector<string> includePaths = opts.argVec("I");
139
+ for(vector<string>::const_iterator i = includePaths.begin(); i != includePaths.end(); ++i)
140
+ {
141
+ cppArgs.push_back("-I" + Preprocessor::normalizeIncludePath(*i));
142
+ }
143
+
144
+ bool preprocess = opts.isSet("E");
145
+
146
+ string output = opts.optArg("output-dir");
147
+
148
+ bool depend = opts.isSet("depend");
149
+
150
+ bool debug = opts.isSet("debug");
151
+
152
+ bool ice = opts.isSet("ice");
153
+
154
+ bool underscore = opts.isSet("underscore");
155
+
156
+ bool all = opts.isSet("all");
157
+
158
+ bool checksum = opts.isSet("checksum");
159
+
160
+ if(args.empty())
161
+ {
162
+ getErrorStream() << argv[0] << ": error: no input file" << endl;
163
+ usage(argv[0]);
164
+ return EXIT_FAILURE;
165
+ }
166
+
167
+ int status = EXIT_SUCCESS;
168
+
169
+ IceUtil::CtrlCHandler ctrlCHandler;
170
+ ctrlCHandler.setCallback(interruptedCallback);
171
+
172
+ for(vector<string>::const_iterator i = args.begin(); i != args.end(); ++i)
173
+ {
174
+ //
175
+ // Ignore duplicates.
176
+ //
177
+ vector<string>::iterator p = find(args.begin(), args.end(), *i);
178
+ if(p != i)
179
+ {
180
+ continue;
181
+ }
182
+
183
+ if(depend)
184
+ {
185
+ PreprocessorPtr icecpp = Preprocessor::create(argv[0], *i, cppArgs);
186
+ FILE* cppHandle = icecpp->preprocess(false, "-D__SLICE2RB__");
187
+
188
+ if(cppHandle == 0)
189
+ {
190
+ return EXIT_FAILURE;
191
+ }
192
+
193
+ UnitPtr u = Unit::createUnit(false, false, ice, underscore);
194
+ int parseStatus = u->parse(*i, cppHandle, debug);
195
+ u->destroy();
196
+
197
+ if(parseStatus == EXIT_FAILURE)
198
+ {
199
+ return EXIT_FAILURE;
200
+ }
201
+
202
+ if(!icecpp->printMakefileDependencies(Preprocessor::Ruby, includePaths,
203
+ "-D__SLICE2RB__"))
204
+ {
205
+ return EXIT_FAILURE;
206
+ }
207
+
208
+ if(!icecpp->close())
209
+ {
210
+ return EXIT_FAILURE;
211
+ }
212
+ }
213
+ else
214
+ {
215
+ PreprocessorPtr icecpp = Preprocessor::create(argv[0], *i, cppArgs);
216
+ FILE* cppHandle = icecpp->preprocess(false, "-D__SLICE2RB__");
217
+
218
+ if(cppHandle == 0)
219
+ {
220
+ return EXIT_FAILURE;
221
+ }
222
+
223
+ if(preprocess)
224
+ {
225
+ char buf[4096];
226
+ while(fgets(buf, static_cast<int>(sizeof(buf)), cppHandle) != NULL)
227
+ {
228
+ if(fputs(buf, stdout) == EOF)
229
+ {
230
+ return EXIT_FAILURE;
231
+ }
232
+ }
233
+ if(!icecpp->close())
234
+ {
235
+ return EXIT_FAILURE;
236
+ }
237
+ }
238
+ else
239
+ {
240
+ UnitPtr u = Unit::createUnit(false, all, ice, underscore);
241
+ int parseStatus = u->parse(*i, cppHandle, debug);
242
+
243
+ if(!icecpp->close())
244
+ {
245
+ u->destroy();
246
+ return EXIT_FAILURE;
247
+ }
248
+
249
+ if(parseStatus == EXIT_FAILURE)
250
+ {
251
+ status = EXIT_FAILURE;
252
+ }
253
+ else
254
+ {
255
+ string base = icecpp->getBaseName();
256
+ string::size_type pos = base.find_last_of("/\\");
257
+ if(pos != string::npos)
258
+ {
259
+ base.erase(0, pos + 1);
260
+ }
261
+
262
+ string file = base + ".rb";
263
+ if(!output.empty())
264
+ {
265
+ file = output + '/' + file;
266
+ }
267
+
268
+ try
269
+ {
270
+ IceUtilInternal::Output out;
271
+ out.open(file.c_str());
272
+ if(!out)
273
+ {
274
+ ostringstream os;
275
+ os << "cannot open`" << file << "': " << strerror(errno);
276
+ throw FileException(__FILE__, __LINE__, os.str());
277
+ }
278
+ FileTracker::instance()->addFile(file);
279
+
280
+ printHeader(out);
281
+ printGeneratedHeader(out, base + ".ice", "#");
282
+
283
+ //
284
+ // Generate the Ruby mapping.
285
+ //
286
+ generate(u, all, checksum, includePaths, out);
287
+
288
+ out.close();
289
+ }
290
+ catch(const Slice::FileException& ex)
291
+ {
292
+ // If a file could not be created, then cleanup
293
+ // any created files.
294
+ FileTracker::instance()->cleanup();
295
+ u->destroy();
296
+ getErrorStream() << argv[0] << ": error: " << ex.reason() << endl;
297
+ return EXIT_FAILURE;
298
+ }
299
+ }
300
+
301
+ u->destroy();
302
+ }
303
+ }
304
+
305
+ {
306
+ IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(globalMutex);
307
+
308
+ if(interrupted)
309
+ {
310
+ FileTracker::instance()->cleanup();
311
+ return EXIT_FAILURE;
312
+ }
313
+ }
314
+ }
315
+
316
+ return status;
317
+ }
@@ -0,0 +1,1774 @@
1
+ // **********************************************************************
2
+ //
3
+ // Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
4
+ //
5
+ // This copy of Ice is licensed to you under the terms described in the
6
+ // ICE_LICENSE file included in this distribution.
7
+ //
8
+ // **********************************************************************
9
+
10
+ #include <Slice/RubyUtil.h>
11
+ #include <Slice/Checksum.h>
12
+ #include <Slice/Util.h>
13
+ #include <IceUtil/Functional.h>
14
+ #include <IceUtil/InputUtil.h>
15
+ #include <iterator>
16
+
17
+ using namespace std;
18
+ using namespace Slice;
19
+ using namespace IceUtil;
20
+ using namespace IceUtilInternal;
21
+
22
+ namespace Slice
23
+ {
24
+ namespace Ruby
25
+ {
26
+
27
+ //
28
+ // CodeVisitor generates the Ruby mapping for a translation unit.
29
+ //
30
+ class CodeVisitor : public ParserVisitor
31
+ {
32
+ public:
33
+
34
+ CodeVisitor(IceUtilInternal::Output&);
35
+
36
+ virtual bool visitModuleStart(const ModulePtr&);
37
+ virtual void visitModuleEnd(const ModulePtr&);
38
+ virtual void visitClassDecl(const ClassDeclPtr&);
39
+ virtual bool visitClassDefStart(const ClassDefPtr&);
40
+ virtual bool visitExceptionStart(const ExceptionPtr&);
41
+ virtual bool visitStructStart(const StructPtr&);
42
+ virtual void visitSequence(const SequencePtr&);
43
+ virtual void visitDictionary(const DictionaryPtr&);
44
+ virtual void visitEnum(const EnumPtr&);
45
+ virtual void visitConst(const ConstPtr&);
46
+
47
+ private:
48
+
49
+ //
50
+ // Return a Python symbol for the given parser element.
51
+ //
52
+ string getSymbol(const ContainedPtr&);
53
+
54
+ //
55
+ // Emit Python code to assign the given symbol in the current module.
56
+ //
57
+ void registerName(const string&);
58
+
59
+ //
60
+ // Emit the array that describes a Slice type.
61
+ //
62
+ void writeType(const TypePtr&);
63
+
64
+ //
65
+ // Get an initializer value for a given type.
66
+ //
67
+ string getInitializer(const TypePtr&);
68
+
69
+ //
70
+ // Add a value to a hash code.
71
+ //
72
+ void writeHash(const string&, const TypePtr&, int&);
73
+
74
+ //
75
+ // Write a constant value.
76
+ //
77
+ void writeConstantValue(const TypePtr&, const SyntaxTreeBasePtr&, const string&);
78
+
79
+ struct MemberInfo
80
+ {
81
+ string lowerName; // Mapped name beginning with a lower-case letter for use as the name of a local variable.
82
+ string fixedName;
83
+ bool inherited;
84
+ DataMemberPtr dataMember;
85
+ };
86
+ typedef list<MemberInfo> MemberInfoList;
87
+
88
+ //
89
+ // Write constructor parameters with default values.
90
+ //
91
+ void writeConstructorParams(const MemberInfoList&);
92
+
93
+ void collectClassMembers(const ClassDefPtr&, MemberInfoList&, bool);
94
+ void collectExceptionMembers(const ExceptionPtr&, MemberInfoList&, bool);
95
+
96
+ Output& _out;
97
+ set<string> _classHistory;
98
+ };
99
+
100
+ }
101
+ }
102
+
103
+ static string
104
+ lookupKwd(const string& name)
105
+ {
106
+ //
107
+ // Keyword list. *Must* be kept in alphabetical order.
108
+ //
109
+ // This list only contains keywords that might conflict with a Slice
110
+ // identifier, so keywords like "defined?" are not necessary.
111
+ //
112
+ // This list also contains the names of methods on Object that might
113
+ // conflict with a Slice identifier, so names such as "inspect" and
114
+ // "send" are included but "to_s" is not.
115
+ //
116
+ static const string keywordList[] =
117
+ {
118
+ "BEGIN", "END", "alias", "and", "begin", "break", "case", "class", "clone", "def", "display", "do", "dup",
119
+ "else", "elsif", "end", "ensure", "extend", "false", "for", "freeze", "hash", "if", "in", "initialize_copy",
120
+ "inspect", "instance_eval", "instance_variable_get", "instance_variable_set", "instance_variables", "method",
121
+ "method_missing", "methods", "module", "new", "next", "nil", "not", "object_id", "or", "private_methods",
122
+ "protected_methods", "public_methods", "redo", "rescue", "retry", "return", "self", "send",
123
+ "singleton_methods", "super", "taint", "then", "to_a", "to_s", "true", "undef", "unless", "untaint", "until",
124
+ "when", "while", "yield"
125
+ };
126
+ bool found = binary_search(&keywordList[0],
127
+ &keywordList[sizeof(keywordList) / sizeof(*keywordList)],
128
+ name);
129
+ return found ? "_" + name : name;
130
+ }
131
+
132
+ //
133
+ // Split a scoped name into its components and return the components as a list of (unscoped) identifiers.
134
+ //
135
+ static vector<string>
136
+ splitScopedName(const string& scoped)
137
+ {
138
+ assert(scoped[0] == ':');
139
+ vector<string> ids;
140
+ string::size_type next = 0;
141
+ string::size_type pos;
142
+ while((pos = scoped.find("::", next)) != string::npos)
143
+ {
144
+ pos += 2;
145
+ if(pos != scoped.size())
146
+ {
147
+ string::size_type endpos = scoped.find("::", pos);
148
+ if(endpos != string::npos && endpos > pos)
149
+ {
150
+ ids.push_back(scoped.substr(pos, endpos - pos));
151
+ }
152
+ }
153
+ next = pos;
154
+ }
155
+ if(next != scoped.size())
156
+ {
157
+ ids.push_back(scoped.substr(next));
158
+ }
159
+
160
+ return ids;
161
+ }
162
+
163
+ //
164
+ // CodeVisitor implementation.
165
+ //
166
+ Slice::Ruby::CodeVisitor::CodeVisitor(Output& out) :
167
+ _out(out)
168
+ {
169
+ }
170
+
171
+ bool
172
+ Slice::Ruby::CodeVisitor::visitModuleStart(const ModulePtr& p)
173
+ {
174
+ _out << sp << nl << "module " << fixIdent(p->name(), IdentToUpper);
175
+ _out.inc();
176
+ return true;
177
+ }
178
+
179
+ void
180
+ Slice::Ruby::CodeVisitor::visitModuleEnd(const ModulePtr&)
181
+ {
182
+ _out.dec();
183
+ _out << nl << "end";
184
+ }
185
+
186
+ void
187
+ Slice::Ruby::CodeVisitor::visitClassDecl(const ClassDeclPtr& p)
188
+ {
189
+ //
190
+ // Emit forward declarations.
191
+ //
192
+ string scoped = p->scoped();
193
+ if(_classHistory.count(scoped) == 0)
194
+ {
195
+ string name = "T_" + fixIdent(p->name(), IdentToUpper);
196
+ _out << sp << nl << "if not defined?(" << getAbsolute(p, IdentToUpper, "T_") << ')';
197
+ _out.inc();
198
+ if(p->isLocal())
199
+ {
200
+ _out << nl << name << " = ::Ice::__declareLocalClass('" << scoped << "')";
201
+ }
202
+ else
203
+ {
204
+ _out << nl << name << " = ::Ice::__declareClass('" << scoped << "')";
205
+ _out << nl << name << "Prx = ::Ice::__declareProxy('" << scoped << "')";
206
+ }
207
+ _out.dec();
208
+ _out << nl << "end";
209
+ _classHistory.insert(scoped); // Avoid redundant declarations.
210
+ }
211
+ }
212
+
213
+ bool
214
+ Slice::Ruby::CodeVisitor::visitClassDefStart(const ClassDefPtr& p)
215
+ {
216
+ string scoped = p->scoped();
217
+ string name = fixIdent(p->name(), IdentToUpper);
218
+ ClassList bases = p->bases();
219
+ ClassDefPtr base;
220
+ OperationList ops = p->operations();
221
+
222
+ //
223
+ // Define a mix-in module for the class.
224
+ //
225
+ _out << sp << nl << "if not defined?(" << getAbsolute(p, IdentToUpper) << "_mixin)";
226
+ _out.inc();
227
+ _out << nl << "module " << name << "_mixin";
228
+ _out.inc();
229
+
230
+ if(!p->isLocal())
231
+ {
232
+ if(!bases.empty() && !bases.front()->isInterface())
233
+ {
234
+ base = bases.front();
235
+ _out << nl << "include " << getAbsolute(bases.front(), IdentToUpper) << "_mixin";
236
+ }
237
+ else
238
+ {
239
+ _out << nl << "include ::Ice::Object_mixin";
240
+ }
241
+
242
+ //
243
+ // ice_ids
244
+ //
245
+ ClassList allBases = p->allBases();
246
+ StringList ids;
247
+ #if defined(__IBMCPP__) && defined(NDEBUG)
248
+ //
249
+ // VisualAge C++ 6.0 does not see that ClassDef is a Contained,
250
+ // when inlining is on. The code below issues a warning: better
251
+ // than an error!
252
+ //
253
+ transform(allBases.begin(), allBases.end(), back_inserter(ids),
254
+ IceUtil::constMemFun<string,ClassDef>(&Contained::scoped));
255
+ #else
256
+ transform(allBases.begin(), allBases.end(), back_inserter(ids), IceUtil::constMemFun(&Contained::scoped));
257
+ #endif
258
+ StringList other;
259
+ other.push_back(scoped);
260
+ other.push_back("::Ice::Object");
261
+ other.sort();
262
+ ids.merge(other);
263
+ ids.unique();
264
+ _out << sp << nl << "def ice_ids(current=nil)";
265
+ _out.inc();
266
+ _out << nl << "[";
267
+ for(StringList::iterator q = ids.begin(); q != ids.end(); ++q)
268
+ {
269
+ if(q != ids.begin())
270
+ {
271
+ _out << ", ";
272
+ }
273
+ _out << "'" << *q << "'";
274
+ }
275
+ _out << ']';
276
+ _out.dec();
277
+ _out << nl << "end";
278
+
279
+ //
280
+ // ice_id
281
+ //
282
+ _out << sp << nl << "def ice_id(current=nil)";
283
+ _out.inc();
284
+ _out << nl << "'" << scoped << "'";
285
+ _out.dec();
286
+ _out << nl << "end";
287
+ }
288
+
289
+ if(!ops.empty())
290
+ {
291
+ //
292
+ // Emit a comment for each operation.
293
+ //
294
+ _out << sp
295
+ << nl << "#"
296
+ << nl << "# Operation signatures."
297
+ << nl << "#";
298
+ for(OperationList::iterator oli = ops.begin(); oli != ops.end(); ++oli)
299
+ {
300
+ string fixedOpName = fixIdent((*oli)->name(), IdentNormal);
301
+ /* If AMI/AMD is ever implemented...
302
+ if(!p->isLocal() && (p->hasMetaData("amd") || (*oli)->hasMetaData("amd")))
303
+ {
304
+ _out << nl << "# def " << fixedOpName << "_async(_cb";
305
+
306
+ ParamDeclList params = (*oli)->parameters();
307
+
308
+ for(ParamDeclList::iterator pli = params.begin(); pli != params.end(); ++pli)
309
+ {
310
+ if(!(*pli)->isOutParam())
311
+ {
312
+ _out << ", " << fixIdent((*pli)->name(), IdentToLower);
313
+ }
314
+ }
315
+ if(!p->isLocal())
316
+ {
317
+ _out << ", current=nil";
318
+ }
319
+ _out << ")";
320
+ }
321
+ else
322
+ */
323
+ {
324
+ _out << nl << "# def " << fixedOpName << "(";
325
+
326
+ ParamDeclList params = (*oli)->parameters();
327
+
328
+ bool first = true;
329
+ for(ParamDeclList::iterator pli = params.begin(); pli != params.end(); ++pli)
330
+ {
331
+ if(!(*pli)->isOutParam())
332
+ {
333
+ if(first)
334
+ {
335
+ first = false;
336
+ }
337
+ else
338
+ {
339
+ _out << ", ";
340
+ }
341
+ _out << fixIdent((*pli)->name(), IdentToLower);
342
+ }
343
+ }
344
+ if(!p->isLocal())
345
+ {
346
+ if(!first)
347
+ {
348
+ _out << ", ";
349
+ }
350
+ _out << "current=nil";
351
+ }
352
+ _out << ")";
353
+ }
354
+ }
355
+ }
356
+
357
+ //
358
+ // inspect
359
+ //
360
+ _out << sp << nl << "def inspect";
361
+ _out.inc();
362
+ _out << nl << "::Ice::__stringify(self, T_" << name << ")";
363
+ _out.dec();
364
+ _out << nl << "end";
365
+
366
+ //
367
+ // read/write accessors for data members.
368
+ //
369
+ DataMemberList members = p->dataMembers();
370
+ if(!members.empty())
371
+ {
372
+ bool prot = p->hasMetaData("protected");
373
+ DataMemberList protectedMembers;
374
+
375
+ _out << sp << nl << "attr_accessor ";
376
+ for(DataMemberList::iterator q = members.begin(); q != members.end(); ++q)
377
+ {
378
+ if(q != members.begin())
379
+ {
380
+ _out << ", ";
381
+ }
382
+ _out << ":" << fixIdent((*q)->name(), IdentNormal);
383
+ if(prot || (*q)->hasMetaData("protected"))
384
+ {
385
+ protectedMembers.push_back(*q);
386
+ }
387
+ }
388
+
389
+ if(!protectedMembers.empty())
390
+ {
391
+ _out << nl << "protected ";
392
+ for(DataMemberList::iterator q = protectedMembers.begin(); q != protectedMembers.end(); ++q)
393
+ {
394
+ if(q != protectedMembers.begin())
395
+ {
396
+ _out << ", ";
397
+ }
398
+ //
399
+ // We need to list the symbols of the reader and the writer (e.g., ":member" and ":member=").
400
+ //
401
+ _out << ":" << fixIdent((*q)->name(), IdentNormal) << ", :"
402
+ << fixIdent((*q)->name(), IdentNormal) << '=';
403
+ }
404
+ }
405
+ }
406
+
407
+ _out.dec();
408
+ _out << nl << "end"; // End of mix-in module for class.
409
+
410
+ if(p->isInterface())
411
+ {
412
+ //
413
+ // Class.
414
+ //
415
+ _out << nl << "class " << name;
416
+ _out.inc();
417
+ _out << nl << "include " << name << "_mixin";
418
+ _out << nl;
419
+ _out << nl << "def " << name << ".ice_staticId()";
420
+ _out.inc();
421
+ _out << nl << "'" << scoped << "'";
422
+ _out.dec();
423
+ _out << nl << "end";
424
+ _out.dec();
425
+ _out << nl << "end";
426
+ }
427
+ else
428
+ {
429
+ //
430
+ // Class.
431
+ //
432
+ _out << nl << "class " << name;
433
+ if(base)
434
+ {
435
+ _out << " < " << getAbsolute(base, IdentToUpper);
436
+ }
437
+ _out.inc();
438
+ _out << nl << "include " << name << "_mixin";
439
+ _out << nl;
440
+ _out << nl << "def " << name << ".ice_staticId()";
441
+ _out.inc();
442
+ _out << nl << "'" << scoped << "'";
443
+ _out.dec();
444
+ _out << nl << "end";
445
+
446
+ //
447
+ // initialize
448
+ //
449
+ MemberInfoList allMembers;
450
+ collectClassMembers(p, allMembers, false);
451
+ if(!allMembers.empty())
452
+ {
453
+ _out << sp << nl << "def initialize(";
454
+ writeConstructorParams(allMembers);
455
+ _out << ')';
456
+ _out.inc();
457
+
458
+ bool inheritsMembers = false;
459
+ for(MemberInfoList::iterator q = allMembers.begin(); q != allMembers.end(); ++q)
460
+ {
461
+ if(q->inherited)
462
+ {
463
+ inheritsMembers = true;
464
+ break;
465
+ }
466
+ }
467
+
468
+ if(inheritsMembers)
469
+ {
470
+ _out << nl << "super" << spar;
471
+ for(MemberInfoList::iterator q = allMembers.begin(); q != allMembers.end(); ++q)
472
+ {
473
+ if(q->inherited)
474
+ {
475
+ _out << q->lowerName;
476
+ }
477
+ }
478
+ _out << epar;
479
+ }
480
+
481
+ for(MemberInfoList::iterator q = allMembers.begin(); q != allMembers.end(); ++q)
482
+ {
483
+ if(!q->inherited)
484
+ {
485
+ _out << nl << '@' << q->fixedName << " = " << q->lowerName;
486
+ }
487
+ }
488
+
489
+ _out.dec();
490
+ _out << nl << "end";
491
+ }
492
+
493
+ _out.dec();
494
+ _out << nl << "end"; // End of class.
495
+ }
496
+
497
+ //
498
+ // Generate proxy support. This includes a mix-in module for the proxy's
499
+ // operations and a class for the proxy itself.
500
+ //
501
+ if(!p->isLocal())
502
+ {
503
+ _out << nl << "module " << name << "Prx_mixin";
504
+ _out.inc();
505
+ for(ClassList::iterator cli = bases.begin(); cli != bases.end(); ++cli)
506
+ {
507
+ _out << nl << "include " << getAbsolute(*cli, IdentToUpper) << "Prx_mixin";
508
+ }
509
+ for(OperationList::iterator oli = ops.begin(); oli != ops.end(); ++oli)
510
+ {
511
+ string fixedOpName = fixIdent((*oli)->name(), IdentNormal);
512
+ if(fixedOpName == "checkedCast" || fixedOpName == "uncheckedCast")
513
+ {
514
+ fixedOpName.insert(0, "_");
515
+ }
516
+ TypePtr ret = (*oli)->returnType();
517
+ ParamDeclList paramList = (*oli)->parameters();
518
+ string inParams;
519
+
520
+ for(ParamDeclList::const_iterator q = paramList.begin(); q != paramList.end(); ++q)
521
+ {
522
+ if(!(*q)->isOutParam())
523
+ {
524
+ if(!inParams.empty())
525
+ {
526
+ inParams.append(", ");
527
+ }
528
+ inParams.append(fixIdent((*q)->name(), IdentToLower));
529
+ }
530
+ }
531
+
532
+ _out << sp << nl << "def " << fixedOpName << "(";
533
+ if(!inParams.empty())
534
+ {
535
+ _out << inParams << ", ";
536
+ }
537
+ _out << "_ctx=nil)";
538
+ _out.inc();
539
+ _out << nl << name << "_mixin::OP_" << (*oli)->name() << ".invoke(self, [" << inParams;
540
+ _out << "], _ctx)";
541
+ _out.dec();
542
+ _out << nl << "end";
543
+ }
544
+ _out.dec();
545
+ _out << nl << "end"; // End of mix-in module for proxy.
546
+
547
+ _out << nl << "class " << name << "Prx < ::Ice::ObjectPrx";
548
+ _out.inc();
549
+ _out << nl << "include " << name << "Prx_mixin";
550
+
551
+ _out << sp << nl << "def " << name << "Prx.checkedCast(proxy, facetOrCtx=nil, _ctx=nil)";
552
+ _out.inc();
553
+ _out << nl << "ice_checkedCast(proxy, '" << scoped << "', facetOrCtx, _ctx)";
554
+ _out.dec();
555
+ _out << nl << "end";
556
+
557
+ _out << sp << nl << "def " << name << "Prx.uncheckedCast(proxy, facet=nil)";
558
+ _out.inc();
559
+ _out << nl << "ice_uncheckedCast(proxy, facet)";
560
+ _out.dec();
561
+ _out << nl << "end";
562
+
563
+ _out << nl << "def " << name << "Prx.ice_staticId()";
564
+ _out.inc();
565
+ _out << nl << "'" << scoped << "'";
566
+ _out.dec();
567
+ _out << nl << "end";
568
+
569
+ _out.dec();
570
+ _out << nl << "end"; // End of proxy class.
571
+ }
572
+
573
+ //
574
+ // Emit type descriptions.
575
+ //
576
+ _out << sp << nl << "if not defined?(" << getAbsolute(p, IdentToUpper, "T_") << ')';
577
+ _out.inc();
578
+ if(p->isLocal())
579
+ {
580
+ _out << nl << "T_" << name << " = ::Ice::__declareLocalClass('" << scoped << "')";
581
+ }
582
+ else
583
+ {
584
+ _out << nl << "T_" << name << " = ::Ice::__declareClass('" << scoped << "')";
585
+ _out << nl << "T_" << name << "Prx = ::Ice::__declareProxy('" << scoped << "')";
586
+ }
587
+ _out.dec();
588
+ _out << nl << "end";
589
+ _classHistory.insert(scoped); // Avoid redundant declarations.
590
+
591
+ bool isAbstract = p->isInterface() || p->allOperations().size() > 0; // Don't use isAbstract() here - see bug 3739
592
+ const bool preserved = p->hasMetaData("preserve-slice") || p->inheritsMetaData("preserve-slice");
593
+ _out << sp << nl << "T_" << name << ".defineClass(" << name << ", " << p->compactId() << ", "
594
+ << (isAbstract ? "true" : "false") << ", " << (preserved ? "true" : "false") << ", ";
595
+ if(!base)
596
+ {
597
+ _out << "nil";
598
+ }
599
+ else
600
+ {
601
+ _out << getAbsolute(base, IdentToUpper, "T_");
602
+ }
603
+ _out << ", [";
604
+ //
605
+ // Interfaces
606
+ //
607
+ {
608
+ int interfaceCount = 0;
609
+ for(ClassList::const_iterator q = bases.begin(); q != bases.end(); ++q)
610
+ {
611
+ if((*q)->isInterface())
612
+ {
613
+ if(interfaceCount > 0)
614
+ {
615
+ _out << ", ";
616
+ }
617
+ _out << getAbsolute(*q, IdentToUpper, "T_");
618
+ ++interfaceCount;
619
+ }
620
+ }
621
+ }
622
+ //
623
+ // Members
624
+ //
625
+ // Data members are represented as an array:
626
+ //
627
+ // ['MemberName', MemberType, Optional, Tag]
628
+ //
629
+ // where MemberType is either a primitive type constant (T_INT, etc.) or the id of a constructed type.
630
+ //
631
+ _out << "], [";
632
+ if(members.size() > 1)
633
+ {
634
+ _out.inc();
635
+ _out << nl;
636
+ }
637
+ {
638
+ for(DataMemberList::iterator q = members.begin(); q != members.end(); ++q)
639
+ {
640
+ if(q != members.begin())
641
+ {
642
+ _out << ',' << nl;
643
+ }
644
+ _out << "['" << fixIdent((*q)->name(), IdentNormal) << "', ";
645
+ writeType((*q)->type());
646
+ _out << ", " << ((*q)->optional() ? "true" : "false") << ", " << ((*q)->optional() ? (*q)->tag() : 0)
647
+ << ']';
648
+ }
649
+ }
650
+ if(members.size() > 1)
651
+ {
652
+ _out.dec();
653
+ _out << nl;
654
+ }
655
+ _out << "])";
656
+ _out << nl << name << "_mixin::ICE_TYPE = T_" << name;
657
+
658
+ //
659
+ // Define each operation. The arguments to __defineOperation are:
660
+ //
661
+ // 'opName', Mode, IsAmd, FormatType, [InParams], [OutParams], ReturnParam, [Exceptions]
662
+ //
663
+ // where InParams and OutParams are arrays of type descriptions, and Exceptions
664
+ // is an array of exception types.
665
+ //
666
+ if(!p->isLocal())
667
+ {
668
+ _out << sp << nl << "T_" << name << "Prx.defineProxy(" << name << "Prx, T_" << name << ')';
669
+ _out << nl << name << "Prx::ICE_TYPE = T_" << name << "Prx";
670
+
671
+ if(!ops.empty())
672
+ {
673
+ _out << sp;
674
+ }
675
+ for(OperationList::iterator s = ops.begin(); s != ops.end(); ++s)
676
+ {
677
+ ParamDeclList params = (*s)->parameters();
678
+ ParamDeclList::iterator t;
679
+ int count;
680
+ string format;
681
+ switch((*s)->format())
682
+ {
683
+ case DefaultFormat:
684
+ format = "nil";
685
+ break;
686
+ case CompactFormat:
687
+ format = "::Ice::FormatType::CompactFormat";
688
+ break;
689
+ case SlicedFormat:
690
+ format = "::Ice::FormatType::SlicedFormat";
691
+ break;
692
+ }
693
+
694
+ _out << nl << name << "_mixin::OP_" << (*s)->name() << " = ::Ice::__defineOperation('"
695
+ << (*s)->name() << "', ";
696
+ switch((*s)->mode())
697
+ {
698
+ case Operation::Normal:
699
+ _out << "::Ice::OperationMode::Normal";
700
+ break;
701
+ case Operation::Nonmutating:
702
+ _out << "::Ice::OperationMode::Nonmutating";
703
+ break;
704
+ case Operation::Idempotent:
705
+ _out << "::Ice::OperationMode::Idempotent";
706
+ break;
707
+ }
708
+ _out << ", ";
709
+ switch((*s)->sendMode())
710
+ {
711
+ case Operation::Normal:
712
+ _out << "::Ice::OperationMode::Normal";
713
+ break;
714
+ case Operation::Nonmutating:
715
+ _out << "::Ice::OperationMode::Nonmutating";
716
+ break;
717
+ case Operation::Idempotent:
718
+ _out << "::Ice::OperationMode::Idempotent";
719
+ break;
720
+ }
721
+ _out << ", " << ((p->hasMetaData("amd") || (*s)->hasMetaData("amd")) ? "true" : "false") << ", " << format
722
+ << ", [";
723
+ for(t = params.begin(), count = 0; t != params.end(); ++t)
724
+ {
725
+ if(!(*t)->isOutParam())
726
+ {
727
+ if(count > 0)
728
+ {
729
+ _out << ", ";
730
+ }
731
+ _out << '[';
732
+ writeType((*t)->type());
733
+ _out << ", " << ((*t)->optional() ? "true" : "false") << ", "
734
+ << ((*t)->optional() ? (*t)->tag() : 0) << ']';
735
+ ++count;
736
+ }
737
+ }
738
+ _out << "], [";
739
+ for(t = params.begin(), count = 0; t != params.end(); ++t)
740
+ {
741
+ if((*t)->isOutParam())
742
+ {
743
+ if(count > 0)
744
+ {
745
+ _out << ", ";
746
+ }
747
+ _out << '[';
748
+ writeType((*t)->type());
749
+ _out << ", " << ((*t)->optional() ? "true" : "false") << ", "
750
+ << ((*t)->optional() ? (*t)->tag() : 0) << ']';
751
+ ++count;
752
+ }
753
+ }
754
+ _out << "], ";
755
+ TypePtr returnType = (*s)->returnType();
756
+ if(returnType)
757
+ {
758
+ //
759
+ // The return type has the same format as an in/out parameter:
760
+ //
761
+ // Type, Optional?, OptionalTag
762
+ //
763
+ _out << '[';
764
+ writeType(returnType);
765
+ _out << ", " << ((*s)->returnIsOptional() ? "true" : "false") << ", "
766
+ << ((*s)->returnIsOptional() ? (*s)->returnTag() : 0) << ']';
767
+ }
768
+ else
769
+ {
770
+ _out << "nil";
771
+ }
772
+ _out << ", [";
773
+ ExceptionList exceptions = (*s)->throws();
774
+ for(ExceptionList::iterator u = exceptions.begin(); u != exceptions.end(); ++u)
775
+ {
776
+ if(u != exceptions.begin())
777
+ {
778
+ _out << ", ";
779
+ }
780
+ _out << getAbsolute(*u, IdentToUpper, "T_");
781
+ }
782
+ _out << "])";
783
+
784
+ string deprecateMetadata;
785
+ if((*s)->findMetaData("deprecate", deprecateMetadata) || p->findMetaData("deprecate", deprecateMetadata))
786
+ {
787
+ string msg;
788
+ string::size_type pos = deprecateMetadata.find(':');
789
+ if(pos != string::npos && pos < deprecateMetadata.size() - 1)
790
+ {
791
+ msg = deprecateMetadata.substr(pos + 1);
792
+ }
793
+ _out << nl << name << "_mixin::OP_" << (*s)->name() << ".deprecate(\"" << msg << "\")";
794
+ }
795
+ }
796
+ }
797
+
798
+ _out.dec();
799
+ _out << nl << "end"; // if not defined?()
800
+
801
+ return false;
802
+ }
803
+
804
+ bool
805
+ Slice::Ruby::CodeVisitor::visitExceptionStart(const ExceptionPtr& p)
806
+ {
807
+ string scoped = p->scoped();
808
+ string name = fixIdent(p->name(), IdentToUpper);
809
+
810
+ _out << sp << nl << "if not defined?(" << getAbsolute(p, IdentToUpper) << ')';
811
+ _out.inc();
812
+ _out << nl << "class " << name << " < ";
813
+ ExceptionPtr base = p->base();
814
+ string baseName;
815
+ if(base)
816
+ {
817
+ baseName = getAbsolute(base, IdentToUpper);
818
+ _out << baseName;
819
+ }
820
+ else if(p->isLocal())
821
+ {
822
+ _out << "Ice::LocalException";
823
+ }
824
+ else
825
+ {
826
+ _out << "Ice::UserException";
827
+ }
828
+ _out.inc();
829
+
830
+ DataMemberList members = p->dataMembers();
831
+
832
+ //
833
+ // initialize
834
+ //
835
+ _out << nl << "def initialize";
836
+ MemberInfoList allMembers;
837
+ collectExceptionMembers(p, allMembers, false);
838
+ bool inheritsMembers = false;
839
+ if(!allMembers.empty())
840
+ {
841
+ _out << '(';
842
+ writeConstructorParams(allMembers);
843
+ _out << ')';
844
+ for(MemberInfoList::iterator q = allMembers.begin(); q != allMembers.end(); ++q)
845
+ {
846
+ if(q->inherited)
847
+ {
848
+ inheritsMembers = true;
849
+ }
850
+ }
851
+ }
852
+ _out.inc();
853
+ if(!allMembers.empty())
854
+ {
855
+ if(inheritsMembers)
856
+ {
857
+ _out << nl << "super" << spar;
858
+ for(MemberInfoList::iterator q = allMembers.begin(); q != allMembers.end(); ++q)
859
+ {
860
+ if(q->inherited)
861
+ {
862
+ _out << q->lowerName;
863
+ }
864
+ }
865
+ _out << epar;
866
+ }
867
+ for(MemberInfoList::iterator q = allMembers.begin(); q != allMembers.end(); ++q)
868
+ {
869
+ if(!q->inherited)
870
+ {
871
+ _out << nl << '@' << q->fixedName << " = " << q->lowerName;
872
+ }
873
+ }
874
+ }
875
+ _out.dec();
876
+ _out << nl << "end";
877
+
878
+ //
879
+ // to_s
880
+ //
881
+ _out << sp << nl << "def to_s";
882
+ _out.inc();
883
+ _out << nl << "'" << scoped.substr(2) << "'";
884
+ _out.dec();
885
+ _out << nl << "end";
886
+
887
+ //
888
+ // read/write accessors for data members.
889
+ //
890
+ if(!members.empty())
891
+ {
892
+ _out << sp << nl << "attr_accessor ";
893
+ for(DataMemberList::iterator dmli = members.begin(); dmli != members.end(); ++dmli)
894
+ {
895
+ if(dmli != members.begin())
896
+ {
897
+ _out << ", ";
898
+ }
899
+ _out << ':' << fixIdent((*dmli)->name(), IdentNormal);
900
+ }
901
+ }
902
+
903
+ _out.dec();
904
+ _out << nl << "end"; // End of class.
905
+
906
+ //
907
+ // Emit the type information.
908
+ //
909
+ const bool preserved = p->hasMetaData("preserve-slice") || p->inheritsMetaData("preserve-slice");
910
+ _out << sp << nl << "T_" << name << " = ::Ice::__defineException('" << scoped << "', " << name << ", "
911
+ << (preserved ? "true" : "false") << ", ";
912
+ if(!base)
913
+ {
914
+ _out << "nil";
915
+ }
916
+ else
917
+ {
918
+ _out << getAbsolute(base, IdentToUpper, "T_");
919
+ }
920
+ _out << ", [";
921
+ if(members.size() > 1)
922
+ {
923
+ _out.inc();
924
+ _out << nl;
925
+ }
926
+ //
927
+ // Data members are represented as an array:
928
+ //
929
+ // ['MemberName', MemberType, Optional, Tag]
930
+ //
931
+ // where MemberType is either a primitive type constant (T_INT, etc.) or the id of a constructed type.
932
+ //
933
+ for(DataMemberList::iterator dmli = members.begin(); dmli != members.end(); ++dmli)
934
+ {
935
+ if(dmli != members.begin())
936
+ {
937
+ _out << ',' << nl;
938
+ }
939
+ _out << "[\"" << fixIdent((*dmli)->name(), IdentNormal) << "\", ";
940
+ writeType((*dmli)->type());
941
+ _out << ", " << ((*dmli)->optional() ? "true" : "false") << ", " << ((*dmli)->optional() ? (*dmli)->tag() : 0)
942
+ << ']';
943
+ }
944
+ if(members.size() > 1)
945
+ {
946
+ _out.dec();
947
+ _out << nl;
948
+ }
949
+ _out << "])";
950
+ _out << nl << name << "::ICE_TYPE = T_" << name;
951
+
952
+ _out.dec();
953
+ _out << nl << "end"; // if not defined?()
954
+
955
+ return false;
956
+ }
957
+
958
+ bool
959
+ Slice::Ruby::CodeVisitor::visitStructStart(const StructPtr& p)
960
+ {
961
+ string scoped = p->scoped();
962
+ string name = fixIdent(p->name(), IdentToUpper);
963
+ MemberInfoList memberList;
964
+
965
+ {
966
+ DataMemberList members = p->dataMembers();
967
+ for(DataMemberList::iterator q = members.begin(); q != members.end(); ++q)
968
+ {
969
+ memberList.push_back(MemberInfo());
970
+ memberList.back().lowerName = fixIdent((*q)->name(), IdentToLower);
971
+ memberList.back().fixedName = fixIdent((*q)->name(), IdentNormal);
972
+ memberList.back().inherited = false;
973
+ memberList.back().dataMember = *q;
974
+ }
975
+ }
976
+
977
+ _out << sp << nl << "if not defined?(" << getAbsolute(p, IdentToUpper) << ')';
978
+ _out.inc();
979
+ _out << nl << "class " << name;
980
+ _out.inc();
981
+ if(!memberList.empty())
982
+ {
983
+ _out << nl << "def initialize(";
984
+ writeConstructorParams(memberList);
985
+ _out << ")";
986
+ _out.inc();
987
+ for(MemberInfoList::iterator r = memberList.begin(); r != memberList.end(); ++r)
988
+ {
989
+ _out << nl << '@' << r->fixedName << " = " << r->lowerName;
990
+ }
991
+ _out.dec();
992
+ _out << nl << "end";
993
+ }
994
+
995
+ //
996
+ // hash
997
+ //
998
+ _out << sp << nl << "def hash";
999
+ _out.inc();
1000
+ _out << nl << "_h = 0";
1001
+ int iter = 0;
1002
+ for(MemberInfoList::iterator r = memberList.begin(); r != memberList.end(); ++r)
1003
+ {
1004
+ writeHash("@" + r->fixedName, r->dataMember->type(), iter);
1005
+ }
1006
+ _out << nl << "_h % 0x7fffffff";
1007
+ _out.dec();
1008
+ _out << nl << "end";
1009
+
1010
+ //
1011
+ // ==
1012
+ //
1013
+ _out << sp << nl << "def ==(other)";
1014
+ _out.inc();
1015
+ _out << nl << "return false if";
1016
+ _out.inc();
1017
+ for(MemberInfoList::iterator r = memberList.begin(); r != memberList.end(); ++r)
1018
+ {
1019
+ if(r != memberList.begin())
1020
+ {
1021
+ _out << " or";
1022
+ }
1023
+ _out << nl << "@" << r->fixedName << " != other." << r->fixedName;
1024
+ }
1025
+ _out.dec();
1026
+ _out << nl << "true";
1027
+ _out.dec();
1028
+ _out << nl << "end";
1029
+
1030
+ //
1031
+ // eql?
1032
+ //
1033
+ // This method is used to determine the equality of keys in a Hash object.
1034
+ //
1035
+ _out << sp << nl << "def eql?(other)";
1036
+ _out.inc();
1037
+ _out << nl << "return other.class == self.class && other == self";
1038
+ _out.dec();
1039
+ _out << nl << "end";
1040
+
1041
+ //
1042
+ // inspect
1043
+ //
1044
+ _out << sp << nl << "def inspect";
1045
+ _out.inc();
1046
+ _out << nl << "::Ice::__stringify(self, T_" << name << ")";
1047
+ _out.dec();
1048
+ _out << nl << "end";
1049
+
1050
+ //
1051
+ // read/write accessors for data members.
1052
+ //
1053
+ if(!memberList.empty())
1054
+ {
1055
+ _out << sp << nl << "attr_accessor ";
1056
+ for(MemberInfoList::iterator r = memberList.begin(); r != memberList.end(); ++r)
1057
+ {
1058
+ if(r != memberList.begin())
1059
+ {
1060
+ _out << ", ";
1061
+ }
1062
+ _out << ':' << r->fixedName;
1063
+ }
1064
+ }
1065
+
1066
+ _out.dec();
1067
+ _out << nl << "end"; // End of class.
1068
+
1069
+ //
1070
+ // Emit the type information.
1071
+ //
1072
+ _out << sp << nl << "T_" << name << " = ::Ice::__defineStruct('" << scoped << "', " << name << ", [";
1073
+ //
1074
+ // Data members are represented as an array:
1075
+ //
1076
+ // ['MemberName', MemberType]
1077
+ //
1078
+ // where MemberType is either a primitive type constant (T_INT, etc.) or the id of a constructed type.
1079
+ //
1080
+ if(memberList.size() > 1)
1081
+ {
1082
+ _out.inc();
1083
+ _out << nl;
1084
+ }
1085
+ for(MemberInfoList::iterator r = memberList.begin(); r != memberList.end(); ++r)
1086
+ {
1087
+ if(r != memberList.begin())
1088
+ {
1089
+ _out << ',' << nl;
1090
+ }
1091
+ _out << "[\"" << r->fixedName << "\", ";
1092
+ writeType(r->dataMember->type());
1093
+ _out << ']';
1094
+ }
1095
+ if(memberList.size() > 1)
1096
+ {
1097
+ _out.dec();
1098
+ _out << nl;
1099
+ }
1100
+ _out << "])";
1101
+
1102
+ _out.dec();
1103
+ _out << nl << "end"; // if not defined?()
1104
+
1105
+ return false;
1106
+ }
1107
+
1108
+ void
1109
+ Slice::Ruby::CodeVisitor::visitSequence(const SequencePtr& p)
1110
+ {
1111
+ //
1112
+ // Emit the type information.
1113
+ //
1114
+ string name = fixIdent(p->name(), IdentToUpper);
1115
+ string scoped = p->scoped();
1116
+ _out << sp << nl << "if not defined?(" << getAbsolute(p, IdentToUpper, "T_") << ')';
1117
+ _out.inc();
1118
+ _out << nl << "T_" << name << " = ::Ice::__defineSequence('" << scoped << "', ";
1119
+ writeType(p->type());
1120
+ _out << ")";
1121
+ _out.dec();
1122
+ _out << nl << "end"; // if not defined?()
1123
+ }
1124
+
1125
+ void
1126
+ Slice::Ruby::CodeVisitor::visitDictionary(const DictionaryPtr& p)
1127
+ {
1128
+ //
1129
+ // Emit the type information.
1130
+ //
1131
+ string name = fixIdent(p->name(), IdentToUpper);
1132
+ string scoped = p->scoped();
1133
+ _out << sp << nl << "if not defined?(" << getAbsolute(p, IdentToUpper, "T_") << ')';
1134
+ _out.inc();
1135
+ _out << nl << "T_" << name << " = ::Ice::__defineDictionary('" << scoped << "', ";
1136
+ writeType(p->keyType());
1137
+ _out << ", ";
1138
+ writeType(p->valueType());
1139
+ _out << ")";
1140
+ _out.dec();
1141
+ _out << nl << "end"; // if not defined?()
1142
+ }
1143
+
1144
+ void
1145
+ Slice::Ruby::CodeVisitor::visitEnum(const EnumPtr& p)
1146
+ {
1147
+ string scoped = p->scoped();
1148
+ string name = fixIdent(p->name(), IdentToUpper);
1149
+ EnumeratorList enums = p->getEnumerators();
1150
+
1151
+ _out << sp << nl << "if not defined?(" << getAbsolute(p, IdentToUpper) << ')';
1152
+ _out.inc();
1153
+ _out << nl << "class " << name;
1154
+ _out.inc();
1155
+ _out << nl << "include Comparable";
1156
+ _out << sp << nl << "def initialize(name, value)";
1157
+ _out.inc();
1158
+ _out << nl << "@name = name";
1159
+ _out << nl << "@value = value";
1160
+ _out.dec();
1161
+ _out << nl << "end";
1162
+
1163
+ //
1164
+ // from_int
1165
+ //
1166
+ {
1167
+ _out << sp << nl << "def " << name << ".from_int(val)";
1168
+ ostringstream sz;
1169
+ sz << enums.size() - 1;
1170
+ _out.inc();
1171
+ _out << nl << "@@_enumerators[val]"; // Evaluates to nil if the key is not found
1172
+ _out.dec();
1173
+ _out << nl << "end";
1174
+ }
1175
+
1176
+ //
1177
+ // to_s
1178
+ //
1179
+ _out << sp << nl << "def to_s";
1180
+ _out.inc();
1181
+ _out << nl << "@name";
1182
+ _out.dec();
1183
+ _out << nl << "end";
1184
+
1185
+ //
1186
+ // to_i
1187
+ //
1188
+ _out << sp << nl << "def to_i";
1189
+ _out.inc();
1190
+ _out << nl << "@value";
1191
+ _out.dec();
1192
+ _out << nl << "end";
1193
+
1194
+ //
1195
+ // <=>
1196
+ //
1197
+ _out << sp << nl << "def <=>(other)";
1198
+ _out.inc();
1199
+ _out << nl << "other.is_a?(" << name << ") or raise ArgumentError, \"value must be a " << name << "\"";
1200
+ _out << nl << "@value <=> other.to_i";
1201
+ _out.dec();
1202
+ _out << nl << "end";
1203
+
1204
+ //
1205
+ // hash
1206
+ //
1207
+ _out << sp << nl << "def hash";
1208
+ _out.inc();
1209
+ _out << nl << "@value.hash";
1210
+ _out.dec();
1211
+ _out << nl << "end";
1212
+
1213
+ //
1214
+ // inspect
1215
+ //
1216
+ _out << sp << nl << "def inspect";
1217
+ _out.inc();
1218
+ _out << nl << "@name + \"(#{@value})\"";
1219
+ _out.dec();
1220
+ _out << nl << "end";
1221
+
1222
+ //
1223
+ // each
1224
+ //
1225
+ _out << sp << nl << "def " << name << ".each(&block)";
1226
+ _out.inc();
1227
+ _out << nl << "@@_enumerators.each_value(&block)";
1228
+ _out.dec();
1229
+ _out << nl << "end";
1230
+
1231
+ //
1232
+ // Constant for each enumerator.
1233
+ //
1234
+ _out << sp;
1235
+ int i = 0;
1236
+ for(EnumeratorList::iterator q = enums.begin(); q != enums.end(); ++q, ++i)
1237
+ {
1238
+ ostringstream idx;
1239
+ idx << i;
1240
+ _out << nl << fixIdent((*q)->name(), IdentToUpper) << " = " << name << ".new(\"" << (*q)->name()
1241
+ << "\", " << (*q)->value() << ')';
1242
+ }
1243
+
1244
+ _out << sp << nl << "@@_enumerators = {";
1245
+ for(EnumeratorList::iterator q = enums.begin(); q != enums.end(); ++q)
1246
+ {
1247
+ if(q != enums.begin())
1248
+ {
1249
+ _out << ", ";
1250
+ }
1251
+ _out << (*q)->value() << "=>" << fixIdent((*q)->name(), IdentToUpper);
1252
+ }
1253
+ _out << '}';
1254
+
1255
+ _out << sp << nl << "def " << name << "._enumerators";
1256
+ _out.inc();
1257
+ _out << nl << "@@_enumerators";
1258
+ _out.dec();
1259
+ _out << nl << "end";
1260
+
1261
+ _out << sp << nl << "private_class_method :new";
1262
+
1263
+ _out.dec();
1264
+ _out << nl << "end"; // End of class.
1265
+
1266
+ //
1267
+ // Emit the type information.
1268
+ //
1269
+ _out << sp << nl << "T_" << name << " = ::Ice::__defineEnum('" << scoped << "', " << name << ", " << name
1270
+ << "::_enumerators)";
1271
+
1272
+ _out.dec();
1273
+ _out << nl << "end"; // if not defined?()
1274
+ }
1275
+
1276
+ void
1277
+ Slice::Ruby::CodeVisitor::visitConst(const ConstPtr& p)
1278
+ {
1279
+ Slice::TypePtr type = p->type();
1280
+ string name = fixIdent(p->name(), IdentToUpper);
1281
+
1282
+ _out << sp << nl << name << " = ";
1283
+ writeConstantValue(type, p->valueType(), p->value());
1284
+ }
1285
+
1286
+ void
1287
+ Slice::Ruby::CodeVisitor::writeType(const TypePtr& p)
1288
+ {
1289
+ BuiltinPtr builtin = BuiltinPtr::dynamicCast(p);
1290
+ if(builtin)
1291
+ {
1292
+ switch(builtin->kind())
1293
+ {
1294
+ case Builtin::KindBool:
1295
+ {
1296
+ _out << "::Ice::T_bool";
1297
+ break;
1298
+ }
1299
+ case Builtin::KindByte:
1300
+ {
1301
+ _out << "::Ice::T_byte";
1302
+ break;
1303
+ }
1304
+ case Builtin::KindShort:
1305
+ {
1306
+ _out << "::Ice::T_short";
1307
+ break;
1308
+ }
1309
+ case Builtin::KindInt:
1310
+ {
1311
+ _out << "::Ice::T_int";
1312
+ break;
1313
+ }
1314
+ case Builtin::KindLong:
1315
+ {
1316
+ _out << "::Ice::T_long";
1317
+ break;
1318
+ }
1319
+ case Builtin::KindFloat:
1320
+ {
1321
+ _out << "::Ice::T_float";
1322
+ break;
1323
+ }
1324
+ case Builtin::KindDouble:
1325
+ {
1326
+ _out << "::Ice::T_double";
1327
+ break;
1328
+ }
1329
+ case Builtin::KindString:
1330
+ {
1331
+ _out << "::Ice::T_string";
1332
+ break;
1333
+ }
1334
+ case Builtin::KindObject:
1335
+ {
1336
+ _out << "::Ice::T_Object";
1337
+ break;
1338
+ }
1339
+ case Builtin::KindObjectProxy:
1340
+ {
1341
+ _out << "::Ice::T_ObjectPrx";
1342
+ break;
1343
+ }
1344
+ case Builtin::KindLocalObject:
1345
+ {
1346
+ _out << "::Ice::T_LocalObject";
1347
+ break;
1348
+ }
1349
+ }
1350
+ return;
1351
+ }
1352
+
1353
+ ProxyPtr prx = ProxyPtr::dynamicCast(p);
1354
+ if(prx)
1355
+ {
1356
+ _out << getAbsolute(prx->_class(), IdentToUpper, "T_") << "Prx";
1357
+ return;
1358
+ }
1359
+
1360
+ ContainedPtr cont = ContainedPtr::dynamicCast(p);
1361
+ assert(cont);
1362
+ _out << getAbsolute(cont, IdentToUpper, "T_");
1363
+ }
1364
+
1365
+ string
1366
+ Slice::Ruby::CodeVisitor::getInitializer(const TypePtr& p)
1367
+ {
1368
+ BuiltinPtr builtin = BuiltinPtr::dynamicCast(p);
1369
+ if(builtin)
1370
+ {
1371
+ switch(builtin->kind())
1372
+ {
1373
+ case Builtin::KindBool:
1374
+ {
1375
+ return "false";
1376
+ }
1377
+ case Builtin::KindByte:
1378
+ case Builtin::KindShort:
1379
+ case Builtin::KindInt:
1380
+ case Builtin::KindLong:
1381
+ {
1382
+ return "0";
1383
+ }
1384
+ case Builtin::KindFloat:
1385
+ case Builtin::KindDouble:
1386
+ {
1387
+ return "0.0";
1388
+ }
1389
+ case Builtin::KindString:
1390
+ {
1391
+ return "''";
1392
+ }
1393
+ case Builtin::KindObject:
1394
+ case Builtin::KindObjectProxy:
1395
+ case Builtin::KindLocalObject:
1396
+ {
1397
+ return "nil";
1398
+ }
1399
+ }
1400
+ }
1401
+
1402
+ EnumPtr en = EnumPtr::dynamicCast(p);
1403
+ if(en)
1404
+ {
1405
+ EnumeratorList enums = en->getEnumerators();
1406
+ return getAbsolute(en, IdentToUpper) + "::" + fixIdent(enums.front()->name(), IdentToUpper);
1407
+ }
1408
+
1409
+ StructPtr st = StructPtr::dynamicCast(p);
1410
+ if(st)
1411
+ {
1412
+ return getAbsolute(st, IdentToUpper) + ".new";
1413
+ }
1414
+
1415
+ return "nil";
1416
+ }
1417
+
1418
+ void
1419
+ Slice::Ruby::CodeVisitor::writeHash(const string& name, const TypePtr&, int&)
1420
+ {
1421
+ _out << nl << "_h = 5 * _h + " << name << ".hash";
1422
+ }
1423
+
1424
+ void
1425
+ Slice::Ruby::CodeVisitor::writeConstantValue(const TypePtr& type, const SyntaxTreeBasePtr& valueType,
1426
+ const string& value)
1427
+ {
1428
+ ConstPtr constant = ConstPtr::dynamicCast(valueType);
1429
+ if(constant)
1430
+ {
1431
+ _out << fixIdent(constant->scoped(), IdentToUpper);
1432
+ }
1433
+ else
1434
+ {
1435
+ Slice::BuiltinPtr b = Slice::BuiltinPtr::dynamicCast(type);
1436
+ Slice::EnumPtr en = Slice::EnumPtr::dynamicCast(type);
1437
+ if(b)
1438
+ {
1439
+ switch(b->kind())
1440
+ {
1441
+ case Slice::Builtin::KindBool:
1442
+ case Slice::Builtin::KindByte:
1443
+ case Slice::Builtin::KindShort:
1444
+ case Slice::Builtin::KindInt:
1445
+ case Slice::Builtin::KindFloat:
1446
+ case Slice::Builtin::KindDouble:
1447
+ {
1448
+ _out << value;
1449
+ break;
1450
+ }
1451
+ case Slice::Builtin::KindLong:
1452
+ {
1453
+ IceUtil::Int64 l;
1454
+ IceUtilInternal::stringToInt64(value, l);
1455
+ _out << value;
1456
+ break;
1457
+ }
1458
+ case Slice::Builtin::KindString:
1459
+ {
1460
+ //
1461
+ // Expand strings into the basic source character set. We can't use isalpha() and the like
1462
+ // here because they are sensitive to the current locale.
1463
+ //
1464
+ static const string basicSourceChars = "abcdefghijklmnopqrstuvwxyz"
1465
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1466
+ "0123456789"
1467
+ "_{}[]#()<>%:;.?*+-/^&|~!=, '";
1468
+ static const set<char> charSet(basicSourceChars.begin(), basicSourceChars.end());
1469
+
1470
+ _out << "\""; // Opening "
1471
+
1472
+ for(string::const_iterator c = value.begin(); c != value.end(); ++c)
1473
+ {
1474
+ switch(*c)
1475
+ {
1476
+ case '"':
1477
+ {
1478
+ _out << "\\\"";
1479
+ break;
1480
+ }
1481
+ case '\\':
1482
+ {
1483
+ _out << "\\\\";
1484
+ break;
1485
+ }
1486
+ case '\r':
1487
+ {
1488
+ _out << "\\r";
1489
+ break;
1490
+ }
1491
+ case '\n':
1492
+ {
1493
+ _out << "\\n";
1494
+ break;
1495
+ }
1496
+ case '\t':
1497
+ {
1498
+ _out << "\\t";
1499
+ break;
1500
+ }
1501
+ case '\b':
1502
+ {
1503
+ _out << "\\b";
1504
+ break;
1505
+ }
1506
+ case '\f':
1507
+ {
1508
+ _out << "\\f";
1509
+ break;
1510
+ }
1511
+ default:
1512
+ {
1513
+ if(charSet.find(*c) == charSet.end())
1514
+ {
1515
+ unsigned char uc = *c; // Char may be signed, so make it positive.
1516
+ stringstream s;
1517
+ s << "\\"; // Print as octal if not in basic source character set.
1518
+ s.flags(ios_base::oct);
1519
+ s.width(3);
1520
+ s.fill('0');
1521
+ s << static_cast<unsigned>(uc);
1522
+ _out << s.str();
1523
+ }
1524
+ else
1525
+ {
1526
+ _out << *c; // Print normally if in basic source character set.
1527
+ }
1528
+ break;
1529
+ }
1530
+ }
1531
+ }
1532
+
1533
+ _out << "\""; // Closing "
1534
+ break;
1535
+ }
1536
+
1537
+ case Slice::Builtin::KindObject:
1538
+ case Slice::Builtin::KindObjectProxy:
1539
+ case Slice::Builtin::KindLocalObject:
1540
+ assert(false);
1541
+ }
1542
+ }
1543
+ else if(en)
1544
+ {
1545
+ _out << getAbsolute(en, IdentToUpper) << "::";
1546
+ string::size_type colon = value.rfind(':');
1547
+ if(colon != string::npos)
1548
+ {
1549
+ _out << fixIdent(value.substr(colon + 1), IdentToUpper);
1550
+ }
1551
+ else
1552
+ {
1553
+ _out << fixIdent(value, IdentToUpper);
1554
+ }
1555
+ }
1556
+ else
1557
+ {
1558
+ assert(false); // Unknown const type.
1559
+ }
1560
+ }
1561
+ }
1562
+
1563
+ void
1564
+ Slice::Ruby::CodeVisitor::writeConstructorParams(const MemberInfoList& members)
1565
+ {
1566
+ for(MemberInfoList::const_iterator p = members.begin(); p != members.end(); ++p)
1567
+ {
1568
+ if(p != members.begin())
1569
+ {
1570
+ _out << ", ";
1571
+ }
1572
+ _out << p->lowerName << "=";
1573
+
1574
+ const DataMemberPtr member = p->dataMember;
1575
+ if(member->defaultValueType())
1576
+ {
1577
+ writeConstantValue(member->type(), member->defaultValueType(), member->defaultValue());
1578
+ }
1579
+ else if(member->optional())
1580
+ {
1581
+ _out << "::Ice::Unset";
1582
+ }
1583
+ else
1584
+ {
1585
+ _out << getInitializer(member->type());
1586
+ }
1587
+ }
1588
+ }
1589
+
1590
+ void
1591
+ Slice::Ruby::CodeVisitor::collectClassMembers(const ClassDefPtr& p, MemberInfoList& allMembers, bool inherited)
1592
+ {
1593
+ ClassList bases = p->bases();
1594
+ if(!bases.empty() && !bases.front()->isInterface())
1595
+ {
1596
+ collectClassMembers(bases.front(), allMembers, true);
1597
+ }
1598
+
1599
+ DataMemberList members = p->dataMembers();
1600
+
1601
+ for(DataMemberList::iterator q = members.begin(); q != members.end(); ++q)
1602
+ {
1603
+ MemberInfo m;
1604
+ m.lowerName = fixIdent((*q)->name(), IdentToLower);
1605
+ m.fixedName = fixIdent((*q)->name(), IdentNormal);
1606
+ m.inherited = inherited;
1607
+ m.dataMember = *q;
1608
+ allMembers.push_back(m);
1609
+ }
1610
+ }
1611
+
1612
+ void
1613
+ Slice::Ruby::CodeVisitor::collectExceptionMembers(const ExceptionPtr& p, MemberInfoList& allMembers, bool inherited)
1614
+ {
1615
+ ExceptionPtr base = p->base();
1616
+ if(base)
1617
+ {
1618
+ collectExceptionMembers(base, allMembers, true);
1619
+ }
1620
+
1621
+ DataMemberList members = p->dataMembers();
1622
+
1623
+ for(DataMemberList::iterator q = members.begin(); q != members.end(); ++q)
1624
+ {
1625
+ MemberInfo m;
1626
+ m.lowerName = fixIdent((*q)->name(), IdentToLower);
1627
+ m.fixedName = fixIdent((*q)->name(), IdentNormal);
1628
+ m.inherited = inherited;
1629
+ m.dataMember = *q;
1630
+ allMembers.push_back(m);
1631
+ }
1632
+ }
1633
+
1634
+ void
1635
+ Slice::Ruby::generate(const UnitPtr& un, bool all, bool checksum, const vector<string>& includePaths, Output& out)
1636
+ {
1637
+ out << nl << "require 'Ice'";
1638
+
1639
+ if(!all)
1640
+ {
1641
+ vector<string> paths = includePaths;
1642
+ for(vector<string>::iterator p = paths.begin(); p != paths.end(); ++p)
1643
+ {
1644
+ *p = fullPath(*p);
1645
+ }
1646
+
1647
+ StringList includes = un->includeFiles();
1648
+ for(StringList::const_iterator q = includes.begin(); q != includes.end(); ++q)
1649
+ {
1650
+ string file = changeInclude(*q, paths);
1651
+ out << nl << "require '" << file << ".rb'";
1652
+ }
1653
+ }
1654
+
1655
+ CodeVisitor codeVisitor(out);
1656
+ un->visit(&codeVisitor, false);
1657
+
1658
+ if(checksum)
1659
+ {
1660
+ ChecksumMap checksums = createChecksums(un);
1661
+ if(!checksums.empty())
1662
+ {
1663
+ out << sp;
1664
+ for(ChecksumMap::const_iterator p = checksums.begin(); p != checksums.end(); ++p)
1665
+ {
1666
+ out << nl << "::Ice::SliceChecksums[\"" << p->first << "\"] = \"";
1667
+ ostringstream str;
1668
+ str.flags(ios_base::hex);
1669
+ str.fill('0');
1670
+ for(vector<unsigned char>::const_iterator q = p->second.begin(); q != p->second.end(); ++q)
1671
+ {
1672
+ str << static_cast<int>(*q);
1673
+ }
1674
+ out << str.str() << "\"";
1675
+ }
1676
+ }
1677
+ }
1678
+
1679
+ out << nl; // Trailing newline.
1680
+ }
1681
+
1682
+ string
1683
+ Slice::Ruby::fixIdent(const string& ident, IdentStyle style)
1684
+ {
1685
+ assert(!ident.empty());
1686
+ if(ident[0] != ':')
1687
+ {
1688
+ string id = ident;
1689
+ switch(style)
1690
+ {
1691
+ case IdentNormal:
1692
+ break;
1693
+ case IdentToUpper:
1694
+ // Special case BEGIN & END for class/module names.
1695
+ if(id == "BEGIN" || id == "END")
1696
+ {
1697
+ return id + "_";
1698
+ }
1699
+ if(id[0] >= 'a' && id[0] <= 'z')
1700
+ {
1701
+ id[0] += 'A' - 'a';
1702
+ }
1703
+ break;
1704
+ case IdentToLower:
1705
+ if(id[0] >= 'A' && id[0] <= 'Z')
1706
+ {
1707
+ id[0] += 'a' - 'A';
1708
+ }
1709
+ break;
1710
+ }
1711
+ return lookupKwd(id);
1712
+ }
1713
+
1714
+ vector<string> ids = splitScopedName(ident);
1715
+ assert(!ids.empty());
1716
+
1717
+ ostringstream result;
1718
+
1719
+ for(vector<string>::size_type i = 0; i < ids.size() - 1; ++i)
1720
+ {
1721
+ //
1722
+ // We assume all intermediate names must be upper-case (i.e., they represent
1723
+ // the names of modules or classes).
1724
+ //
1725
+ result << "::" << fixIdent(ids[i], IdentToUpper);
1726
+ }
1727
+
1728
+ result << "::" << fixIdent(ids[ids.size() - 1], style);
1729
+
1730
+ //
1731
+ // Preserve trailing scope resolution operator if necessary.
1732
+ //
1733
+ if(ident.rfind("::") == ident.size() - 2)
1734
+ {
1735
+ result << "::";
1736
+ }
1737
+
1738
+ return result.str();
1739
+ }
1740
+
1741
+ string
1742
+ Slice::Ruby::getAbsolute(const ContainedPtr& cont, IdentStyle style, const string& prefix)
1743
+ {
1744
+ string scope = fixIdent(cont->scope(), IdentToUpper);
1745
+
1746
+ if(prefix.empty())
1747
+ {
1748
+ return scope + fixIdent(cont->name(), style);
1749
+ }
1750
+ else
1751
+ {
1752
+ return scope + prefix + fixIdent(cont->name(), style);
1753
+ }
1754
+ }
1755
+
1756
+ void
1757
+ Slice::Ruby::printHeader(IceUtilInternal::Output& out)
1758
+ {
1759
+ static const char* header =
1760
+ "# **********************************************************************\n"
1761
+ "#\n"
1762
+ "# Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.\n"
1763
+ "#\n"
1764
+ "# This copy of Ice is licensed to you under the terms described in the\n"
1765
+ "# ICE_LICENSE file included in this distribution.\n"
1766
+ "#\n"
1767
+ "# **********************************************************************\n"
1768
+ ;
1769
+
1770
+ out << header;
1771
+ out << "#\n";
1772
+ out << "# Ice version " << ICE_STRING_VERSION << "\n";
1773
+ out << "#\n";
1774
+ }