zeroc-ice 3.6.5 → 3.7.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (777) hide show
  1. checksums.yaml +5 -5
  2. data/ICE_LICENSE +17 -17
  3. data/LICENSE +12 -12
  4. data/bin/slice2rb +1 -6
  5. data/ext/Communicator.cpp +223 -61
  6. data/ext/Communicator.h +1 -6
  7. data/ext/Config.h +23 -7
  8. data/ext/Connection.cpp +108 -76
  9. data/ext/Connection.h +4 -6
  10. data/ext/Endpoint.cpp +16 -54
  11. data/ext/Endpoint.h +1 -6
  12. data/ext/ImplicitContext.cpp +1 -10
  13. data/ext/ImplicitContext.h +1 -6
  14. data/ext/Init.cpp +4 -6
  15. data/ext/Logger.cpp +1 -6
  16. data/ext/Logger.h +1 -6
  17. data/ext/Operation.cpp +38 -54
  18. data/ext/Operation.h +1 -6
  19. data/ext/Properties.cpp +3 -8
  20. data/ext/Properties.h +1 -6
  21. data/ext/Proxy.cpp +111 -70
  22. data/ext/Proxy.h +1 -6
  23. data/ext/Slice.cpp +5 -20
  24. data/ext/Slice.h +1 -6
  25. data/ext/Types.cpp +313 -224
  26. data/ext/Types.h +118 -71
  27. data/ext/Util.cpp +69 -36
  28. data/ext/Util.h +117 -42
  29. data/ext/ValueFactoryManager.cpp +440 -0
  30. data/ext/ValueFactoryManager.h +95 -0
  31. data/ext/extconf.rb +52 -48
  32. data/ext/ice/cpp/include/Ice/Application.h +275 -105
  33. data/ext/ice/cpp/include/Ice/AsyncResult.h +124 -337
  34. data/ext/ice/cpp/include/Ice/AsyncResultF.h +4 -7
  35. data/ext/ice/cpp/include/Ice/BatchRequestInterceptor.h +39 -16
  36. data/ext/ice/cpp/include/Ice/BatchRequestQueueF.h +1 -6
  37. data/ext/ice/cpp/include/Ice/Buffer.h +10 -15
  38. data/ext/ice/cpp/include/Ice/CommunicatorAsync.h +56 -17
  39. data/ext/ice/cpp/include/Ice/Comparable.h +205 -0
  40. data/ext/ice/cpp/include/Ice/Config.h +16 -39
  41. data/ext/ice/cpp/include/Ice/ConnectionAsync.h +203 -16
  42. data/ext/ice/cpp/include/Ice/ConnectionIF.h +7 -6
  43. data/ext/ice/cpp/include/Ice/ConsoleUtil.h +23 -0
  44. data/ext/ice/cpp/include/Ice/DefaultValueFactory.h +57 -0
  45. data/ext/ice/cpp/include/Ice/DispatchInterceptor.h +20 -12
  46. data/ext/ice/cpp/include/Ice/Dispatcher.h +35 -19
  47. data/ext/ice/cpp/include/Ice/DynamicLibrary.h +7 -10
  48. data/ext/ice/cpp/include/Ice/DynamicLibraryF.h +1 -6
  49. data/ext/ice/cpp/include/Ice/Exception.h +110 -63
  50. data/ext/ice/cpp/include/Ice/ExceptionHelpers.h +74 -0
  51. data/ext/ice/cpp/include/Ice/FactoryTable.h +22 -18
  52. data/ext/ice/cpp/include/Ice/FactoryTableInit.h +28 -31
  53. data/ext/ice/cpp/include/Ice/Format.h +17 -18
  54. data/ext/ice/cpp/include/Ice/Functional.h +38 -38
  55. data/ext/ice/cpp/include/Ice/GCObject.h +9 -10
  56. data/ext/ice/cpp/include/Ice/Handle.h +6 -16
  57. data/ext/ice/cpp/include/Ice/Ice.h +9 -10
  58. data/ext/ice/cpp/include/Ice/IconvStringConverter.h +377 -0
  59. data/ext/ice/cpp/include/Ice/Incoming.h +132 -38
  60. data/ext/ice/cpp/include/Ice/IncomingAsync.h +109 -31
  61. data/ext/ice/cpp/include/Ice/IncomingAsyncF.h +7 -6
  62. data/ext/ice/cpp/include/Ice/Initialize.h +872 -60
  63. data/ext/ice/cpp/include/Ice/InputStream.h +1514 -0
  64. data/ext/ice/cpp/include/Ice/InstanceF.h +1 -7
  65. data/ext/ice/cpp/include/Ice/InterfaceByValue.h +57 -0
  66. data/ext/ice/cpp/include/Ice/LocalObject.h +13 -14
  67. data/ext/ice/cpp/include/Ice/LocalObjectF.h +1 -6
  68. data/ext/ice/cpp/include/Ice/LoggerUtil.h +56 -24
  69. data/ext/ice/cpp/include/Ice/MetricsAdminI.h +124 -71
  70. data/ext/ice/cpp/include/Ice/MetricsFunctional.h +25 -10
  71. data/ext/ice/cpp/include/Ice/MetricsObserverI.h +116 -32
  72. data/ext/ice/cpp/include/Ice/NativePropertiesAdmin.h +61 -30
  73. data/ext/ice/cpp/include/Ice/Object.h +413 -78
  74. data/ext/ice/cpp/include/Ice/ObjectF.h +12 -8
  75. data/ext/ice/cpp/include/Ice/ObserverHelper.h +18 -13
  76. data/ext/ice/cpp/include/Ice/Optional.h +1114 -0
  77. data/ext/ice/cpp/include/Ice/OutgoingAsync.h +684 -89
  78. data/ext/ice/cpp/include/Ice/OutgoingAsyncF.h +12 -11
  79. data/ext/ice/cpp/include/Ice/OutputStream.h +1092 -0
  80. data/ext/ice/cpp/include/Ice/Protocol.h +49 -17
  81. data/ext/ice/cpp/include/Ice/Proxy.h +3438 -745
  82. data/ext/ice/cpp/include/Ice/ProxyF.h +13 -38
  83. data/ext/ice/cpp/include/Ice/ProxyFactoryF.h +1 -6
  84. data/ext/ice/cpp/include/Ice/ProxyHandle.h +43 -55
  85. data/ext/ice/cpp/include/Ice/ReferenceF.h +1 -6
  86. data/ext/ice/cpp/include/Ice/RegisterPlugins.h +84 -12
  87. data/ext/ice/cpp/include/Ice/RequestHandlerF.h +10 -9
  88. data/ext/ice/cpp/include/Ice/ResponseHandlerF.h +6 -6
  89. data/ext/ice/cpp/include/Ice/SHA1.h +42 -0
  90. data/ext/ice/cpp/include/Ice/ServantManagerF.h +1 -6
  91. data/ext/ice/cpp/include/Ice/Service.h +273 -154
  92. data/ext/ice/cpp/include/Ice/SliceChecksums.h +5 -6
  93. data/ext/ice/cpp/include/Ice/SlicedData.h +121 -53
  94. data/ext/ice/cpp/include/Ice/SlicedDataF.h +17 -11
  95. data/ext/ice/cpp/include/Ice/StreamHelpers.h +453 -140
  96. data/ext/ice/cpp/include/Ice/StringConverter.h +78 -0
  97. data/ext/ice/cpp/include/Ice/ThreadPoolF.h +1 -6
  98. data/ext/ice/cpp/include/Ice/UUID.h +19 -0
  99. data/ext/ice/cpp/include/{IceUtil → Ice}/UniquePtr.h +22 -28
  100. data/ext/ice/cpp/include/Ice/UniqueRef.h +97 -0
  101. data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +45 -13
  102. data/ext/ice/cpp/include/Ice/Value.h +139 -0
  103. data/ext/ice/cpp/include/Ice/ValueF.h +21 -0
  104. data/ext/ice/cpp/include/IceSSL/Config.h +8 -28
  105. data/ext/ice/cpp/include/IceSSL/IceSSL.h +17 -11
  106. data/ext/ice/cpp/include/IceSSL/OpenSSL.h +147 -0
  107. data/ext/ice/cpp/include/IceSSL/Plugin.h +461 -448
  108. data/ext/ice/cpp/include/IceSSL/SChannel.h +72 -0
  109. data/ext/ice/cpp/include/IceSSL/SecureTransport.h +72 -0
  110. data/ext/ice/cpp/include/IceSSL/UWP.h +62 -0
  111. data/ext/ice/cpp/include/IceUtil/Atomic.h +7 -14
  112. data/ext/ice/cpp/include/IceUtil/Cond.h +17 -23
  113. data/ext/ice/cpp/include/IceUtil/Config.h +166 -46
  114. data/ext/ice/cpp/include/IceUtil/ConsoleUtil.h +92 -0
  115. data/ext/ice/cpp/include/IceUtil/CountDownLatch.h +5 -10
  116. data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +63 -41
  117. data/ext/ice/cpp/include/IceUtil/DisableWarnings.h +5 -13
  118. data/ext/ice/cpp/include/IceUtil/Exception.h +284 -75
  119. data/ext/ice/cpp/include/IceUtil/FileUtil.h +143 -0
  120. data/ext/ice/cpp/include/IceUtil/Functional.h +4 -6
  121. data/ext/ice/cpp/include/IceUtil/Handle.h +11 -16
  122. data/ext/ice/cpp/include/IceUtil/IceUtil.h +4 -15
  123. data/ext/ice/cpp/include/IceUtil/InputUtil.h +3 -8
  124. data/ext/ice/cpp/include/IceUtil/Iterator.h +2 -7
  125. data/ext/ice/cpp/include/IceUtil/Lock.h +8 -15
  126. data/ext/ice/cpp/include/IceUtil/Monitor.h +1 -7
  127. data/ext/ice/cpp/include/IceUtil/Mutex.h +19 -23
  128. data/ext/ice/cpp/include/IceUtil/MutexProtocol.h +2 -7
  129. data/ext/ice/cpp/include/IceUtil/MutexPtrLock.h +4 -9
  130. data/ext/ice/cpp/include/IceUtil/MutexPtrTryLock.h +4 -9
  131. data/ext/ice/cpp/include/IceUtil/Optional.h +134 -23
  132. data/ext/ice/cpp/include/IceUtil/Options.h +17 -23
  133. data/ext/ice/cpp/include/IceUtil/OutputUtil.h +61 -37
  134. data/ext/ice/cpp/include/IceUtil/PopDisableWarnings.h +6 -11
  135. data/ext/ice/cpp/include/IceUtil/PushDisableWarnings.h +18 -15
  136. data/ext/ice/cpp/include/IceUtil/Random.h +39 -8
  137. data/ext/ice/cpp/include/IceUtil/RecMutex.h +7 -13
  138. data/ext/ice/cpp/include/IceUtil/ResourceConfig.h +53 -0
  139. data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +10 -15
  140. data/ext/ice/cpp/include/IceUtil/ScopedArray.h +8 -7
  141. data/ext/ice/cpp/include/IceUtil/Shared.h +5 -12
  142. data/ext/ice/cpp/{src → include}/IceUtil/StopWatch.h +2 -7
  143. data/ext/ice/cpp/include/IceUtil/StringConverter.h +146 -126
  144. data/ext/ice/cpp/include/IceUtil/StringUtil.h +32 -26
  145. data/ext/ice/cpp/include/IceUtil/Thread.h +10 -17
  146. data/ext/ice/cpp/include/IceUtil/ThreadException.h +33 -47
  147. data/ext/ice/cpp/include/IceUtil/Time.h +3 -8
  148. data/ext/ice/cpp/include/IceUtil/Timer.h +18 -18
  149. data/ext/ice/cpp/include/IceUtil/UUID.h +6 -7
  150. data/ext/ice/cpp/include/IceUtil/UndefSysMacros.h +1 -6
  151. data/ext/ice/cpp/include/generated/Ice/BuiltinSequences.h +170 -0
  152. data/ext/ice/cpp/include/generated/Ice/Communicator.h +1156 -0
  153. data/ext/ice/cpp/include/{Ice → generated/Ice}/CommunicatorF.h +51 -16
  154. data/ext/ice/cpp/include/generated/Ice/Connection.h +1660 -0
  155. data/ext/ice/cpp/include/generated/Ice/ConnectionF.h +119 -0
  156. data/ext/ice/cpp/include/generated/Ice/Current.h +322 -0
  157. data/ext/ice/cpp/include/generated/Ice/Endpoint.h +943 -0
  158. data/ext/ice/cpp/include/generated/Ice/EndpointF.h +166 -0
  159. data/ext/ice/cpp/include/generated/Ice/EndpointTypes.h +118 -0
  160. data/ext/ice/cpp/include/{Ice → generated/Ice}/FacetMap.h +31 -15
  161. data/ext/ice/cpp/include/generated/Ice/Identity.h +264 -0
  162. data/ext/ice/cpp/include/generated/Ice/ImplicitContext.h +278 -0
  163. data/ext/ice/cpp/include/{Ice → generated/Ice}/ImplicitContextF.h +51 -16
  164. data/ext/ice/cpp/include/generated/Ice/Instrumentation.h +1143 -0
  165. data/ext/ice/cpp/include/generated/Ice/InstrumentationF.h +128 -0
  166. data/ext/ice/cpp/include/generated/Ice/LocalException.h +7041 -0
  167. data/ext/ice/cpp/include/generated/Ice/Locator.h +3850 -0
  168. data/ext/ice/cpp/include/generated/Ice/LocatorF.h +147 -0
  169. data/ext/ice/cpp/include/generated/Ice/Logger.h +231 -0
  170. data/ext/ice/cpp/include/{Ice → generated/Ice}/LoggerF.h +51 -16
  171. data/ext/ice/cpp/include/generated/Ice/Metrics.h +4717 -0
  172. data/ext/ice/cpp/include/generated/Ice/ObjectAdapter.h +1175 -0
  173. data/ext/ice/cpp/include/{Ice → generated/Ice}/ObjectAdapterF.h +51 -16
  174. data/ext/ice/cpp/include/generated/Ice/ObjectFactory.h +197 -0
  175. data/ext/ice/cpp/include/generated/Ice/Plugin.h +306 -0
  176. data/ext/ice/cpp/include/generated/Ice/PluginF.h +110 -0
  177. data/ext/ice/cpp/include/generated/Ice/Process.h +971 -0
  178. data/ext/ice/cpp/include/generated/Ice/ProcessF.h +125 -0
  179. data/ext/ice/cpp/include/generated/Ice/Properties.h +446 -0
  180. data/ext/ice/cpp/include/generated/Ice/PropertiesAdmin.h +1360 -0
  181. data/ext/ice/cpp/include/generated/Ice/PropertiesF.h +134 -0
  182. data/ext/ice/cpp/include/generated/Ice/RemoteLogger.h +2689 -0
  183. data/ext/ice/cpp/include/generated/Ice/Router.h +1838 -0
  184. data/ext/ice/cpp/include/generated/Ice/RouterF.h +125 -0
  185. data/ext/ice/cpp/include/generated/Ice/ServantLocator.h +299 -0
  186. data/ext/ice/cpp/include/{Ice → generated/Ice}/ServantLocatorF.h +51 -16
  187. data/ext/ice/cpp/include/{Ice → generated/Ice}/SliceChecksumDict.h +34 -14
  188. data/ext/ice/cpp/include/generated/Ice/ValueFactory.h +318 -0
  189. data/ext/ice/cpp/include/generated/Ice/Version.h +357 -0
  190. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +223 -0
  191. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +101 -0
  192. data/ext/ice/cpp/include/generated/IceSSL/EndpointInfo.h +181 -0
  193. data/ext/ice/cpp/src/Ice/ACM.cpp +38 -27
  194. data/ext/ice/cpp/src/Ice/ACM.h +9 -7
  195. data/ext/ice/cpp/src/Ice/ACMF.h +30 -0
  196. data/ext/ice/cpp/src/Ice/Acceptor.cpp +6 -6
  197. data/ext/ice/cpp/src/Ice/Acceptor.h +4 -8
  198. data/ext/ice/cpp/src/Ice/AcceptorF.h +1 -6
  199. data/ext/ice/cpp/src/Ice/ArgVector.cpp +59 -0
  200. data/ext/ice/cpp/src/Ice/ArgVector.h +36 -0
  201. data/ext/ice/cpp/src/Ice/AsyncResult.cpp +15 -544
  202. data/ext/ice/cpp/src/Ice/Base64.cpp +22 -28
  203. data/ext/ice/cpp/src/Ice/Base64.h +1 -6
  204. data/ext/ice/cpp/src/Ice/BatchRequestQueue.cpp +41 -18
  205. data/ext/ice/cpp/src/Ice/BatchRequestQueue.h +15 -15
  206. data/ext/ice/cpp/src/Ice/Buffer.cpp +75 -18
  207. data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +21 -12
  208. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +86 -197
  209. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.h +17 -23
  210. data/ext/ice/cpp/src/Ice/Communicator.cpp +43 -15
  211. data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +28 -11
  212. data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +318 -117
  213. data/ext/ice/cpp/src/Ice/CommunicatorI.h +95 -40
  214. data/ext/ice/cpp/src/{IceUtil → Ice}/Cond.cpp +3 -8
  215. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.cpp +55 -122
  216. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.h +15 -31
  217. data/ext/ice/cpp/src/Ice/ConnectRequestHandlerF.h +6 -7
  218. data/ext/ice/cpp/src/Ice/Connection.cpp +111 -20
  219. data/ext/ice/cpp/src/Ice/ConnectionF.cpp +28 -11
  220. data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +300 -107
  221. data/ext/ice/cpp/src/Ice/ConnectionFactory.h +44 -28
  222. data/ext/ice/cpp/src/Ice/ConnectionFactoryF.h +30 -0
  223. data/ext/ice/cpp/src/Ice/ConnectionI.cpp +785 -713
  224. data/ext/ice/cpp/src/Ice/ConnectionI.h +105 -80
  225. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +2 -20
  226. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.h +5 -9
  227. data/ext/ice/cpp/src/Ice/Connector.cpp +6 -6
  228. data/ext/ice/cpp/src/Ice/Connector.h +4 -8
  229. data/ext/ice/cpp/src/Ice/ConnectorF.h +1 -6
  230. data/ext/ice/cpp/src/{IceUtil → Ice}/CountDownLatch.cpp +4 -9
  231. data/ext/ice/cpp/src/Ice/Current.cpp +30 -12
  232. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +10 -16
  233. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.h +1 -6
  234. data/ext/ice/cpp/src/Ice/DefaultsAndOverridesF.h +1 -6
  235. data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +13 -25
  236. data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +34 -28
  237. data/ext/ice/cpp/src/Ice/Endpoint.cpp +107 -19
  238. data/ext/ice/cpp/src/Ice/EndpointF.cpp +28 -11
  239. data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +152 -6
  240. data/ext/ice/cpp/src/Ice/EndpointFactory.h +72 -11
  241. data/ext/ice/cpp/src/Ice/EndpointFactoryF.h +1 -6
  242. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.cpp +41 -36
  243. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.h +10 -9
  244. data/ext/ice/cpp/src/Ice/EndpointFactoryManagerF.h +1 -6
  245. data/ext/ice/cpp/src/Ice/EndpointI.cpp +18 -7
  246. data/ext/ice/cpp/src/Ice/EndpointI.h +39 -18
  247. data/ext/ice/cpp/src/Ice/EndpointIF.h +18 -10
  248. data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +19 -12
  249. data/ext/ice/cpp/src/Ice/EventHandler.cpp +6 -9
  250. data/ext/ice/cpp/src/Ice/EventHandler.h +13 -13
  251. data/ext/ice/cpp/src/Ice/EventHandlerF.h +5 -7
  252. data/ext/ice/cpp/src/Ice/Exception.cpp +102 -98
  253. data/ext/ice/cpp/src/Ice/FacetMap.cpp +21 -12
  254. data/ext/ice/cpp/src/Ice/FactoryTable.cpp +37 -33
  255. data/ext/ice/cpp/src/Ice/FactoryTableInit.cpp +2 -9
  256. data/ext/ice/cpp/src/Ice/GCObject.cpp +29 -31
  257. data/ext/ice/cpp/src/Ice/HashUtil.h +3 -9
  258. data/ext/ice/cpp/src/Ice/HttpParser.cpp +1 -7
  259. data/ext/ice/cpp/src/Ice/HttpParser.h +1 -6
  260. data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +128 -111
  261. data/ext/ice/cpp/src/Ice/IPEndpointI.h +23 -19
  262. data/ext/ice/cpp/src/Ice/IPEndpointIF.h +6 -7
  263. data/ext/ice/cpp/src/Ice/IconvStringConverter.cpp +51 -0
  264. data/ext/ice/cpp/src/Ice/Identity.cpp +25 -16
  265. data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +41 -13
  266. data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +28 -11
  267. data/ext/ice/cpp/src/Ice/ImplicitContextI.cpp +11 -28
  268. data/ext/ice/cpp/src/Ice/ImplicitContextI.h +7 -10
  269. data/ext/ice/cpp/src/Ice/Incoming.cpp +284 -255
  270. data/ext/ice/cpp/src/Ice/IncomingAsync.cpp +104 -214
  271. data/ext/ice/cpp/src/Ice/IncomingRequest.h +5 -9
  272. data/ext/ice/cpp/src/Ice/Initialize.cpp +309 -193
  273. data/ext/ice/cpp/src/Ice/InputStream.cpp +2726 -0
  274. data/ext/ice/cpp/src/Ice/Instance.cpp +243 -262
  275. data/ext/ice/cpp/src/Ice/Instance.h +30 -23
  276. data/ext/ice/cpp/src/Ice/Instrumentation.cpp +137 -23
  277. data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +28 -11
  278. data/ext/ice/cpp/src/Ice/InstrumentationI.cpp +118 -105
  279. data/ext/ice/cpp/src/Ice/InstrumentationI.h +30 -36
  280. data/ext/ice/cpp/src/Ice/LocalException.cpp +1191 -422
  281. data/ext/ice/cpp/src/Ice/LocalObject.cpp +1 -7
  282. data/ext/ice/cpp/src/Ice/Locator.cpp +1282 -1222
  283. data/ext/ice/cpp/src/Ice/LocatorF.cpp +30 -12
  284. data/ext/ice/cpp/src/Ice/LocatorInfo.cpp +150 -186
  285. data/ext/ice/cpp/src/Ice/LocatorInfo.h +31 -36
  286. data/ext/ice/cpp/src/Ice/LocatorInfoF.h +1 -6
  287. data/ext/ice/cpp/src/Ice/Logger.cpp +39 -12
  288. data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +182 -88
  289. data/ext/ice/cpp/src/Ice/LoggerAdminI.h +4 -9
  290. data/ext/ice/cpp/src/Ice/LoggerF.cpp +28 -11
  291. data/ext/ice/cpp/src/Ice/LoggerI.cpp +26 -55
  292. data/ext/ice/cpp/src/Ice/LoggerI.h +7 -18
  293. data/ext/ice/cpp/src/Ice/LoggerUtil.cpp +10 -17
  294. data/ext/ice/cpp/src/Ice/Metrics.cpp +1280 -1107
  295. data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +58 -33
  296. data/ext/ice/cpp/src/Ice/MetricsObserverI.cpp +1 -7
  297. data/ext/ice/cpp/src/Ice/Network.cpp +753 -408
  298. data/ext/ice/cpp/src/Ice/Network.h +99 -36
  299. data/ext/ice/cpp/src/Ice/NetworkF.h +2 -7
  300. data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +20 -19
  301. data/ext/ice/cpp/src/Ice/NetworkProxy.h +5 -7
  302. data/ext/ice/cpp/src/Ice/NetworkProxyF.h +1 -6
  303. data/ext/ice/cpp/src/Ice/OSLogLoggerI.cpp +57 -0
  304. data/ext/ice/cpp/src/Ice/OSLogLoggerI.h +40 -0
  305. data/ext/ice/cpp/src/Ice/Object.cpp +227 -232
  306. data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +45 -13
  307. data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +28 -11
  308. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +83 -33
  309. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.h +13 -12
  310. data/ext/ice/cpp/src/Ice/ObjectAdapterFactoryF.h +25 -0
  311. data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +298 -191
  312. data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +44 -39
  313. data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +41 -13
  314. data/ext/ice/cpp/src/Ice/ObserverHelper.cpp +9 -37
  315. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.cpp +67 -67
  316. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.h +15 -11
  317. data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +801 -366
  318. data/ext/ice/cpp/src/Ice/OutputStream.cpp +1367 -0
  319. data/ext/ice/cpp/src/Ice/Plugin.cpp +52 -14
  320. data/ext/ice/cpp/src/Ice/PluginF.cpp +28 -11
  321. data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +27 -51
  322. data/ext/ice/cpp/src/Ice/PluginManagerI.h +7 -13
  323. data/ext/ice/cpp/src/Ice/Process.cpp +294 -128
  324. data/ext/ice/cpp/src/Ice/ProcessF.cpp +30 -12
  325. data/ext/ice/cpp/src/Ice/Properties.cpp +42 -15
  326. data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +382 -340
  327. data/ext/ice/cpp/src/Ice/PropertiesAdminI.cpp +83 -24
  328. data/ext/ice/cpp/src/Ice/PropertiesAdminI.h +29 -10
  329. data/ext/ice/cpp/src/Ice/PropertiesF.cpp +30 -12
  330. data/ext/ice/cpp/src/Ice/PropertiesI.cpp +46 -57
  331. data/ext/ice/cpp/src/Ice/PropertiesI.h +18 -26
  332. data/ext/ice/cpp/src/Ice/PropertyNames.cpp +112 -19
  333. data/ext/ice/cpp/src/Ice/PropertyNames.h +4 -7
  334. data/ext/ice/cpp/src/Ice/Protocol.cpp +6 -19
  335. data/ext/ice/cpp/src/Ice/ProtocolInstance.cpp +37 -7
  336. data/ext/ice/cpp/src/Ice/ProtocolInstance.h +9 -25
  337. data/ext/ice/cpp/src/Ice/ProtocolInstanceF.h +1 -6
  338. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +6 -6
  339. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.h +3 -6
  340. data/ext/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +1 -6
  341. data/ext/ice/cpp/src/Ice/Proxy.cpp +729 -957
  342. data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +33 -38
  343. data/ext/ice/cpp/src/Ice/ProxyFactory.h +16 -16
  344. data/ext/ice/cpp/src/Ice/Reference.cpp +190 -106
  345. data/ext/ice/cpp/src/Ice/Reference.h +39 -28
  346. data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +69 -118
  347. data/ext/ice/cpp/src/Ice/ReferenceFactory.h +12 -17
  348. data/ext/ice/cpp/src/Ice/ReferenceFactoryF.h +1 -6
  349. data/ext/ice/cpp/src/Ice/RegisterPluginsInit.cpp +19 -9
  350. data/ext/ice/cpp/src/Ice/RegisterPluginsInit.h +1 -6
  351. data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +766 -565
  352. data/ext/ice/cpp/src/Ice/ReplyStatus.h +1 -6
  353. data/ext/ice/cpp/src/Ice/RequestHandler.cpp +5 -8
  354. data/ext/ice/cpp/src/Ice/RequestHandler.h +10 -18
  355. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.cpp +10 -11
  356. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.h +2 -7
  357. data/ext/ice/cpp/src/Ice/ResponseHandler.cpp +3 -11
  358. data/ext/ice/cpp/src/Ice/ResponseHandler.h +16 -12
  359. data/ext/ice/cpp/src/Ice/RetryQueue.cpp +12 -20
  360. data/ext/ice/cpp/src/Ice/RetryQueue.h +7 -11
  361. data/ext/ice/cpp/src/Ice/RetryQueueF.h +1 -6
  362. data/ext/ice/cpp/src/Ice/Router.cpp +614 -492
  363. data/ext/ice/cpp/src/Ice/RouterF.cpp +30 -12
  364. data/ext/ice/cpp/src/Ice/RouterInfo.cpp +93 -99
  365. data/ext/ice/cpp/src/Ice/RouterInfo.h +42 -38
  366. data/ext/ice/cpp/src/Ice/RouterInfoF.h +1 -6
  367. data/ext/ice/cpp/src/{IceUtil → Ice}/SHA1.cpp +23 -28
  368. data/ext/ice/cpp/src/Ice/Selector.cpp +948 -855
  369. data/ext/ice/cpp/src/Ice/Selector.h +100 -152
  370. data/ext/ice/cpp/src/Ice/ServantLocator.cpp +41 -13
  371. data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +28 -11
  372. data/ext/ice/cpp/src/Ice/ServantManager.cpp +24 -45
  373. data/ext/ice/cpp/src/Ice/ServantManager.h +1 -6
  374. data/ext/ice/cpp/src/Ice/SharedContext.h +2 -7
  375. data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +21 -12
  376. data/ext/ice/cpp/src/Ice/SliceChecksums.cpp +2 -7
  377. data/ext/ice/cpp/src/Ice/SlicedData.cpp +72 -25
  378. data/ext/ice/cpp/src/Ice/StreamSocket.cpp +208 -76
  379. data/ext/ice/cpp/src/Ice/StreamSocket.h +13 -9
  380. data/ext/ice/cpp/src/Ice/StringConverterPlugin.cpp +57 -22
  381. data/ext/ice/cpp/src/Ice/StringUtil.h +30 -0
  382. data/ext/ice/cpp/src/Ice/SysLoggerI.cpp +6 -7
  383. data/ext/ice/cpp/src/Ice/SysLoggerI.h +2 -8
  384. data/ext/ice/cpp/src/Ice/SystemdJournalI.cpp +66 -0
  385. data/ext/ice/cpp/src/Ice/SystemdJournalI.h +39 -0
  386. data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +169 -49
  387. data/ext/ice/cpp/src/Ice/TcpAcceptor.h +12 -10
  388. data/ext/ice/cpp/src/Ice/TcpConnector.cpp +6 -12
  389. data/ext/ice/cpp/src/Ice/TcpConnector.h +1 -7
  390. data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +51 -46
  391. data/ext/ice/cpp/src/Ice/TcpEndpointI.h +12 -14
  392. data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +17 -32
  393. data/ext/ice/cpp/src/Ice/TcpTransceiver.h +7 -15
  394. data/ext/ice/cpp/src/{IceUtil → Ice}/Thread.cpp +41 -54
  395. data/ext/ice/cpp/src/Ice/ThreadPool.cpp +242 -274
  396. data/ext/ice/cpp/src/Ice/ThreadPool.h +46 -48
  397. data/ext/ice/cpp/src/{IceUtil → Ice}/Timer.cpp +38 -26
  398. data/ext/ice/cpp/src/Ice/TraceLevels.cpp +2 -7
  399. data/ext/ice/cpp/src/Ice/TraceLevels.h +1 -6
  400. data/ext/ice/cpp/src/Ice/TraceLevelsF.h +2 -7
  401. data/ext/ice/cpp/src/Ice/TraceUtil.cpp +53 -36
  402. data/ext/ice/cpp/src/Ice/TraceUtil.h +13 -11
  403. data/ext/ice/cpp/src/Ice/Transceiver.cpp +1 -7
  404. data/ext/ice/cpp/src/Ice/Transceiver.h +8 -12
  405. data/ext/ice/cpp/src/Ice/TransceiverF.h +3 -8
  406. data/ext/ice/cpp/src/Ice/UdpConnector.cpp +5 -13
  407. data/ext/ice/cpp/src/Ice/UdpConnector.h +1 -7
  408. data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +118 -60
  409. data/ext/ice/cpp/src/Ice/UdpEndpointI.h +13 -10
  410. data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +177 -236
  411. data/ext/ice/cpp/src/Ice/UdpTransceiver.h +15 -22
  412. data/ext/ice/cpp/src/Ice/Value.cpp +76 -0
  413. data/ext/ice/cpp/src/Ice/ValueFactory.cpp +83 -0
  414. data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.cpp +61 -0
  415. data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.h +37 -0
  416. data/ext/ice/cpp/src/Ice/Version.cpp +25 -20
  417. data/ext/ice/cpp/src/Ice/VirtualShared.h +38 -0
  418. data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +3 -14
  419. data/ext/ice/cpp/src/Ice/WSAcceptor.h +3 -12
  420. data/ext/ice/cpp/src/Ice/WSConnector.cpp +5 -16
  421. data/ext/ice/cpp/src/Ice/WSConnector.h +3 -11
  422. data/ext/ice/cpp/src/Ice/WSEndpoint.cpp +188 -89
  423. data/ext/ice/cpp/src/Ice/WSEndpoint.h +22 -37
  424. data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +65 -66
  425. data/ext/ice/cpp/src/Ice/WSTransceiver.h +7 -27
  426. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +596 -281
  427. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +1383 -543
  428. data/ext/ice/cpp/src/IceDiscovery/LocatorI.cpp +89 -32
  429. data/ext/ice/cpp/src/IceDiscovery/LocatorI.h +59 -28
  430. data/ext/ice/cpp/src/IceDiscovery/LookupI.cpp +315 -66
  431. data/ext/ice/cpp/src/IceDiscovery/LookupI.h +83 -41
  432. data/ext/ice/cpp/src/IceDiscovery/PluginI.cpp +57 -64
  433. data/ext/ice/cpp/src/IceDiscovery/PluginI.h +3 -8
  434. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.cpp +450 -172
  435. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.h +863 -406
  436. data/ext/ice/cpp/src/IceLocatorDiscovery/Plugin.h +47 -0
  437. data/ext/ice/cpp/src/IceLocatorDiscovery/PluginI.cpp +636 -144
  438. data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +20 -173
  439. data/ext/ice/cpp/src/IceSSL/AcceptorI.h +8 -22
  440. data/ext/ice/cpp/src/IceSSL/CertificateI.cpp +279 -0
  441. data/ext/ice/cpp/src/IceSSL/CertificateI.h +64 -0
  442. data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +42 -17
  443. data/ext/ice/cpp/src/IceSSL/ConnectionInfoF.cpp +61 -0
  444. data/ext/ice/cpp/src/IceSSL/ConnectorI.cpp +15 -64
  445. data/ext/ice/cpp/src/IceSSL/ConnectorI.h +6 -18
  446. data/ext/ice/cpp/src/IceSSL/EndpointI.cpp +207 -204
  447. data/ext/ice/cpp/src/IceSSL/EndpointI.h +43 -40
  448. data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +42 -16
  449. data/ext/ice/cpp/src/IceSSL/Instance.cpp +1 -11
  450. data/ext/ice/cpp/src/IceSSL/Instance.h +7 -12
  451. data/ext/ice/cpp/src/IceSSL/InstanceF.h +11 -12
  452. data/ext/ice/cpp/src/IceSSL/OpenSSLCertificateI.cpp +583 -0
  453. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +134 -115
  454. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.h +59 -0
  455. data/ext/ice/cpp/src/IceSSL/OpenSSLEngineF.h +27 -0
  456. data/ext/ice/cpp/src/IceSSL/OpenSSLPluginI.cpp +127 -0
  457. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +477 -182
  458. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +32 -26
  459. data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.cpp +286 -0
  460. data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.h +58 -0
  461. data/ext/ice/cpp/src/IceSSL/PluginI.cpp +71 -46
  462. data/ext/ice/cpp/src/IceSSL/PluginI.h +13 -23
  463. data/ext/ice/cpp/src/IceSSL/RFC2253.cpp +9 -60
  464. data/ext/ice/cpp/src/IceSSL/RFC2253.h +7 -12
  465. data/ext/ice/cpp/src/IceSSL/SChannelCertificateI.cpp +580 -0
  466. data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +523 -74
  467. data/ext/ice/cpp/src/IceSSL/SChannelEngine.h +123 -0
  468. data/ext/ice/cpp/src/IceSSL/SChannelEngineF.h +31 -0
  469. data/ext/ice/cpp/src/IceSSL/SChannelPluginI.cpp +73 -0
  470. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +187 -221
  471. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.h +24 -26
  472. data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +97 -94
  473. data/ext/ice/cpp/src/IceSSL/SSLEngine.h +26 -192
  474. data/ext/ice/cpp/src/IceSSL/SSLEngineF.h +4 -24
  475. data/ext/ice/cpp/src/IceSSL/SecureTransportCertificateI.cpp +868 -0
  476. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +69 -201
  477. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.h +59 -0
  478. data/ext/ice/cpp/src/IceSSL/SecureTransportEngineF.h +29 -0
  479. data/ext/ice/cpp/src/IceSSL/SecureTransportPluginI.cpp +75 -0
  480. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +174 -161
  481. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +29 -33
  482. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +864 -0
  483. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.h +45 -0
  484. data/ext/ice/cpp/src/IceSSL/TrustManager.cpp +12 -22
  485. data/ext/ice/cpp/src/IceSSL/TrustManager.h +4 -9
  486. data/ext/ice/cpp/src/IceSSL/TrustManagerF.h +3 -8
  487. data/ext/ice/cpp/src/IceSSL/UWPCertificateI.cpp +266 -0
  488. data/ext/ice/cpp/src/IceSSL/UWPEngine.cpp +338 -0
  489. data/ext/ice/cpp/src/IceSSL/UWPEngine.h +41 -0
  490. data/ext/ice/cpp/src/IceSSL/UWPEngineF.h +26 -0
  491. data/ext/ice/cpp/src/IceSSL/UWPPluginI.cpp +89 -0
  492. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.cpp +383 -0
  493. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.h +71 -0
  494. data/ext/ice/cpp/src/IceSSL/Util.cpp +71 -1260
  495. data/ext/ice/cpp/src/IceSSL/Util.h +48 -142
  496. data/ext/ice/cpp/src/IceUtil/ConsoleUtil.cpp +157 -0
  497. data/ext/ice/cpp/src/IceUtil/ConvertUTF.cpp +22 -27
  498. data/ext/ice/cpp/src/IceUtil/ConvertUTF.h +34 -31
  499. data/ext/ice/cpp/src/IceUtil/CtrlCHandler.cpp +22 -36
  500. data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +30 -126
  501. data/ext/ice/cpp/src/IceUtil/InputUtil.cpp +1 -6
  502. data/ext/ice/cpp/src/IceUtil/MutexProtocol.cpp +1 -6
  503. data/ext/ice/cpp/src/IceUtil/Options.cpp +20 -33
  504. data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +47 -21
  505. data/ext/ice/cpp/src/IceUtil/Random.cpp +15 -20
  506. data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +4 -19
  507. data/ext/ice/cpp/src/IceUtil/Shared.cpp +8 -8
  508. data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +501 -269
  509. data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +582 -244
  510. data/ext/ice/cpp/src/IceUtil/ThreadException.cpp +37 -79
  511. data/ext/ice/cpp/src/IceUtil/Time.cpp +6 -11
  512. data/ext/ice/cpp/src/IceUtil/UUID.cpp +17 -22
  513. data/ext/ice/cpp/src/IceUtil/Unicode.cpp +97 -101
  514. data/ext/ice/cpp/src/IceUtil/Unicode.h +21 -40
  515. data/ext/ice/cpp/src/IceUtil/UtilException.cpp +839 -0
  516. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +894 -234
  517. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.h +72 -0
  518. data/ext/ice/cpp/src/Slice/Checksum.cpp +2 -7
  519. data/ext/ice/cpp/src/Slice/Checksum.h +21 -0
  520. data/ext/ice/cpp/src/Slice/FileTracker.cpp +25 -83
  521. data/ext/ice/cpp/{include → src}/Slice/FileTracker.h +9 -14
  522. data/ext/ice/cpp/src/Slice/Grammar.cpp +1981 -1944
  523. data/ext/ice/cpp/src/Slice/Grammar.h +39 -19
  524. data/ext/ice/cpp/src/Slice/GrammarUtil.h +14 -20
  525. data/ext/ice/cpp/src/Slice/JavaUtil.cpp +2752 -1948
  526. data/ext/ice/cpp/src/Slice/JavaUtil.h +398 -0
  527. data/ext/ice/cpp/src/Slice/MD5.cpp +1 -6
  528. data/ext/ice/cpp/src/Slice/MD5.h +1 -6
  529. data/ext/ice/cpp/src/Slice/MD5I.cpp +8 -1
  530. data/ext/ice/cpp/src/Slice/MD5I.h +1 -1
  531. data/ext/ice/cpp/src/Slice/PHPUtil.cpp +17 -20
  532. data/ext/ice/cpp/src/Slice/PHPUtil.h +36 -0
  533. data/ext/ice/cpp/src/Slice/Parser.cpp +1190 -426
  534. data/ext/ice/cpp/{include → src}/Slice/Parser.h +143 -91
  535. data/ext/ice/cpp/src/Slice/Preprocessor.cpp +67 -36
  536. data/ext/ice/cpp/{include → src}/Slice/Preprocessor.h +8 -18
  537. data/ext/ice/cpp/src/Slice/Python.cpp +218 -111
  538. data/ext/ice/cpp/src/Slice/PythonUtil.cpp +787 -699
  539. data/ext/ice/cpp/src/Slice/PythonUtil.h +70 -0
  540. data/ext/ice/cpp/src/Slice/Ruby.cpp +42 -43
  541. data/ext/ice/cpp/src/Slice/RubyUtil.cpp +175 -445
  542. data/ext/ice/cpp/{include → src}/Slice/RubyUtil.h +6 -11
  543. data/ext/ice/cpp/src/Slice/Scanner.cpp +390 -399
  544. data/ext/ice/cpp/src/Slice/{Util.cpp → SliceUtil.cpp} +36 -69
  545. data/ext/ice/cpp/src/Slice/StringLiteralUtil.cpp +456 -0
  546. data/ext/ice/cpp/src/Slice/Util.h +50 -0
  547. data/ice.gemspec +2 -9
  548. data/lib/Glacier2.rb +1 -6
  549. data/lib/Glacier2/Metrics.rb +6 -50
  550. data/lib/Glacier2/PermissionsVerifier.rb +23 -99
  551. data/lib/Glacier2/PermissionsVerifierF.rb +2 -7
  552. data/lib/Glacier2/Router.rb +31 -78
  553. data/lib/Glacier2/RouterF.rb +2 -7
  554. data/lib/Glacier2/SSLInfo.rb +3 -11
  555. data/lib/Glacier2/Session.rb +87 -311
  556. data/lib/Ice.rb +84 -58
  557. data/lib/Ice/BuiltinSequences.rb +3 -8
  558. data/lib/Ice/Communicator.rb +54 -61
  559. data/lib/Ice/CommunicatorF.rb +2 -7
  560. data/lib/Ice/Connection.rb +152 -166
  561. data/lib/Ice/ConnectionF.rb +2 -7
  562. data/lib/Ice/Current.rb +3 -15
  563. data/lib/Ice/Endpoint.rb +56 -137
  564. data/lib/Ice/EndpointF.rb +2 -7
  565. data/lib/Ice/EndpointTypes.rb +2 -11
  566. data/lib/Ice/FacetMap.rb +3 -8
  567. data/lib/Ice/Identity.rb +4 -12
  568. data/lib/Ice/ImplicitContext.rb +4 -38
  569. data/lib/Ice/ImplicitContextF.rb +2 -7
  570. data/lib/Ice/Instrumentation.rb +22 -279
  571. data/lib/Ice/InstrumentationF.rb +2 -7
  572. data/lib/Ice/LocalException.rb +94 -145
  573. data/lib/Ice/Locator.rb +50 -169
  574. data/lib/Ice/LocatorF.rb +2 -7
  575. data/lib/Ice/Logger.rb +4 -38
  576. data/lib/Ice/LoggerF.rb +2 -7
  577. data/lib/Ice/Metrics.rb +60 -420
  578. data/lib/Ice/ObjectAdapter.rb +29 -0
  579. data/lib/Ice/ObjectAdapterF.rb +2 -7
  580. data/lib/Ice/ObjectFactory.rb +4 -34
  581. data/lib/Ice/Plugin.rb +6 -64
  582. data/lib/Ice/PluginF.rb +2 -7
  583. data/lib/Ice/Process.rb +15 -56
  584. data/lib/Ice/ProcessF.rb +2 -7
  585. data/lib/Ice/Properties.rb +4 -45
  586. data/lib/Ice/PropertiesAdmin.rb +18 -60
  587. data/lib/Ice/PropertiesF.rb +2 -7
  588. data/lib/Ice/RemoteLogger.rb +33 -119
  589. data/lib/Ice/Router.rb +28 -105
  590. data/lib/Ice/RouterF.rb +2 -7
  591. data/lib/Ice/ServantLocator.rb +26 -0
  592. data/lib/Ice/ServantLocatorF.rb +24 -0
  593. data/lib/Ice/SliceChecksumDict.rb +2 -7
  594. data/lib/Ice/ValueFactory.rb +28 -0
  595. data/lib/Ice/Version.rb +4 -15
  596. data/lib/IceBox.rb +1 -6
  597. data/lib/IceBox/IceBox.rb +43 -152
  598. data/lib/IceGrid.rb +1 -9
  599. data/lib/IceGrid/Admin.rb +550 -431
  600. data/lib/IceGrid/Descriptor.rb +61 -533
  601. data/lib/IceGrid/Exception.rb +23 -49
  602. data/lib/IceGrid/FileParser.rb +13 -54
  603. data/lib/IceGrid/PluginFacade.rb +35 -0
  604. data/lib/IceGrid/Registry.rb +150 -62
  605. data/lib/IceGrid/Session.rb +24 -68
  606. data/lib/IceGrid/UserAccountMapper.rb +13 -54
  607. data/lib/IcePatch2.rb +1 -6
  608. data/lib/IcePatch2/FileInfo.rb +4 -15
  609. data/lib/IcePatch2/FileServer.rb +32 -80
  610. data/lib/IceStorm.rb +1 -6
  611. data/lib/IceStorm/IceStorm.rb +78 -210
  612. data/lib/IceStorm/Metrics.rb +10 -93
  613. data/slice/Glacier2/Metrics.ice +20 -10
  614. data/slice/Glacier2/PermissionsVerifier.ice +19 -12
  615. data/slice/Glacier2/PermissionsVerifierF.ice +16 -9
  616. data/slice/Glacier2/Router.ice +19 -13
  617. data/slice/Glacier2/RouterF.ice +16 -9
  618. data/slice/Glacier2/SSLInfo.ice +17 -10
  619. data/slice/Glacier2/Session.ice +24 -18
  620. data/slice/Ice/BuiltinSequences.ice +18 -9
  621. data/slice/Ice/Communicator.ice +180 -64
  622. data/slice/Ice/CommunicatorF.ice +18 -9
  623. data/slice/Ice/Connection.ice +208 -75
  624. data/slice/Ice/ConnectionF.ice +18 -9
  625. data/slice/Ice/Current.ice +37 -28
  626. data/slice/Ice/Endpoint.ice +73 -21
  627. data/slice/Ice/EndpointF.ice +19 -10
  628. data/slice/Ice/EndpointTypes.ice +21 -13
  629. data/slice/Ice/FacetMap.ice +19 -10
  630. data/slice/Ice/Identity.ice +24 -10
  631. data/slice/Ice/ImplicitContext.ice +41 -33
  632. data/slice/Ice/ImplicitContextF.ice +17 -9
  633. data/slice/Ice/Instrumentation.ice +37 -30
  634. data/slice/Ice/InstrumentationF.ice +19 -10
  635. data/slice/Ice/LocalException.ice +118 -112
  636. data/slice/Ice/Locator.ice +28 -21
  637. data/slice/Ice/LocatorF.ice +18 -9
  638. data/slice/Ice/Logger.ice +26 -18
  639. data/slice/Ice/LoggerF.ice +18 -9
  640. data/slice/Ice/Metrics.ice +42 -30
  641. data/slice/Ice/ObjectAdapter.ice +88 -53
  642. data/slice/Ice/ObjectAdapterF.ice +18 -9
  643. data/slice/Ice/ObjectFactory.ice +28 -17
  644. data/slice/Ice/Plugin.ice +25 -13
  645. data/slice/Ice/PluginF.ice +22 -9
  646. data/slice/Ice/Process.ice +20 -11
  647. data/slice/Ice/ProcessF.ice +18 -9
  648. data/slice/Ice/Properties.ice +42 -28
  649. data/slice/Ice/PropertiesAdmin.ice +20 -10
  650. data/slice/Ice/PropertiesF.ice +18 -9
  651. data/slice/Ice/RemoteLogger.ice +23 -19
  652. data/slice/Ice/Router.ice +28 -13
  653. data/slice/Ice/RouterF.ice +18 -9
  654. data/slice/Ice/ServantLocator.ice +40 -29
  655. data/slice/Ice/ServantLocatorF.ice +18 -9
  656. data/slice/Ice/SliceChecksumDict.ice +18 -9
  657. data/slice/Ice/ValueFactory.ice +132 -0
  658. data/slice/Ice/Version.ice +20 -10
  659. data/slice/IceBT/ConnectionInfo.ice +58 -0
  660. data/slice/IceBT/EndpointInfo.ice +56 -0
  661. data/slice/IceBT/Types.ice +44 -0
  662. data/slice/IceBox/IceBox.ice +45 -27
  663. data/slice/IceDiscovery/IceDiscovery.ice +75 -10
  664. data/slice/IceGrid/Admin.ice +410 -44
  665. data/slice/IceGrid/Descriptor.ice +47 -34
  666. data/slice/IceGrid/Exception.ice +43 -32
  667. data/slice/IceGrid/FileParser.ice +21 -12
  668. data/slice/IceGrid/PluginFacade.ice +26 -18
  669. data/slice/IceGrid/Registry.ice +150 -21
  670. data/slice/IceGrid/Session.ice +25 -17
  671. data/slice/IceGrid/UserAccountMapper.ice +23 -14
  672. data/slice/IceIAP/ConnectionInfo.ice +73 -0
  673. data/slice/IceIAP/EndpointInfo.ice +67 -0
  674. data/slice/IceLocatorDiscovery/IceLocatorDiscovery.ice +19 -12
  675. data/slice/IcePatch2/FileInfo.ice +19 -13
  676. data/slice/IcePatch2/FileServer.ice +27 -18
  677. data/slice/IceSSL/ConnectionInfo.ice +27 -23
  678. data/slice/IceSSL/ConnectionInfoF.ice +30 -0
  679. data/slice/IceSSL/EndpointInfo.ice +21 -36
  680. data/slice/IceStorm/IceStorm.ice +33 -24
  681. data/slice/IceStorm/Metrics.ice +19 -11
  682. metadata +148 -120
  683. data/ext/ObjectFactory.cpp +0 -140
  684. data/ext/ObjectFactory.h +0 -50
  685. data/ext/ice/cpp/include/Ice/ACMF.h +0 -30
  686. data/ext/ice/cpp/include/Ice/BasicStream.h +0 -1335
  687. data/ext/ice/cpp/include/Ice/BuiltinSequences.h +0 -82
  688. data/ext/ice/cpp/include/Ice/Communicator.h +0 -200
  689. data/ext/ice/cpp/include/Ice/Connection.h +0 -497
  690. data/ext/ice/cpp/include/Ice/ConnectionF.h +0 -74
  691. data/ext/ice/cpp/include/Ice/ConnectionFactoryF.h +0 -30
  692. data/ext/ice/cpp/include/Ice/Current.h +0 -102
  693. data/ext/ice/cpp/include/Ice/DefaultObjectFactory.h +0 -48
  694. data/ext/ice/cpp/include/Ice/DeprecatedStringConverter.h +0 -62
  695. data/ext/ice/cpp/include/Ice/Endpoint.h +0 -341
  696. data/ext/ice/cpp/include/Ice/EndpointF.h +0 -93
  697. data/ext/ice/cpp/include/Ice/EndpointTypes.h +0 -82
  698. data/ext/ice/cpp/include/Ice/Identity.h +0 -168
  699. data/ext/ice/cpp/include/Ice/ImplicitContext.h +0 -102
  700. data/ext/ice/cpp/include/Ice/Instrumentation.h +0 -365
  701. data/ext/ice/cpp/include/Ice/InstrumentationF.h +0 -75
  702. data/ext/ice/cpp/include/Ice/LocalException.h +0 -1030
  703. data/ext/ice/cpp/include/Ice/Locator.h +0 -2193
  704. data/ext/ice/cpp/include/Ice/LocatorF.h +0 -93
  705. data/ext/ice/cpp/include/Ice/Logger.h +0 -100
  706. data/ext/ice/cpp/include/Ice/Metrics.h +0 -2974
  707. data/ext/ice/cpp/include/Ice/ObjectAdapter.h +0 -168
  708. data/ext/ice/cpp/include/Ice/ObjectAdapterFactoryF.h +0 -26
  709. data/ext/ice/cpp/include/Ice/ObjectFactory.h +0 -92
  710. data/ext/ice/cpp/include/Ice/ObjectFactoryF.h +0 -66
  711. data/ext/ice/cpp/include/Ice/ObjectFactoryManagerF.h +0 -26
  712. data/ext/ice/cpp/include/Ice/Outgoing.h +0 -225
  713. data/ext/ice/cpp/include/Ice/Plugin.h +0 -125
  714. data/ext/ice/cpp/include/Ice/PluginF.h +0 -70
  715. data/ext/ice/cpp/include/Ice/Process.h +0 -574
  716. data/ext/ice/cpp/include/Ice/ProcessF.h +0 -83
  717. data/ext/ice/cpp/include/Ice/Properties.h +0 -136
  718. data/ext/ice/cpp/include/Ice/PropertiesAdmin.h +0 -830
  719. data/ext/ice/cpp/include/Ice/PropertiesF.h +0 -87
  720. data/ext/ice/cpp/include/Ice/RemoteLogger.h +0 -1500
  721. data/ext/ice/cpp/include/Ice/Router.h +0 -1159
  722. data/ext/ice/cpp/include/Ice/RouterF.h +0 -83
  723. data/ext/ice/cpp/include/Ice/ServantLocator.h +0 -96
  724. data/ext/ice/cpp/include/Ice/Stream.h +0 -447
  725. data/ext/ice/cpp/include/Ice/StreamF.h +0 -30
  726. data/ext/ice/cpp/include/Ice/Version.h +0 -262
  727. data/ext/ice/cpp/include/IceSSL/ConnectionInfo.h +0 -158
  728. data/ext/ice/cpp/include/IceSSL/EndpointInfo.h +0 -142
  729. data/ext/ice/cpp/include/IceUtil/AbstractMutex.h +0 -119
  730. data/ext/ice/cpp/include/IceUtil/Cache.h +0 -362
  731. data/ext/ice/cpp/include/IceUtil/IconvStringConverter.h +0 -302
  732. data/ext/ice/cpp/include/IceUtil/SHA1.h +0 -47
  733. data/ext/ice/cpp/include/Slice/CPlusPlusUtil.h +0 -65
  734. data/ext/ice/cpp/include/Slice/Checksum.h +0 -26
  735. data/ext/ice/cpp/include/Slice/CsUtil.h +0 -92
  736. data/ext/ice/cpp/include/Slice/DotNetNames.h +0 -34
  737. data/ext/ice/cpp/include/Slice/JavaUtil.h +0 -279
  738. data/ext/ice/cpp/include/Slice/ObjCUtil.h +0 -127
  739. data/ext/ice/cpp/include/Slice/PHPUtil.h +0 -50
  740. data/ext/ice/cpp/include/Slice/PythonUtil.h +0 -64
  741. data/ext/ice/cpp/include/Slice/Util.h +0 -56
  742. data/ext/ice/cpp/src/Ice/BasicStream.cpp +0 -3428
  743. data/ext/ice/cpp/src/Ice/DeprecatedStringConverter.cpp +0 -62
  744. data/ext/ice/cpp/src/Ice/ObjectFactoryF.cpp +0 -44
  745. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.cpp +0 -139
  746. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.h +0 -43
  747. data/ext/ice/cpp/src/Ice/Outgoing.cpp +0 -694
  748. data/ext/ice/cpp/src/Ice/Stream.cpp +0 -53
  749. data/ext/ice/cpp/src/Ice/StreamI.cpp +0 -832
  750. data/ext/ice/cpp/src/Ice/StreamI.h +0 -198
  751. data/ext/ice/cpp/src/IceSSL/Certificate.cpp +0 -1336
  752. data/ext/ice/cpp/src/IceUtil/ArgVector.cpp +0 -64
  753. data/ext/ice/cpp/src/IceUtil/ArgVector.h +0 -41
  754. data/ext/ice/cpp/src/IceUtil/Exception.cpp +0 -792
  755. data/ext/ice/cpp/src/IceUtil/FileUtil.h +0 -185
  756. data/ext/ice/cpp/src/Slice/CsUtil.cpp +0 -2660
  757. data/ext/ice/cpp/src/Slice/DotNetNames.cpp +0 -146
  758. data/ext/ice/cpp/src/Slice/ObjCUtil.cpp +0 -1310
  759. data/lib/Ice/ObjectFactoryF.rb +0 -29
  760. data/lib/IceGrid/Locator.rb +0 -106
  761. data/lib/IceGrid/Observer.rb +0 -572
  762. data/lib/IceGrid/Query.rb +0 -169
  763. data/slice/Freeze/BackgroundSaveEvictor.ice +0 -111
  764. data/slice/Freeze/CatalogData.ice +0 -49
  765. data/slice/Freeze/Connection.ice +0 -121
  766. data/slice/Freeze/ConnectionF.ice +0 -20
  767. data/slice/Freeze/DB.ice +0 -37
  768. data/slice/Freeze/Evictor.ice +0 -346
  769. data/slice/Freeze/EvictorF.ice +0 -22
  770. data/slice/Freeze/EvictorStorage.ice +0 -72
  771. data/slice/Freeze/Exception.ice +0 -100
  772. data/slice/Freeze/Transaction.ice +0 -58
  773. data/slice/Freeze/TransactionalEvictor.ice +0 -50
  774. data/slice/Ice/ObjectFactoryF.ice +0 -21
  775. data/slice/IceGrid/Locator.ice +0 -57
  776. data/slice/IceGrid/Observer.ice +0 -395
  777. data/slice/IceGrid/Query.ice +0 -131
@@ -1,11 +1,6 @@
1
- // **********************************************************************
2
1
  //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
2
+ // Copyright (c) ZeroC, Inc. All rights reserved.
4
3
  //
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
4
 
10
5
  #include <Slice/CPlusPlusUtil.h>
11
6
  #include <Slice/Util.h>
@@ -43,19 +38,31 @@ string toTemplateArg(const string& arg)
43
38
  }
44
39
 
45
40
  string
46
- stringTypeToString(const TypePtr& type, const StringList& metaData, int typeCtx)
41
+ toOptional(const string& s, int typeCtx)
42
+ {
43
+ bool cpp11 = (typeCtx & TypeContextCpp11) != 0;
44
+ string result = cpp11 ? "Ice::optional" : "IceUtil::Optional";
45
+ result += '<';
46
+ if(cpp11)
47
+ {
48
+ result += s;
49
+ }
50
+ else
51
+ {
52
+ result += toTemplateArg(s);
53
+ }
54
+
55
+ result += '>';
56
+ return result;
57
+ }
58
+
59
+ string
60
+ stringTypeToString(const TypePtr&, const StringList& metaData, int typeCtx)
47
61
  {
48
62
  string strType = findMetaData(metaData, typeCtx);
49
63
  if(strType == "wstring" || (typeCtx & TypeContextUseWstring && strType == ""))
50
64
  {
51
- if(featureProfile == IceE)
52
- {
53
- return "::Ice::Wstring";
54
- }
55
- else
56
- {
57
- return "::std::wstring";
58
- }
65
+ return "::std::wstring";
59
66
  }
60
67
  else if(strType != "" && strType != "string")
61
68
  {
@@ -68,7 +75,7 @@ stringTypeToString(const TypePtr& type, const StringList& metaData, int typeCtx)
68
75
  }
69
76
 
70
77
  string
71
- sequenceTypeToString(const SequencePtr& seq, const StringList& metaData, int typeCtx)
78
+ sequenceTypeToString(const SequencePtr& seq, const string& scope, const StringList& metaData, int typeCtx)
72
79
  {
73
80
  string seqType = findMetaData(metaData, typeCtx);
74
81
  if(!seqType.empty())
@@ -80,7 +87,7 @@ sequenceTypeToString(const SequencePtr& seq, const StringList& metaData, int typ
80
87
  {
81
88
  if(builtin && builtin->kind() == Builtin::KindByte)
82
89
  {
83
- string s = typeToString(seq->type());
90
+ string s = typeToString(seq->type(), scope);
84
91
  return "::std::pair<const " + s + "*, const " + s + "*>";
85
92
  }
86
93
  else if(builtin &&
@@ -88,18 +95,19 @@ sequenceTypeToString(const SequencePtr& seq, const StringList& metaData, int typ
88
95
  builtin->kind() != Builtin::KindObject &&
89
96
  builtin->kind() != Builtin::KindObjectProxy)
90
97
  {
91
- string s = toTemplateArg(typeToString(builtin));
98
+ string s = toTemplateArg(typeToString(builtin, scope));
92
99
  return "::std::pair< ::IceUtil::ScopedArray<" + s + ">, " +
93
100
  "::std::pair<const " + s + "*, const " + s + "*> >";
94
101
  }
95
102
  else
96
103
  {
97
- string s = toTemplateArg(typeToString(seq->type(), seq->typeMetaData(),
104
+ string s = toTemplateArg(typeToString(seq->type(), scope, seq->typeMetaData(),
98
105
  inWstringModule(seq) ? TypeContextUseWstring : 0));
99
106
  return "::std::vector<" + s + '>';
100
107
  }
101
108
  }
102
- string s = typeToString(seq->type(), seq->typeMetaData(), inWstringModule(seq) ? TypeContextUseWstring : 0);
109
+ string s = typeToString(seq->type(), scope, seq->typeMetaData(),
110
+ typeCtx | (inWstringModule(seq) ? TypeContextUseWstring : 0));
103
111
  return "::std::pair<const " + s + "*, const " + s + "*>";
104
112
  }
105
113
  else if(seqType.find("%range") == 0)
@@ -111,12 +119,14 @@ sequenceTypeToString(const SequencePtr& seq, const StringList& metaData, int typ
111
119
  }
112
120
  else
113
121
  {
114
- s = fixKwd(seq->scoped());
122
+ s = getUnqualified(fixKwd(seq->scoped()), scope);
115
123
  }
124
+
116
125
  if(typeCtx & TypeContextAMIPrivateEnd)
117
126
  {
118
127
  return s;
119
128
  }
129
+
120
130
  if(s[0] == ':')
121
131
  {
122
132
  s = " " + s;
@@ -130,37 +140,36 @@ sequenceTypeToString(const SequencePtr& seq, const StringList& metaData, int typ
130
140
  }
131
141
  else
132
142
  {
133
- return fixKwd(seq->scoped());
143
+ return getUnqualified(fixKwd(seq->scoped()), scope);
134
144
  }
135
145
  }
136
146
 
137
147
  string
138
- dictionaryTypeToString(const DictionaryPtr& dict, const StringList& metaData, int typeCtx)
148
+ dictionaryTypeToString(const DictionaryPtr& dict, const string& scope, const StringList& metaData, int typeCtx)
139
149
  {
140
- string dictType = findMetaData(metaData, typeCtx);
141
- if(!dictType.empty())
150
+ const string dictType = findMetaData(metaData, typeCtx);
151
+ if(dictType.empty())
142
152
  {
143
- return dictType;
153
+ return getUnqualified(fixKwd(dict->scoped()), scope);
144
154
  }
145
155
  else
146
156
  {
147
- return fixKwd(dict->scoped());
157
+ return dictType;
148
158
  }
149
159
  }
150
160
 
151
-
152
161
  void
153
- writeParamAllocateCode(Output& out, const TypePtr& type, bool optional, const string& fixedName,
162
+ writeParamAllocateCode(Output& out, const TypePtr& type, bool optional, const string& scope, const string& fixedName,
154
163
  const StringList& metaData, int typeCtx, bool endArg)
155
164
  {
156
- string s = typeToString(type, metaData, typeCtx);
165
+ string s = typeToString(type, scope, metaData, typeCtx);
157
166
  if(optional)
158
167
  {
159
- s = "IceUtil::Optional<" + toTemplateArg(s) + '>';
168
+ s = toOptional(s, typeCtx);
160
169
  }
161
170
  out << nl << s << ' ' << fixedName << ';';
162
171
 
163
- if(!(typeCtx & TypeContextInParam) || !endArg)
172
+ if((typeCtx & TypeContextCpp11) || !(typeCtx & TypeContextInParam) || !endArg)
164
173
  {
165
174
  return; // We're done.
166
175
  }
@@ -178,10 +187,10 @@ writeParamAllocateCode(Output& out, const TypePtr& type, bool optional, const st
178
187
  seqType = findMetaData(seq->getMetaData(), typeCtx);
179
188
  }
180
189
 
181
- string s;
190
+ string str;
182
191
  if(seqType == "%array")
183
192
  {
184
- s = typeToString(seq, metaData, TypeContextAMIPrivateEnd);
193
+ str = typeToString(seq, scope, metaData, TypeContextAMIPrivateEnd);
185
194
  }
186
195
  else if(seqType.find("%range") == 0)
187
196
  {
@@ -190,23 +199,28 @@ writeParamAllocateCode(Output& out, const TypePtr& type, bool optional, const st
190
199
  {
191
200
  md.push_back("cpp:type:" + seqType.substr(strlen("%range:")));
192
201
  }
193
- s = typeToString(seq, md);
202
+ str = typeToString(seq, scope, md, 0);
194
203
  }
195
204
 
196
- if(!s.empty())
205
+ if(!str.empty())
197
206
  {
198
207
  if(optional)
199
208
  {
200
- s = "IceUtil::Optional<" + toTemplateArg(s) + '>';
209
+ str = toOptional(str, typeCtx);
201
210
  }
202
- out << nl << s << " ___" << fixedName << ";";
211
+ out << nl << str << ' ' << fixedName << "_tmp_;";
203
212
  }
204
213
  }
205
214
  }
206
215
 
207
216
  void
208
- writeParamEndCode(Output& out, const TypePtr& type, bool optional, const string& fixedName, const StringList& metaData)
217
+ writeParamEndCode(Output& out, const TypePtr& type, bool optional, const string& fixedName, const StringList& metaData,
218
+ const string& obj = "")
209
219
  {
220
+ string objPrefix = obj.empty() ? obj : obj + ".";
221
+ string paramName = objPrefix + fixedName;
222
+ string escapedParamName = objPrefix + fixedName + "_tmp_";
223
+
210
224
  SequencePtr seq = SequencePtr::dynamicCast(type);
211
225
  if(seq)
212
226
  {
@@ -227,14 +241,14 @@ writeParamEndCode(Output& out, const TypePtr& type, bool optional, const string&
227
241
  {
228
242
  if(optional)
229
243
  {
230
- out << nl << "if(___" << fixedName << ")";
244
+ out << nl << "if(" << escapedParamName << ")";
231
245
  out << sb;
232
- out << nl << fixedName << " = ___" << fixedName << "->second;";
233
- out << eb;
246
+ out << nl << paramName << " = " << escapedParamName << "->second;";
247
+ out << eb;
234
248
  }
235
249
  else
236
250
  {
237
- out << nl << fixedName << " = ___" << fixedName << ".second;";
251
+ out << nl << paramName << " = " << escapedParamName << ".second;";
238
252
  }
239
253
  }
240
254
  else if(!builtin ||
@@ -244,32 +258,32 @@ writeParamEndCode(Output& out, const TypePtr& type, bool optional, const string&
244
258
  {
245
259
  if(optional)
246
260
  {
247
- out << nl << "if(___" << fixedName << ")";
261
+ out << nl << "if(" << escapedParamName << ")";
248
262
  out << sb;
249
- out << nl << fixedName << ".__setIsSet();";
250
- out << nl << "if(!___" << fixedName << "->empty())";
263
+ out << nl << paramName << ".__setIsSet();";
264
+ out << nl << "if(!" << escapedParamName << "->empty())";
251
265
  out << sb;
252
- out << nl << fixedName << "->first" << " = &(*___" << fixedName << ")[0];";
253
- out << nl << fixedName << "->second" << " = " << fixedName << "->first + " << "___"
254
- << fixedName << "->size();";
266
+ out << nl << paramName << "->first" << " = &(*" << escapedParamName << ")[0];";
267
+ out << nl << paramName << "->second" << " = " << paramName << "->first + " << escapedParamName
268
+ << "->size();";
255
269
  out << eb;
256
270
  out << nl << "else";
257
271
  out << sb;
258
- out << nl << fixedName << "->first" << " = " << fixedName << "->second" << " = 0;";
272
+ out << nl << paramName << "->first" << " = " << paramName << "->second" << " = 0;";
259
273
  out << eb;
260
274
  out << eb;
261
275
  }
262
276
  else
263
277
  {
264
- out << nl << "if(!___" << fixedName << ".empty())";
278
+ out << nl << "if(!" << escapedParamName << ".empty())";
265
279
  out << sb;
266
- out << nl << fixedName << ".first" << " = &___" << fixedName << "[0];";
267
- out << nl << fixedName << ".second" << " = " << fixedName << ".first + " << "___"
268
- << fixedName << ".size();";
280
+ out << nl << paramName << ".first" << " = &" << escapedParamName << "[0];";
281
+ out << nl << paramName << ".second" << " = " << paramName << ".first + " << escapedParamName
282
+ << ".size();";
269
283
  out << eb;
270
284
  out << nl << "else";
271
285
  out << sb;
272
- out << nl << fixedName << ".first" << " = " << fixedName << ".second" << " = 0;";
286
+ out << nl << paramName << ".first" << " = " << paramName << ".second" << " = 0;";
273
287
  out << eb;
274
288
  }
275
289
  }
@@ -278,30 +292,43 @@ writeParamEndCode(Output& out, const TypePtr& type, bool optional, const string&
278
292
  {
279
293
  if(optional)
280
294
  {
281
- out << nl << "if(___" << fixedName << ")";
295
+ out << nl << "if(" << escapedParamName << ")";
282
296
  out << sb;
283
- out << nl << fixedName << ".__setIsSet();";
284
- out << nl << fixedName << "->first = (*___" << fixedName << ").begin();";
285
- out << nl << fixedName << "->second = (*___" << fixedName << ").end();";
297
+ out << nl << paramName << ".__setIsSet();";
298
+ out << nl << paramName << "->first = (*" << escapedParamName << ").begin();";
299
+ out << nl << paramName << "->second = (*" << escapedParamName << ").end();";
286
300
  out << eb;
287
301
  }
288
302
  else
289
303
  {
290
- out << nl << fixedName << ".first = ___" << fixedName << ".begin();";
291
- out << nl << fixedName << ".second = ___" << fixedName << ".end();";
304
+ out << nl << paramName << ".first = " << escapedParamName << ".begin();";
305
+ out << nl << paramName << ".second = " << escapedParamName << ".end();";
292
306
  }
293
307
  }
294
308
  }
295
309
  }
296
310
 
297
311
  void
298
- writeMarshalUnmarshalParams(Output& out, const ParamDeclList& params, const OperationPtr& op, bool marshal, bool prepend, int typeCtx)
312
+ writeMarshalUnmarshalParams(Output& out, const ParamDeclList& params, const OperationPtr& op, bool marshal,
313
+ bool prepend, int typeCtx, const string& customStream = "", const string& retP = "",
314
+ const string& obj = "")
299
315
  {
300
316
  string prefix = prepend ? paramPrefix : "";
317
+ string returnValueS = retP.empty() ? string("ret") : retP;
318
+ string objPrefix = obj.empty() ? obj : obj + ".";
319
+
320
+ string stream = customStream;
321
+ if(stream.empty())
322
+ {
323
+ stream = marshal ? "ostr" : "istr";
324
+ }
325
+
326
+ bool cpp11 = (typeCtx & TypeContextCpp11) != 0;
301
327
 
302
328
  //
303
329
  // Marshal non optional parameters.
304
330
  //
331
+ ParamDeclList requiredParams;
305
332
  ParamDeclList optionals;
306
333
  for(ParamDeclList::const_iterator p = params.begin(); p != params.end(); ++p)
307
334
  {
@@ -311,57 +338,160 @@ writeMarshalUnmarshalParams(Output& out, const ParamDeclList& params, const Oper
311
338
  }
312
339
  else
313
340
  {
314
- writeMarshalUnmarshalCode(out, (*p)->type(), false, 0, fixKwd(prefix + (*p)->name()), marshal, (*p)->getMetaData(),
315
- typeCtx);
341
+ requiredParams.push_back(*p);
316
342
  }
317
343
  }
318
- if(op && op->returnType())
344
+
345
+ if(!requiredParams.empty() || (op && op->returnType() && !op->returnIsOptional()))
319
346
  {
320
- if(!op->returnIsOptional())
347
+ if(cpp11)
348
+ {
349
+ out << nl;
350
+ if(marshal)
351
+ {
352
+ out << stream << "->writeAll";
353
+ }
354
+ else
355
+ {
356
+ out << stream << "->readAll";
357
+ }
358
+ out << spar;
359
+ for(ParamDeclList::const_iterator p = requiredParams.begin(); p != requiredParams.end(); ++p)
360
+ {
361
+ out << objPrefix + fixKwd(prefix + (*p)->name());
362
+ }
363
+ if(op && op->returnType() && !op->returnIsOptional())
364
+ {
365
+ out << objPrefix + returnValueS;
366
+ }
367
+ out << epar << ";";
368
+ }
369
+ else
321
370
  {
322
- writeMarshalUnmarshalCode(out, op->returnType(), false, 0, "__ret", marshal, op->getMetaData(), typeCtx);
371
+ for(ParamDeclList::const_iterator p = requiredParams.begin(); p != requiredParams.end(); ++p)
372
+ {
373
+ writeMarshalUnmarshalCode(out, (*p)->type(), false, 0, fixKwd(prefix + (*p)->name()), marshal,
374
+ (*p)->getMetaData(), typeCtx, customStream, true, obj);
375
+ }
376
+
377
+ if(op && op->returnType())
378
+ {
379
+ if(!op->returnIsOptional())
380
+ {
381
+ writeMarshalUnmarshalCode(out, op->returnType(), false, 0, returnValueS, marshal, op->getMetaData(),
382
+ typeCtx, customStream, true, obj);
383
+ }
384
+ }
323
385
  }
324
386
  }
325
387
 
326
- //
327
- // Sort optional parameters by tag.
328
- //
329
- class SortFn
388
+ if(!optionals.empty() || (op && op->returnType() && op->returnIsOptional()))
330
389
  {
331
- public:
332
- static bool compare(const ParamDeclPtr& lhs, const ParamDeclPtr& rhs)
390
+ //
391
+ // Sort optional parameters by tag.
392
+ //
393
+ class SortFn
333
394
  {
334
- return lhs->tag() < rhs->tag();
335
- }
336
- };
337
- optionals.sort(SortFn::compare);
395
+ public:
396
+ static bool compare(const ParamDeclPtr& lhs, const ParamDeclPtr& rhs)
397
+ {
398
+ return lhs->tag() < rhs->tag();
399
+ }
400
+ };
401
+ optionals.sort(SortFn::compare);
338
402
 
339
- //
340
- // Marshal optional parameters.
341
- //
342
- bool checkReturnType = op && op->returnIsOptional();
343
- for(ParamDeclList::const_iterator p = optionals.begin(); p != optionals.end(); ++p)
344
- {
345
- if(checkReturnType && op->returnTag() < (*p)->tag())
403
+ if(cpp11)
346
404
  {
347
- writeMarshalUnmarshalCode(out, op->returnType(), true, op->returnTag(), "__ret", marshal,
348
- op->getMetaData(), typeCtx);
349
- checkReturnType = false;
405
+ out << nl;
406
+ if(marshal)
407
+ {
408
+ out << stream << "->writeAll";
409
+ }
410
+ else
411
+ {
412
+ out << stream << "->readAll";
413
+ }
414
+ out << spar;
415
+
416
+ {
417
+ //
418
+ // Tags
419
+ //
420
+ ostringstream os;
421
+ os << '{';
422
+ bool checkReturnType = op && op->returnIsOptional();
423
+ bool insertComma = false;
424
+ for(ParamDeclList::const_iterator p = optionals.begin(); p != optionals.end(); ++p)
425
+ {
426
+ if(checkReturnType && op->returnTag() < (*p)->tag())
427
+ {
428
+ os << (insertComma ? ", " : "") << op->returnTag();
429
+ checkReturnType = false;
430
+ insertComma = true;
431
+ }
432
+ os << (insertComma ? ", " : "") << (*p)->tag();
433
+ insertComma = true;
434
+ }
435
+ if(checkReturnType)
436
+ {
437
+ os << (insertComma ? ", " : "") << op->returnTag();
438
+ }
439
+ os << '}';
440
+ out << os.str();
441
+ }
442
+
443
+ {
444
+ //
445
+ // Parameters
446
+ //
447
+ bool checkReturnType = op && op->returnIsOptional();
448
+ for(ParamDeclList::const_iterator p = optionals.begin(); p != optionals.end(); ++p)
449
+ {
450
+ if(checkReturnType && op->returnTag() < (*p)->tag())
451
+ {
452
+ out << objPrefix + returnValueS;
453
+ checkReturnType = false;
454
+ }
455
+ out << objPrefix + fixKwd(prefix + (*p)->name());
456
+ }
457
+ if(checkReturnType)
458
+ {
459
+ out << objPrefix + returnValueS;
460
+ }
461
+ }
462
+ out << epar << ";";
463
+ }
464
+ else
465
+ {
466
+
467
+ //
468
+ // Marshal optional parameters.
469
+ //
470
+
471
+ bool checkReturnType = op && op->returnIsOptional();
472
+ for(ParamDeclList::const_iterator p = optionals.begin(); p != optionals.end(); ++p)
473
+ {
474
+ if(checkReturnType && op->returnTag() < (*p)->tag())
475
+ {
476
+ writeMarshalUnmarshalCode(out, op->returnType(), true, op->returnTag(), returnValueS, marshal,
477
+ op->getMetaData(), typeCtx, customStream, true, obj);
478
+
479
+ checkReturnType = false;
480
+ }
481
+ writeMarshalUnmarshalCode(out, (*p)->type(), true, (*p)->tag(), fixKwd(prefix + (*p)->name()), marshal,
482
+ (*p)->getMetaData(), typeCtx, customStream, true, obj);
483
+ }
484
+ if(checkReturnType)
485
+ {
486
+ writeMarshalUnmarshalCode(out, op->returnType(), true, op->returnTag(), returnValueS, marshal,
487
+ op->getMetaData(), typeCtx, customStream, true, obj);
488
+ }
350
489
  }
351
- writeMarshalUnmarshalCode(out, (*p)->type(), true, (*p)->tag(), fixKwd(prefix + (*p)->name()), marshal,
352
- (*p)->getMetaData(), typeCtx);
353
- }
354
- if(checkReturnType)
355
- {
356
- writeMarshalUnmarshalCode(out, op->returnType(), true, op->returnTag(), "__ret", marshal, op->getMetaData(),
357
- typeCtx);
358
490
  }
359
491
  }
360
-
361
492
  }
362
493
 
363
- Slice::FeatureProfile Slice::featureProfile = Slice::Ice;
364
- string Slice::paramPrefix = "__p_";
494
+ string Slice::paramPrefix = "iceP_";
365
495
 
366
496
  char
367
497
  Slice::ToIfdef::operator()(char c)
@@ -376,19 +506,13 @@ Slice::ToIfdef::operator()(char c)
376
506
  }
377
507
  }
378
508
 
379
-
380
509
  void
381
510
  Slice::printHeader(Output& out)
382
511
  {
383
512
  static const char* header =
384
- "// **********************************************************************\n"
385
- "//\n"
386
- "// Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.\n"
387
513
  "//\n"
388
- "// This copy of Ice is licensed to you under the terms described in the\n"
389
- "// ICE_LICENSE file included in this distribution.\n"
514
+ "// Copyright (c) ZeroC, Inc. All rights reserved.\n"
390
515
  "//\n"
391
- "// **********************************************************************\n"
392
516
  ;
393
517
 
394
518
  out << header;
@@ -403,7 +527,7 @@ Slice::printVersionCheck(Output& out)
403
527
  out << "\n";
404
528
  out << "\n#ifndef ICE_IGNORE_VERSION";
405
529
  int iceVersion = ICE_INT_VERSION; // Use this to prevent warning with C++Builder
406
- if(iceVersion % 100 > 50)
530
+ if(iceVersion % 100 >= 50)
407
531
  {
408
532
  //
409
533
  // Beta version: exact match required
@@ -421,7 +545,7 @@ Slice::printVersionCheck(Output& out)
421
545
  //
422
546
  // Generated code is release; reject beta header
423
547
  //
424
- out << "\n# if ICE_INT_VERSION % 100 > 50";
548
+ out << "\n# if ICE_INT_VERSION % 100 >= 50";
425
549
  out << "\n# error Beta header file detected";
426
550
  out << "\n# endif";
427
551
 
@@ -439,10 +563,10 @@ Slice::printDllExportStuff(Output& out, const string& dllExport)
439
563
  {
440
564
  out << sp;
441
565
  out << "\n#ifndef " << dllExport;
442
- out << "\n# ifdef " << dllExport << "_EXPORTS";
443
- out << "\n# define " << dllExport << " ICE_DECLSPEC_EXPORT";
444
- out << "\n# elif defined(ICE_STATIC_LIBS)";
566
+ out << "\n# if defined(ICE_STATIC_LIBS)";
445
567
  out << "\n# define " << dllExport << " /**/";
568
+ out << "\n# elif defined(" << dllExport << "_EXPORTS)";
569
+ out << "\n# define " << dllExport << " ICE_DECLSPEC_EXPORT";
446
570
  out << "\n# else";
447
571
  out << "\n# define " << dllExport << " ICE_DECLSPEC_IMPORT";
448
572
  out << "\n# endif";
@@ -450,10 +574,64 @@ Slice::printDllExportStuff(Output& out, const string& dllExport)
450
574
  }
451
575
  }
452
576
 
577
+ bool
578
+ Slice::isMovable(const TypePtr& type)
579
+ {
580
+ BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);
581
+ if(builtin)
582
+ {
583
+ switch(builtin->kind())
584
+ {
585
+ case Builtin::KindString:
586
+ case Builtin::KindObject:
587
+ case Builtin::KindObjectProxy:
588
+ case Builtin::KindLocalObject:
589
+ case Builtin::KindValue:
590
+ {
591
+ return true;
592
+ }
593
+ default:
594
+ {
595
+ return false;
596
+ }
597
+ }
598
+ }
599
+ return !EnumPtr::dynamicCast(type);
600
+ }
601
+
602
+ string
603
+ Slice::getUnqualified(const std::string& type, const std::string& scope)
604
+ {
605
+ if(type.find("::") != string::npos)
606
+ {
607
+ string prefix;
608
+ if(type.find("const ") == 0)
609
+ {
610
+ prefix += "const ";
611
+ }
612
+
613
+ if(type.find("::std::shared_ptr<", prefix.size()) == prefix.size())
614
+ {
615
+ prefix += "::std::shared_ptr<";
616
+ }
617
+
618
+ if(type.find(scope, prefix.size()) == prefix.size())
619
+ {
620
+ string t = type.substr(prefix.size() + scope.size());
621
+ if(t.find("::") == string::npos)
622
+ {
623
+ return prefix + t;
624
+ }
625
+ }
626
+ }
627
+ return type;
628
+ }
453
629
 
454
630
  string
455
- Slice::typeToString(const TypePtr& type, const StringList& metaData, int typeCtx)
631
+ Slice::typeToString(const TypePtr& type, const string& scope, const StringList& metaData, int typeCtx)
456
632
  {
633
+ bool cpp11 = (typeCtx & TypeContextCpp11) != 0;
634
+
457
635
  static const char* builtinTable[] =
458
636
  {
459
637
  "::Ice::Byte",
@@ -466,9 +644,40 @@ Slice::typeToString(const TypePtr& type, const StringList& metaData, int typeCtx
466
644
  "::std::string",
467
645
  "::Ice::ObjectPtr",
468
646
  "::Ice::ObjectPrx",
469
- "::Ice::LocalObjectPtr"
647
+ "::Ice::LocalObjectPtr",
648
+ "::Ice::ValuePtr"
470
649
  };
471
650
 
651
+ static const char* cpp11BuiltinTable[] =
652
+ {
653
+ "::Ice::Byte",
654
+ "bool",
655
+ "short",
656
+ "int",
657
+ "long long int",
658
+ "float",
659
+ "double",
660
+ "::std::string",
661
+ "::std::shared_ptr<::Ice::Object>",
662
+ "::std::shared_ptr<::Ice::ObjectPrx>",
663
+ "::std::shared_ptr<void>",
664
+ "::std::shared_ptr<::Ice::Value>"
665
+ };
666
+
667
+ if((typeCtx & TypeContextLocal) != 0)
668
+ {
669
+ for(StringList::const_iterator i = metaData.begin(); i != metaData.end(); ++i)
670
+ {
671
+ const string cppType = "cpp:type:";
672
+ const string meta = *i;
673
+
674
+ if(meta.find(cppType) == 0)
675
+ {
676
+ return meta.substr(cppType.size());
677
+ }
678
+ }
679
+ }
680
+
472
681
  BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);
473
682
  if(builtin)
474
683
  {
@@ -476,76 +685,125 @@ Slice::typeToString(const TypePtr& type, const StringList& metaData, int typeCtx
476
685
  {
477
686
  return stringTypeToString(type, metaData, typeCtx);
478
687
  }
688
+ else if(cpp11)
689
+ {
690
+ if(builtin->kind() == Builtin::KindObject && !(typeCtx & TypeContextLocal))
691
+ {
692
+ return getUnqualified(cpp11BuiltinTable[Builtin::KindValue], scope);
693
+ }
694
+ else
695
+ {
696
+ return getUnqualified(cpp11BuiltinTable[builtin->kind()], scope);
697
+ }
698
+ }
479
699
  else
480
700
  {
481
- return builtinTable[builtin->kind()];
701
+ return getUnqualified(builtinTable[builtin->kind()], scope);
482
702
  }
483
703
  }
484
704
 
485
705
  ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type);
486
706
  if(cl)
487
707
  {
488
- return fixKwd(cl->scoped() + "Ptr");
708
+ if(cpp11)
709
+ {
710
+ if(cl->definition() && cl->definition()->isDelegate())
711
+ {
712
+ return getUnqualified(fixKwd(cl->scoped()), scope);
713
+ }
714
+ else if(cl->isInterface() && !cl->isLocal())
715
+ {
716
+ return getUnqualified(cpp11BuiltinTable[Builtin::KindValue], scope);
717
+ }
718
+ else
719
+ {
720
+ return "::std::shared_ptr<" + getUnqualified(cl->scoped(), scope) + ">";
721
+ }
722
+ }
723
+ else
724
+ {
725
+ return getUnqualified(cl->scoped() + "Ptr", scope);
726
+ }
489
727
  }
490
728
 
491
729
  StructPtr st = StructPtr::dynamicCast(type);
492
730
  if(st)
493
731
  {
494
- if(findMetaData(st->getMetaData()) == "%class")
732
+ //
733
+ // C++11 mapping doesn't accept cpp:class metadata
734
+ //
735
+ if(!cpp11 && findMetaData(st->getMetaData()) == "%class")
736
+ {
737
+ return getUnqualified(fixKwd(st->scoped() + "Ptr"), scope);
738
+ }
739
+ else
495
740
  {
496
- return fixKwd(st->scoped() + "Ptr");
741
+ return getUnqualified(fixKwd(st->scoped()), scope);
497
742
  }
498
- return fixKwd(st->scoped());
499
743
  }
500
744
 
501
745
  ProxyPtr proxy = ProxyPtr::dynamicCast(type);
502
746
  if(proxy)
503
747
  {
504
- return fixKwd(proxy->_class()->scoped() + "Prx");
748
+ if(cpp11)
749
+ {
750
+ ClassDefPtr def = proxy->_class()->definition();
751
+ //
752
+ // Non local classes without operations map to the base
753
+ // proxy class shared_ptr<Ice::ObjectPrx>
754
+ //
755
+ if(!def || def->isAbstract())
756
+ {
757
+ return "::std::shared_ptr<" + getUnqualified(fixKwd(proxy->_class()->scoped() + "Prx"), scope) + ">";
758
+ }
759
+ else
760
+ {
761
+ return getUnqualified(cpp11BuiltinTable[Builtin::KindObjectProxy], scope);
762
+ }
763
+ }
764
+ else
765
+ {
766
+ return getUnqualified(fixKwd(proxy->_class()->scoped() + "Prx"), scope);
767
+ }
768
+ }
769
+
770
+ EnumPtr en = EnumPtr::dynamicCast(type);
771
+ if(en)
772
+ {
773
+ return getUnqualified(fixKwd(en->scoped()), scope);
505
774
  }
506
775
 
507
776
  SequencePtr seq = SequencePtr::dynamicCast(type);
508
777
  if(seq)
509
778
  {
510
- return sequenceTypeToString(seq, metaData, typeCtx);
779
+ return sequenceTypeToString(seq, scope, metaData, typeCtx);
511
780
  }
512
781
 
513
782
  DictionaryPtr dict = DictionaryPtr::dynamicCast(type);
514
783
  if(dict)
515
784
  {
516
- return dictionaryTypeToString(dict, metaData, typeCtx);
517
- }
518
-
519
- ContainedPtr contained = ContainedPtr::dynamicCast(type);
520
- if(contained)
521
- {
522
- return fixKwd(contained->scoped());
523
- }
524
-
525
- EnumPtr en = EnumPtr::dynamicCast(type);
526
- if(en)
527
- {
528
- return fixKwd(en->scoped());
785
+ return dictionaryTypeToString(dict, scope, metaData, typeCtx);
529
786
  }
530
787
 
531
788
  return "???";
532
789
  }
533
790
 
534
791
  string
535
- Slice::typeToString(const TypePtr& type, bool optional, const StringList& metaData, int typeCtx)
792
+ Slice::typeToString(const TypePtr& type, bool optional, const string& scope, const StringList& metaData, int typeCtx)
536
793
  {
537
794
  if(optional)
538
795
  {
539
- return "IceUtil::Optional<" + toTemplateArg(typeToString(type, metaData, typeCtx)) + ">";
796
+ return toOptional(typeToString(type, scope, metaData, typeCtx), typeCtx);
540
797
  }
541
798
  else
542
799
  {
543
- return typeToString(type, metaData, typeCtx);
800
+ return typeToString(type, scope, metaData, typeCtx);
544
801
  }
545
802
  }
546
803
 
547
804
  string
548
- Slice::returnTypeToString(const TypePtr& type, bool optional, const StringList& metaData, int typeCtx)
805
+ Slice::returnTypeToString(const TypePtr& type, bool optional, const string& scope, const StringList& metaData,
806
+ int typeCtx)
549
807
  {
550
808
  if(!type)
551
809
  {
@@ -554,16 +812,19 @@ Slice::returnTypeToString(const TypePtr& type, bool optional, const StringList&
554
812
 
555
813
  if(optional)
556
814
  {
557
- return "IceUtil::Optional<" + toTemplateArg(typeToString(type, metaData, typeCtx)) + ">";
815
+ return toOptional(typeToString(type, scope, metaData, typeCtx), typeCtx);
558
816
  }
559
817
 
560
- return typeToString(type, metaData, typeCtx);
818
+ return typeToString(type, scope, metaData, typeCtx);
561
819
  }
562
820
 
563
821
  string
564
- Slice::inputTypeToString(const TypePtr& type, bool optional, const StringList& metaData, int typeCtx)
822
+ Slice::inputTypeToString(const TypePtr& type, bool optional, const string& scope, const StringList& metaData,
823
+ int typeCtx)
565
824
  {
566
- static const char* inputBuiltinTable[] =
825
+ bool cpp11 = (typeCtx & TypeContextCpp11) != 0;
826
+
827
+ static const char* cpp98InputBuiltinTable[] =
567
828
  {
568
829
  "::Ice::Byte",
569
830
  "bool",
@@ -575,14 +836,31 @@ Slice::inputTypeToString(const TypePtr& type, bool optional, const StringList& m
575
836
  "const ::std::string&",
576
837
  "const ::Ice::ObjectPtr&",
577
838
  "const ::Ice::ObjectPrx&",
578
- "const ::Ice::LocalObjectPtr&"
839
+ "const ::Ice::LocalObjectPtr&",
840
+ "const ::Ice::ValuePtr&"
841
+ };
842
+
843
+ static const char* cpp11InputBuiltinTable[] =
844
+ {
845
+ "::Ice::Byte",
846
+ "bool",
847
+ "short",
848
+ "int",
849
+ "long long int",
850
+ "float",
851
+ "double",
852
+ "const ::std::string&",
853
+ "const ::std::shared_ptr<::Ice::Object>&",
854
+ "const ::std::shared_ptr<::Ice::ObjectPrx>&",
855
+ "const ::std::shared_ptr<void>&",
856
+ "const ::std::shared_ptr<::Ice::Value>&"
579
857
  };
580
858
 
581
859
  typeCtx |= TypeContextInParam;
582
860
 
583
861
  if(optional)
584
862
  {
585
- return "const IceUtil::Optional<" + toTemplateArg(typeToString(type, metaData, typeCtx)) +">&";
863
+ return "const " + toOptional(typeToString(type, scope, metaData, typeCtx), typeCtx) + '&';
586
864
  }
587
865
 
588
866
  BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);
@@ -590,66 +868,117 @@ Slice::inputTypeToString(const TypePtr& type, bool optional, const StringList& m
590
868
  {
591
869
  if(builtin->kind() == Builtin::KindString)
592
870
  {
593
- return string("const ") + stringTypeToString(type, metaData, typeCtx) + "&";
871
+ return string("const ") + stringTypeToString(type, metaData, typeCtx) + '&';
872
+ }
873
+ else if(cpp11)
874
+ {
875
+ if(builtin->kind() == Builtin::KindObject && !(typeCtx & TypeContextLocal))
876
+ {
877
+ return getUnqualified(cpp11InputBuiltinTable[Builtin::KindValue], scope);
878
+ }
879
+ else
880
+ {
881
+ return getUnqualified(cpp11InputBuiltinTable[builtin->kind()], scope);
882
+ }
594
883
  }
595
884
  else
596
885
  {
597
- return inputBuiltinTable[builtin->kind()];
886
+ return getUnqualified(cpp98InputBuiltinTable[builtin->kind()], scope);
598
887
  }
599
888
  }
600
889
 
601
890
  ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type);
602
891
  if(cl)
603
892
  {
604
- return "const " + fixKwd(cl->scoped() + "Ptr&");
893
+ if(cpp11)
894
+ {
895
+ if(cl->definition() && cl->definition()->isDelegate())
896
+ {
897
+ return getUnqualified(fixKwd(cl->scoped()), scope);
898
+ }
899
+ else if(cl->isInterface() && !cl->isLocal())
900
+ {
901
+ return getUnqualified(cpp11InputBuiltinTable[Builtin::KindValue], scope);
902
+ }
903
+ else
904
+ {
905
+ return "const ::std::shared_ptr<" + getUnqualified(fixKwd(cl->scoped()), scope) + ">&";
906
+ }
907
+ }
908
+ else
909
+ {
910
+ return "const " + getUnqualified(fixKwd(cl->scoped() + "Ptr&"), scope);
911
+ }
605
912
  }
606
913
 
607
914
  StructPtr st = StructPtr::dynamicCast(type);
608
915
  if(st)
609
916
  {
610
- if(findMetaData(st->getMetaData()) == "%class")
917
+ if(cpp11)
918
+ {
919
+ return "const " + getUnqualified(fixKwd(st->scoped()), scope) + "&";
920
+ }
921
+ else
611
922
  {
612
- return "const " + fixKwd(st->scoped() + "Ptr&");
923
+ if(findMetaData(st->getMetaData()) == "%class")
924
+ {
925
+ return "const " + getUnqualified(fixKwd(st->scoped() + "Ptr"), scope) + "&";
926
+ }
927
+ else
928
+ {
929
+ return "const " + getUnqualified(fixKwd(st->scoped()), scope) + "&";
930
+ }
613
931
  }
614
- return "const " + fixKwd(st->scoped()) + "&";
615
932
  }
616
933
 
617
934
  ProxyPtr proxy = ProxyPtr::dynamicCast(type);
618
935
  if(proxy)
619
936
  {
620
- return "const " + fixKwd(proxy->_class()->scoped() + "Prx&");
937
+ if(cpp11)
938
+ {
939
+ ClassDefPtr def = proxy->_class()->definition();
940
+ if(def && !def->isInterface() && def->allOperations().empty())
941
+ {
942
+ return getUnqualified(cpp11InputBuiltinTable[Builtin::KindObjectProxy], scope);
943
+ }
944
+ else
945
+ {
946
+ return "const ::std::shared_ptr<" + getUnqualified(fixKwd(proxy->_class()->scoped() + "Prx"), scope) + ">&";
947
+ }
948
+ }
949
+ else
950
+ {
951
+ return "const " + getUnqualified(fixKwd(proxy->_class()->scoped() + "Prx"), scope) + "&";
952
+ }
621
953
  }
622
954
 
623
955
  EnumPtr en = EnumPtr::dynamicCast(type);
624
956
  if(en)
625
957
  {
626
- return fixKwd(en->scoped());
958
+ return getUnqualified(fixKwd(en->scoped()), scope);
627
959
  }
628
960
 
629
961
  SequencePtr seq = SequencePtr::dynamicCast(type);
630
962
  if(seq)
631
963
  {
632
- return "const " + sequenceTypeToString(seq, metaData, typeCtx) + "&";
964
+ return "const " + sequenceTypeToString(seq, scope, metaData, typeCtx) + "&";
633
965
  }
634
966
 
635
967
  DictionaryPtr dict = DictionaryPtr::dynamicCast(type);
636
968
  if(dict)
637
969
  {
638
- return "const " + dictionaryTypeToString(dict, metaData, typeCtx) + "&";
639
- }
640
-
641
- ContainedPtr contained = ContainedPtr::dynamicCast(type);
642
- if(contained)
643
- {
644
- return "const " + fixKwd(contained->scoped()) + "&";
970
+ return "const " + dictionaryTypeToString(dict, scope, metaData, typeCtx) + "&";
645
971
  }
646
972
 
647
973
  return "???";
648
974
  }
649
975
 
650
976
  string
651
- Slice::outputTypeToString(const TypePtr& type, bool optional, const StringList& metaData, int typeCtx)
977
+ Slice::outputTypeToString(const TypePtr& type, bool optional, const string& scope, const StringList& metaData,
978
+ int typeCtx)
652
979
  {
980
+ bool cpp11 = (typeCtx & TypeContextCpp11) != 0;
981
+
653
982
  static const char* outputBuiltinTable[] =
654
983
  {
655
984
  "::Ice::Byte&",
@@ -661,13 +990,30 @@ Slice::outputTypeToString(const TypePtr& type, bool optional, const StringList&
661
990
  "::Ice::Double&",
662
991
  "::std::string&",
663
992
  "::Ice::ObjectPtr&",
664
- "::Ice::ObjectPrx&",
665
- "::Ice::LocalObjectPtr&"
993
+ "::Ice::ObjectPrxPtr&",
994
+ "::Ice::LocalObjectPtr&",
995
+ "::Ice::ValuePtr&"
996
+ };
997
+
998
+ static const char* cpp11OutputBuiltinTable[] =
999
+ {
1000
+ "::Ice::Byte&",
1001
+ "bool&",
1002
+ "short&",
1003
+ "int&",
1004
+ "long long int&",
1005
+ "float&",
1006
+ "double&",
1007
+ "::std::string&",
1008
+ "::std::shared_ptr<::Ice::Object>&",
1009
+ "::std::shared_ptr<::Ice::ObjectPrx>&",
1010
+ "::std::shared_ptr<void>&",
1011
+ "::std::shared_ptr<::Ice::Value>&"
666
1012
  };
667
1013
 
668
1014
  if(optional)
669
1015
  {
670
- return "IceUtil::Optional<" + toTemplateArg(typeToString(type, metaData, typeCtx)) +">&";
1016
+ return toOptional(typeToString(type, scope, metaData, typeCtx), typeCtx) + '&';
671
1017
  }
672
1018
 
673
1019
  BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);
@@ -677,75 +1023,126 @@ Slice::outputTypeToString(const TypePtr& type, bool optional, const StringList&
677
1023
  {
678
1024
  return stringTypeToString(type, metaData, typeCtx) + "&";
679
1025
  }
1026
+ else if(cpp11)
1027
+ {
1028
+ if(builtin->kind() == Builtin::KindObject && !(typeCtx & TypeContextLocal))
1029
+ {
1030
+ return getUnqualified(cpp11OutputBuiltinTable[Builtin::KindValue], scope);
1031
+ }
1032
+ else
1033
+ {
1034
+ return getUnqualified(cpp11OutputBuiltinTable[builtin->kind()], scope);
1035
+ }
1036
+ }
680
1037
  else
681
1038
  {
682
- return outputBuiltinTable[builtin->kind()];
1039
+ return getUnqualified(outputBuiltinTable[builtin->kind()], scope);
683
1040
  }
684
1041
  }
685
1042
 
686
1043
  ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type);
687
1044
  if(cl)
688
1045
  {
689
- return fixKwd(cl->scoped() + "Ptr&");
1046
+ if(cpp11)
1047
+ {
1048
+ if(cl->definition() && cl->definition()->isDelegate())
1049
+ {
1050
+ return getUnqualified(fixKwd(cl->scoped()), scope) + "&";
1051
+ }
1052
+ else if(cl->isInterface() && !cl->isLocal())
1053
+ {
1054
+ return getUnqualified(cpp11OutputBuiltinTable[Builtin::KindValue], scope);
1055
+ }
1056
+ else
1057
+ {
1058
+ return "::std::shared_ptr<" + getUnqualified(fixKwd(cl->scoped()), scope) + ">&";
1059
+ }
1060
+ }
1061
+ else
1062
+ {
1063
+ return getUnqualified(fixKwd(cl->scoped() + "Ptr&"), scope);
1064
+ }
690
1065
  }
691
1066
 
692
1067
  StructPtr st = StructPtr::dynamicCast(type);
693
1068
  if(st)
694
1069
  {
695
- if(findMetaData(st->getMetaData()) == "%class")
1070
+ if(!cpp11 && findMetaData(st->getMetaData()) == "%class")
696
1071
  {
697
- return fixKwd(st->scoped() + "Ptr&");
1072
+ return getUnqualified(fixKwd(st->scoped() + "Ptr&"), scope);
1073
+ }
1074
+ else
1075
+ {
1076
+ return getUnqualified(fixKwd(st->scoped()), scope) + "&";
698
1077
  }
699
- return fixKwd(st->scoped()) + "&";
700
1078
  }
701
1079
 
702
1080
  ProxyPtr proxy = ProxyPtr::dynamicCast(type);
703
1081
  if(proxy)
704
1082
  {
705
- return fixKwd(proxy->_class()->scoped() + "Prx&");
1083
+ if(cpp11)
1084
+ {
1085
+ ClassDefPtr def = proxy->_class()->definition();
1086
+ //
1087
+ // Non local classes without operations map to the base
1088
+ // proxy class shared_ptr<Ice::ObjectPrx>
1089
+ //
1090
+ if(def && !def->isInterface() && def->allOperations().empty())
1091
+ {
1092
+ return getUnqualified(cpp11OutputBuiltinTable[Builtin::KindObjectProxy], scope);
1093
+ }
1094
+ else
1095
+ {
1096
+ return "::std::shared_ptr<" + getUnqualified(fixKwd(proxy->_class()->scoped() + "Prx"), scope) + ">&";
1097
+ }
1098
+ }
1099
+ else
1100
+ {
1101
+ return getUnqualified(fixKwd(proxy->_class()->scoped() + "Prx&"), scope);
1102
+ }
1103
+ }
1104
+
1105
+ EnumPtr en = EnumPtr::dynamicCast(type);
1106
+ if(en)
1107
+ {
1108
+ return getUnqualified(fixKwd(en->scoped()), scope) + "&";
706
1109
  }
707
1110
 
708
1111
  SequencePtr seq = SequencePtr::dynamicCast(type);
709
1112
  if(seq)
710
1113
  {
711
- return sequenceTypeToString(seq, metaData, typeCtx) + "&";
1114
+ return sequenceTypeToString(seq, scope, metaData, typeCtx) + "&";
712
1115
  }
713
1116
 
714
1117
  DictionaryPtr dict = DictionaryPtr::dynamicCast(type);
715
1118
  if(dict)
716
1119
  {
717
- return dictionaryTypeToString(dict, metaData, typeCtx) + "&";
718
- }
719
-
720
- ContainedPtr contained = ContainedPtr::dynamicCast(type);
721
- if(contained)
722
- {
723
- return fixKwd(contained->scoped()) + "&";
1120
+ return dictionaryTypeToString(dict, scope, metaData, typeCtx) + "&";
724
1121
  }
725
1122
 
726
1123
  return "???";
727
1124
  }
728
1125
 
729
1126
  string
730
- Slice::operationModeToString(Operation::Mode mode)
1127
+ Slice::operationModeToString(Operation::Mode mode, bool cpp11)
731
1128
  {
1129
+ string prefix = cpp11 ? "::Ice::OperationMode::" : "::Ice::";
732
1130
  switch(mode)
733
1131
  {
734
1132
  case Operation::Normal:
735
1133
  {
736
- return "::Ice::Normal";
1134
+ return prefix + "Normal";
737
1135
  }
738
1136
 
739
1137
  case Operation::Nonmutating:
740
1138
  {
741
- return "::Ice::Nonmutating";
1139
+ return prefix + "Nonmutating";
742
1140
  }
743
1141
 
744
1142
  case Operation::Idempotent:
745
1143
  {
746
- return "::Ice::Idempotent";
1144
+ return prefix + "Idempotent";
747
1145
  }
748
-
749
1146
  default:
750
1147
  {
751
1148
  assert(false);
@@ -756,16 +1153,18 @@ Slice::operationModeToString(Operation::Mode mode)
756
1153
  }
757
1154
 
758
1155
  string
759
- Slice::opFormatTypeToString(const OperationPtr& op)
1156
+ Slice::opFormatTypeToString(const OperationPtr& op, bool cpp11)
760
1157
  {
1158
+ string prefix = cpp11 ? "::Ice::FormatType::" : "::Ice::";
1159
+
761
1160
  switch(op->format())
762
1161
  {
763
1162
  case DefaultFormat:
764
- return "::Ice::DefaultFormat";
1163
+ return prefix + "DefaultFormat";
765
1164
  case CompactFormat:
766
- return "::Ice::CompactFormat";
1165
+ return prefix + "CompactFormat";
767
1166
  case SlicedFormat:
768
- return "::Ice::SlicedFormat";
1167
+ return prefix + "SlicedFormat";
769
1168
 
770
1169
  default:
771
1170
  assert(false);
@@ -775,7 +1174,7 @@ Slice::opFormatTypeToString(const OperationPtr& op)
775
1174
  }
776
1175
 
777
1176
  //
778
- // If the passed name is a keyword, return the name with a "_cxx_" prefix;
1177
+ // If the passed name is a keyword, return the name with a "_cpp_" prefix;
779
1178
  // otherwise, return the name unchanged.
780
1179
  //
781
1180
 
@@ -792,14 +1191,15 @@ lookupKwd(const string& name)
792
1191
  //
793
1192
  static const string keywordList[] =
794
1193
  {
795
- "and", "and_eq", "asm", "auto", "bit_and", "bit_or", "bool", "break", "case", "catch", "char",
796
- "class", "compl", "const", "const_cast", "continue", "default", "delete", "do", "double",
797
- "dynamic_cast", "else", "enum", "explicit", "export", "extern", "false", "float", "for",
798
- "friend", "goto", "if", "inline", "int", "long", "mutable", "namespace", "new", "not", "not_eq",
799
- "operator", "or", "or_eq", "private", "protected", "public", "register", "reinterpret_cast",
800
- "return", "short", "signed", "sizeof", "static", "static_cast", "struct", "switch", "template",
801
- "this", "throw", "true", "try", "typedef", "typeid", "typename", "union", "unsigned", "using",
802
- "virtual", "void", "volatile", "wchar_t", "while", "xor", "xor_eq"
1194
+ "alignas", "alignof", "and", "and_eq", "asm", "auto", "bit_and", "bit_or", "bool", "break",
1195
+ "case", "catch", "char", "char16_t", "char32_t", "class", "compl", "const", "const_exptr", "const_cast", "continue",
1196
+ "decltype", "default", "delete", "do", "double", "dynamic_cast",
1197
+ "else", "enum", "explicit", "export", "extern", "false", "float", "for", "friend",
1198
+ "goto", "if", "inline", "int", "long", "mutable", "namespace", "new", "noexcept", "not", "not_eq",
1199
+ "operator", "or", "or_eq", "private", "protected", "public", "register", "reinterpret_cast", "return",
1200
+ "short", "signed", "sizeof", "static", "static_assert", "static_cast", "struct", "switch",
1201
+ "template", "this", "thread_local", "throw", "true", "try", "typedef", "typeid", "typename",
1202
+ "union", "unsigned", "using", "virtual", "void", "volatile", "wchar_t", "while", "xor", "xor_eq"
803
1203
  };
804
1204
  bool found = binary_search(&keywordList[0],
805
1205
  &keywordList[sizeof(keywordList) / sizeof(*keywordList)],
@@ -845,8 +1245,8 @@ splitScopedName(const string& scoped)
845
1245
  //
846
1246
  // If the passed name is a scoped name, return the identical scoped name,
847
1247
  // but with all components that are C++ keywords replaced by
848
- // their "_cxx_"-prefixed version; otherwise, if the passed name is
849
- // not scoped, but a C++ keyword, return the "_cxx_"-prefixed name;
1248
+ // their "_cpp_"-prefixed version; otherwise, if the passed name is
1249
+ // not scoped, but a C++ keyword, return the "_cpp_"-prefixed name;
850
1250
  // otherwise, return the name unchanged.
851
1251
  //
852
1252
  string
@@ -868,16 +1268,19 @@ Slice::fixKwd(const string& name)
868
1268
 
869
1269
  void
870
1270
  Slice::writeMarshalUnmarshalCode(Output& out, const TypePtr& type, bool optional, int tag, const string& param,
871
- bool marshal, const StringList& metaData, int typeCtx, const string& str, bool pointer)
1271
+ bool marshal, const StringList& metaData, int typeCtx, const string& customStream,
1272
+ bool pointer, const string& obj)
872
1273
  {
1274
+ string objPrefix = obj.empty() ? obj : obj + ".";
1275
+
873
1276
  ostringstream os;
874
- if(str.empty())
1277
+ if(customStream.empty())
875
1278
  {
876
- os << (marshal ? "__os" : "__is");
1279
+ os << (marshal ? "ostr" : "istr");
877
1280
  }
878
1281
  else
879
1282
  {
880
- os << str;
1283
+ os << customStream;
881
1284
  }
882
1285
 
883
1286
  string deref;
@@ -916,51 +1319,62 @@ Slice::writeMarshalUnmarshalCode(Output& out, const TypePtr& type, bool optional
916
1319
  BuiltinPtr builtin = BuiltinPtr::dynamicCast(seq->type());
917
1320
  if(builtin && builtin->kind() == Builtin::KindByte)
918
1321
  {
919
- out << nl << func << param << ");";
1322
+ out << nl << func << objPrefix << param << ");";
920
1323
  return;
921
1324
  }
922
1325
 
923
- out << nl << func << "___" << param << ");";
924
- writeParamEndCode(out, seq, optional, param, metaData);
1326
+ out << nl << func << objPrefix << param << "_tmp_);";
1327
+ writeParamEndCode(out, seq, optional, param, metaData, obj);
925
1328
  return;
926
1329
  }
927
1330
  else if(seqType.find("%range") == 0)
928
1331
  {
929
- out << nl << func << "___" << param << ");";
930
- writeParamEndCode(out, seq, optional, param, metaData);
1332
+ out << nl << func << objPrefix << param << "_tmp_);";
1333
+ writeParamEndCode(out, seq, optional, param, metaData, obj);
931
1334
  return;
932
1335
  }
933
1336
  }
934
1337
  }
935
1338
 
936
- out << nl << func << param << ");";
1339
+ out << nl << func << objPrefix << param << ");";
937
1340
  }
938
1341
 
939
1342
  void
940
- Slice::writeMarshalCode(Output& out, const ParamDeclList& params, const OperationPtr& op, bool prepend, int typeCtx)
1343
+ Slice::writeMarshalCode(Output& out, const ParamDeclList& params, const OperationPtr& op, bool prepend, int typeCtx,
1344
+ const string& customStream, const string& retP)
941
1345
  {
942
- writeMarshalUnmarshalParams(out, params, op, true, prepend, typeCtx);
1346
+ writeMarshalUnmarshalParams(out, params, op, true, prepend, typeCtx, customStream, retP);
943
1347
  }
944
1348
 
945
1349
  void
946
- Slice::writeUnmarshalCode(Output& out, const ParamDeclList& params, const OperationPtr& op, bool prepend, int typeCtx)
1350
+ Slice::writeUnmarshalCode(Output& out, const ParamDeclList& params, const OperationPtr& op, bool prepend, int typeCtx,
1351
+ const string& customStream, const string& retP, const string& obj)
947
1352
  {
948
- writeMarshalUnmarshalParams(out, params, op, false, prepend, typeCtx);
1353
+ writeMarshalUnmarshalParams(out, params, op, false, prepend, typeCtx, customStream, retP, obj);
949
1354
  }
950
1355
 
951
1356
  void
952
- Slice::writeAllocateCode(Output& out, const ParamDeclList& params, const OperationPtr& op, bool prepend, int typeCtx)
1357
+ Slice::writeAllocateCode(Output& out, const ParamDeclList& params, const OperationPtr& op, bool prepend,
1358
+ const string& clScope, int typeCtx, const string& customRet)
953
1359
  {
954
1360
  string prefix = prepend ? paramPrefix : "";
1361
+ string returnValueS = customRet;
1362
+ if(returnValueS.empty())
1363
+ {
1364
+ returnValueS = "ret";
1365
+ }
1366
+
955
1367
  for(ParamDeclList::const_iterator p = params.begin(); p != params.end(); ++p)
956
1368
  {
957
- writeParamAllocateCode(out, (*p)->type(), (*p)->optional(), fixKwd(prefix + (*p)->name()), (*p)->getMetaData(),
958
- typeCtx, getEndArg((*p)->type(),(*p)->getMetaData(), (*p)->name()) != (*p)->name());
1369
+ writeParamAllocateCode(out, (*p)->type(), (*p)->optional(), clScope, fixKwd(prefix + (*p)->name()),
1370
+ (*p)->getMetaData(), typeCtx, getEndArg((*p)->type(), (*p)->getMetaData(),
1371
+ (*p)->name()) != (*p)->name());
959
1372
  }
1373
+
960
1374
  if(op && op->returnType())
961
1375
  {
962
- writeParamAllocateCode(out, op->returnType(), op->returnIsOptional(), "__ret", op->getMetaData(), typeCtx,
963
- getEndArg(op->returnType(), op->getMetaData(), "__ret") != "__ret");
1376
+ writeParamAllocateCode(out, op->returnType(), op->returnIsOptional(), clScope, returnValueS, op->getMetaData(),
1377
+ typeCtx, getEndArg(op->returnType(), op->getMetaData(), returnValueS) != returnValueS);
964
1378
  }
965
1379
  }
966
1380
 
@@ -986,11 +1400,11 @@ Slice::getEndArg(const TypePtr& type, const StringList& metaData, const string&
986
1400
  builtin->kind() != Builtin::KindObject &&
987
1401
  builtin->kind() != Builtin::KindObjectProxy)
988
1402
  {
989
- endArg = "___" + endArg;
1403
+ endArg += "_tmp_";
990
1404
  }
991
1405
  else if(!builtin || builtin->kind() != Builtin::KindByte)
992
1406
  {
993
- endArg = "___" + endArg;
1407
+ endArg += "_tmp_";
994
1408
  }
995
1409
  }
996
1410
  else if(seqType.find("%range") == 0)
@@ -1000,7 +1414,7 @@ Slice::getEndArg(const TypePtr& type, const StringList& metaData, const string&
1000
1414
  {
1001
1415
  md.push_back("cpp:type:" + seqType.substr(strlen("%range:")));
1002
1416
  }
1003
- endArg = "___" + endArg;
1417
+ endArg += "_tmp_";
1004
1418
  }
1005
1419
  }
1006
1420
  return endArg;
@@ -1016,10 +1430,254 @@ Slice::writeEndCode(Output& out, const ParamDeclList& params, const OperationPtr
1016
1430
  }
1017
1431
  if(op && op->returnType())
1018
1432
  {
1019
- writeParamEndCode(out, op->returnType(), op->returnIsOptional(), "__ret", op->getMetaData());
1433
+ writeParamEndCode(out, op->returnType(), op->returnIsOptional(), "ret", op->getMetaData());
1020
1434
  }
1021
1435
  }
1022
1436
 
1437
+ void
1438
+ Slice::writeMarshalUnmarshalDataMemberInHolder(IceUtilInternal::Output& C,
1439
+ const string& holder,
1440
+ const DataMemberPtr& p,
1441
+ bool marshal)
1442
+ {
1443
+ writeMarshalUnmarshalCode(C, p->type(), p->optional(), p->tag(), holder + fixKwd(p->name()), marshal,
1444
+ p->getMetaData());
1445
+ }
1446
+
1447
+ void
1448
+ Slice::writeMarshalUnmarshalAllInHolder(IceUtilInternal::Output& out,
1449
+ const string& holder,
1450
+ const DataMemberList& dataMembers,
1451
+ bool optional,
1452
+ bool marshal)
1453
+ {
1454
+ if(dataMembers.empty())
1455
+ {
1456
+ return;
1457
+ }
1458
+
1459
+ string stream = marshal ? "ostr" : "istr";
1460
+ string streamOp = marshal ? "writeAll" : "readAll";
1461
+
1462
+ out << nl << stream << "->" << streamOp;
1463
+ out << spar;
1464
+
1465
+ if(optional)
1466
+ {
1467
+ ostringstream os;
1468
+ os << "{";
1469
+ for(DataMemberList::const_iterator q = dataMembers.begin(); q != dataMembers.end(); ++q)
1470
+ {
1471
+ if(q != dataMembers.begin())
1472
+ {
1473
+ os << ", ";
1474
+ }
1475
+ os << (*q)->tag();
1476
+ }
1477
+ os << "}";
1478
+ out << os.str();
1479
+ }
1480
+
1481
+ for(DataMemberList::const_iterator q = dataMembers.begin(); q != dataMembers.end(); ++q)
1482
+ {
1483
+ out << holder + fixKwd((*q)->name());
1484
+ }
1485
+
1486
+ out << epar << ";";
1487
+
1488
+ }
1489
+
1490
+ void
1491
+ Slice::writeStreamHelpers(Output& out,
1492
+ const ContainedPtr& c,
1493
+ DataMemberList dataMembers,
1494
+ bool hasBaseDataMembers,
1495
+ bool checkClassMetaData,
1496
+ bool cpp11)
1497
+ {
1498
+ // If c is a C++11 class/exception whose base class contains data members (recursively), then we need to generate
1499
+ // a StreamWriter even if its implementation is empty. This is because our default marshaling uses ice_tuple() which
1500
+ // contains all of our class/exception's data members as well the base data members, which breaks marshaling. This
1501
+ // is not an issue for structs.
1502
+ if(dataMembers.empty() && !(cpp11 && hasBaseDataMembers))
1503
+ {
1504
+ return;
1505
+ }
1506
+
1507
+ DataMemberList requiredMembers;
1508
+ DataMemberList optionalMembers;
1509
+
1510
+ for(DataMemberList::const_iterator q = dataMembers.begin(); q != dataMembers.end(); ++q)
1511
+ {
1512
+ if((*q)->optional())
1513
+ {
1514
+ optionalMembers.push_back(*q);
1515
+ }
1516
+ else
1517
+ {
1518
+ requiredMembers.push_back(*q);
1519
+ }
1520
+ }
1521
+
1522
+ // Sort optional data members
1523
+ class SortFn
1524
+ {
1525
+ public:
1526
+ static bool compare(const DataMemberPtr& lhs, const DataMemberPtr& rhs)
1527
+ {
1528
+ return lhs->tag() < rhs->tag();
1529
+ }
1530
+ };
1531
+ optionalMembers.sort(SortFn::compare);
1532
+
1533
+ string scoped = c->scoped();
1534
+ bool classMetaData = checkClassMetaData ? (findMetaData(c->getMetaData(), false) == "%class") : false;
1535
+ string fullName = classMetaData ? fixKwd(scoped + "Ptr") : fixKwd(scoped);
1536
+ string holder = classMetaData ? "v->" : "v.";
1537
+
1538
+ //
1539
+ // Generate StreamWriter
1540
+ //
1541
+ // Only generate StreamWriter specializations if we are generating for C++98 or
1542
+ // we are generating for C++11 with optional data members and no base class data members
1543
+ //
1544
+ if(!cpp11 || !optionalMembers.empty() || hasBaseDataMembers)
1545
+ {
1546
+ out << nl << "template<typename S>";
1547
+ out << nl << "struct StreamWriter" << (cpp11 ? "<" : "< ") << fullName << ", S>";
1548
+ out << sb;
1549
+ if(requiredMembers.empty() && optionalMembers.empty())
1550
+ {
1551
+ out << nl << "static void write(S*, const " << fullName << "&)";
1552
+ }
1553
+ else
1554
+ {
1555
+ out << nl << "static void write(S* ostr, const " << fullName << "& v)";
1556
+ }
1557
+
1558
+ out << sb;
1559
+
1560
+ if(cpp11)
1561
+ {
1562
+ writeMarshalUnmarshalAllInHolder(out, holder, requiredMembers, false, true);
1563
+ writeMarshalUnmarshalAllInHolder(out, holder, optionalMembers, true, true);
1564
+ }
1565
+ else
1566
+ {
1567
+ for(DataMemberList::const_iterator q = requiredMembers.begin(); q != requiredMembers.end(); ++q)
1568
+ {
1569
+ writeMarshalUnmarshalDataMemberInHolder(out, holder, *q, true);
1570
+ }
1571
+
1572
+ for(DataMemberList::const_iterator q = optionalMembers.begin(); q != optionalMembers.end(); ++q)
1573
+ {
1574
+ writeMarshalUnmarshalDataMemberInHolder(out, holder, *q, true);
1575
+ }
1576
+ }
1577
+
1578
+ out << eb;
1579
+ out << eb << ";" << nl;
1580
+ }
1581
+
1582
+ //
1583
+ // Generate StreamReader
1584
+ //
1585
+ out << nl << "template<typename S>";
1586
+ out << nl << "struct StreamReader" << (cpp11 ? "<" : "< ") << fullName << ", S>";
1587
+ out << sb;
1588
+ if (requiredMembers.empty() && optionalMembers.empty())
1589
+ {
1590
+ out << nl << "static void read(S*, " << fullName << "&)";
1591
+ }
1592
+ else
1593
+ {
1594
+ out << nl << "static void read(S* istr, " << fullName << "& v)";
1595
+ }
1596
+
1597
+ out << sb;
1598
+
1599
+ if(cpp11)
1600
+ {
1601
+ writeMarshalUnmarshalAllInHolder(out, holder, requiredMembers, false, false);
1602
+ writeMarshalUnmarshalAllInHolder(out, holder, optionalMembers, true, false);
1603
+ }
1604
+ else
1605
+ {
1606
+ for(DataMemberList::const_iterator q = requiredMembers.begin(); q != requiredMembers.end(); ++q)
1607
+ {
1608
+ writeMarshalUnmarshalDataMemberInHolder(out, holder, *q, false);
1609
+ }
1610
+
1611
+ for(DataMemberList::const_iterator q = optionalMembers.begin(); q != optionalMembers.end(); ++q)
1612
+ {
1613
+ writeMarshalUnmarshalDataMemberInHolder(out, holder, *q, false);
1614
+ }
1615
+ }
1616
+
1617
+ out << eb;
1618
+ out << eb << ";" << nl;
1619
+ }
1620
+
1621
+ void
1622
+ Slice::writeIceTuple(::IceUtilInternal::Output& out, DataMemberList dataMembers, int typeCtx)
1623
+ {
1624
+ //
1625
+ // Use an empty scope to get full qualified names from calls to typeToString.
1626
+ //
1627
+ const string scope = "";
1628
+ out << nl << "std::tuple<";
1629
+ for(DataMemberList::const_iterator q = dataMembers.begin(); q != dataMembers.end(); ++q)
1630
+ {
1631
+ if(q != dataMembers.begin())
1632
+ {
1633
+ out << ", ";
1634
+ }
1635
+ out << "const ";
1636
+ out << typeToString((*q)->type(), (*q)->optional(), scope, (*q)->getMetaData(), typeCtx | TypeContextCpp11)
1637
+ << "&";
1638
+ }
1639
+ out << "> ice_tuple() const";
1640
+
1641
+ out << sb;
1642
+ out << nl << "return std::tie(";
1643
+ for(DataMemberList::const_iterator pi = dataMembers.begin(); pi != dataMembers.end(); ++pi)
1644
+ {
1645
+ if(pi != dataMembers.begin())
1646
+ {
1647
+ out << ", ";
1648
+ }
1649
+ out << fixKwd((*pi)->name());
1650
+ }
1651
+ out << ");" << eb;
1652
+ }
1653
+
1654
+ bool
1655
+ Slice::findMetaData(const string& prefix, const ClassDeclPtr& cl, string& value)
1656
+ {
1657
+ if(findMetaData(prefix, cl->getMetaData(), value))
1658
+ {
1659
+ return true;
1660
+ }
1661
+
1662
+ ClassDefPtr def = cl->definition();
1663
+ return def ? findMetaData(prefix, def->getMetaData(), value) : false;
1664
+ }
1665
+
1666
+ bool
1667
+ Slice::findMetaData(const string& prefix, const StringList& metaData, string& value)
1668
+ {
1669
+ for(StringList::const_iterator i = metaData.begin(); i != metaData.end(); i++)
1670
+ {
1671
+ string s = *i;
1672
+ if(s.find(prefix) == 0)
1673
+ {
1674
+ value = s.substr(prefix.size());
1675
+ return true;
1676
+ }
1677
+ }
1678
+ return false;
1679
+ }
1680
+
1023
1681
  string
1024
1682
  Slice::findMetaData(const StringList& metaData, int typeCtx)
1025
1683
  {
@@ -1041,28 +1699,23 @@ Slice::findMetaData(const StringList& metaData, int typeCtx)
1041
1699
  // the return value is % followed by the string after cpp:.
1042
1700
  //
1043
1701
  // The priority of the metadata is as follows:
1044
- // 1: protobuf
1045
- // 2: array, range, view-type for "view" parameters
1046
- // 3: class
1702
+ // 1: array, range (C++98 only), view-type for "view" parameters
1703
+ // 2: class (C++98 only), scoped (C++98 only), unscoped (C++11 only)
1704
+ //
1047
1705
 
1048
1706
  if(pos != string::npos)
1049
1707
  {
1050
1708
  string ss = str.substr(prefix.size());
1051
1709
 
1052
- if(ss.find("protobuf:") == 0)
1053
- {
1054
- return str.substr(pos + 1);
1055
- }
1056
-
1057
1710
  if(typeCtx & (TypeContextInParam | TypeContextAMIPrivateEnd))
1058
1711
  {
1059
- if(ss.find("range:") == 0)
1712
+ if(ss.find("view-type:") == 0)
1060
1713
  {
1061
- return string("%") + str.substr(prefix.size());
1714
+ return str.substr(pos + 1);
1062
1715
  }
1063
- else if(ss.find("view-type:") == 0)
1716
+ else if(ss.find("range:") == 0 && !(typeCtx & TypeContextCpp11))
1064
1717
  {
1065
- return str.substr(pos + 1);
1718
+ return string("%") + str.substr(prefix.size());
1066
1719
  }
1067
1720
  }
1068
1721
 
@@ -1078,21 +1731,29 @@ Slice::findMetaData(const StringList& metaData, int typeCtx)
1078
1731
  {
1079
1732
  return "%array";
1080
1733
  }
1081
- else if(ss == "range")
1734
+ else if(ss == "range" && !(typeCtx & TypeContextCpp11))
1082
1735
  {
1083
1736
  return "%range";
1084
1737
  }
1085
1738
  }
1086
1739
  //
1087
- // Otherwise if the data is "class" it is returned.
1740
+ // Otherwise if the data is "class", "scoped" or "unscoped" it is returned.
1088
1741
  //
1089
1742
  else
1090
1743
  {
1091
1744
  string ss = str.substr(prefix.size());
1092
- if(ss == "class")
1745
+ if(ss == "class" && !(typeCtx & TypeContextCpp11))
1093
1746
  {
1094
1747
  return "%class";
1095
1748
  }
1749
+ else if(ss == "scoped" && !(typeCtx & TypeContextCpp11))
1750
+ {
1751
+ return "%scoped";
1752
+ }
1753
+ else if(ss == "unscoped" && (typeCtx & TypeContextCpp11))
1754
+ {
1755
+ return "%unscoped";
1756
+ }
1096
1757
  }
1097
1758
  }
1098
1759
  }
@@ -1125,7 +1786,6 @@ Slice::inWstringModule(const SequencePtr& seq)
1125
1786
  return false;
1126
1787
  }
1127
1788
 
1128
-
1129
1789
  string
1130
1790
  Slice::getDataMemberRef(const DataMemberPtr& p)
1131
1791
  {