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
@@ -0,0 +1,1367 @@
1
+ //
2
+ // Copyright (c) ZeroC, Inc. All rights reserved.
3
+ //
4
+
5
+ #include <Ice/OutputStream.h>
6
+ #include <Ice/DefaultsAndOverrides.h>
7
+ #include <Ice/Instance.h>
8
+ #include <Ice/Object.h>
9
+ #include <Ice/Proxy.h>
10
+ #include <Ice/ProxyFactory.h>
11
+ #include <Ice/ValueFactory.h>
12
+ #include <Ice/LocalException.h>
13
+ #include <Ice/Protocol.h>
14
+ #include <Ice/TraceUtil.h>
15
+ #include <Ice/LoggerUtil.h>
16
+ #include <Ice/SlicedData.h>
17
+ #include <Ice/StringConverter.h>
18
+ #include <iterator>
19
+
20
+ using namespace std;
21
+ using namespace Ice;
22
+ using namespace IceInternal;
23
+
24
+ namespace
25
+ {
26
+
27
+ class StreamUTF8BufferI : public IceUtil::UTF8Buffer
28
+ {
29
+ public:
30
+
31
+ StreamUTF8BufferI(OutputStream& stream) :
32
+ _stream(stream)
33
+ {
34
+ }
35
+
36
+ Ice::Byte* getMoreBytes(size_t howMany, Ice::Byte* firstUnused)
37
+ {
38
+ assert(howMany > 0);
39
+
40
+ if(firstUnused != 0)
41
+ {
42
+ //
43
+ // Return unused bytes
44
+ //
45
+ _stream.resize(static_cast<size_t>(firstUnused - _stream.b.begin()));
46
+ }
47
+
48
+ //
49
+ // Index of first unused byte
50
+ //
51
+ Buffer::Container::size_type pos = _stream.b.size();
52
+
53
+ //
54
+ // Since resize may reallocate the buffer, when firstUnused != 0, the
55
+ // return value can be != firstUnused
56
+ //
57
+ _stream.resize(pos + howMany);
58
+
59
+ return &_stream.b[pos];
60
+ }
61
+
62
+ private:
63
+
64
+ OutputStream& _stream;
65
+ };
66
+
67
+ }
68
+
69
+ Ice::OutputStream::OutputStream() :
70
+ _instance(0),
71
+ _closure(0),
72
+ _encoding(currentEncoding),
73
+ _format(ICE_ENUM(FormatType, CompactFormat)),
74
+ _currentEncaps(0)
75
+ {
76
+ }
77
+
78
+ Ice::OutputStream::OutputStream(const CommunicatorPtr& communicator) :
79
+ _closure(0),
80
+ _currentEncaps(0)
81
+ {
82
+ initialize(communicator);
83
+ }
84
+
85
+ Ice::OutputStream::OutputStream(const CommunicatorPtr& communicator, const EncodingVersion& encoding) :
86
+ _closure(0),
87
+ _currentEncaps(0)
88
+ {
89
+ initialize(communicator, encoding);
90
+ }
91
+
92
+ Ice::OutputStream::OutputStream(const CommunicatorPtr& communicator, const EncodingVersion& encoding,
93
+ const pair<const Byte*, const Byte*>& buf) :
94
+ Buffer(buf.first, buf.second),
95
+ _closure(0),
96
+ _currentEncaps(0)
97
+ {
98
+ initialize(communicator, encoding);
99
+ b.reset();
100
+ }
101
+
102
+ Ice::OutputStream::OutputStream(Instance* instance, const EncodingVersion& encoding) :
103
+ _closure(0),
104
+ _currentEncaps(0)
105
+ {
106
+ initialize(instance, encoding);
107
+ }
108
+
109
+ void
110
+ Ice::OutputStream::initialize(const CommunicatorPtr& communicator)
111
+ {
112
+ assert(communicator);
113
+ Instance* instance = getInstance(communicator).get();
114
+ initialize(instance, instance->defaultsAndOverrides()->defaultEncoding);
115
+ }
116
+
117
+ void
118
+ Ice::OutputStream::initialize(const CommunicatorPtr& communicator, const EncodingVersion& encoding)
119
+ {
120
+ assert(communicator);
121
+ initialize(getInstance(communicator).get(), encoding);
122
+ }
123
+
124
+ void
125
+ Ice::OutputStream::initialize(Instance* instance, const EncodingVersion& encoding)
126
+ {
127
+ assert(instance);
128
+
129
+ _instance = instance;
130
+ _encoding = encoding;
131
+
132
+ _format = _instance->defaultsAndOverrides()->defaultFormat;
133
+ }
134
+
135
+ void
136
+ Ice::OutputStream::clear()
137
+ {
138
+ while(_currentEncaps && _currentEncaps != &_preAllocatedEncaps)
139
+ {
140
+ Encaps* oldEncaps = _currentEncaps;
141
+ _currentEncaps = _currentEncaps->previous;
142
+ delete oldEncaps;
143
+ }
144
+ }
145
+
146
+ void
147
+ Ice::OutputStream::setFormat(FormatType fmt)
148
+ {
149
+ _format = fmt;
150
+ }
151
+
152
+ void*
153
+ Ice::OutputStream::getClosure() const
154
+ {
155
+ return _closure;
156
+ }
157
+
158
+ void*
159
+ Ice::OutputStream::setClosure(void* p)
160
+ {
161
+ void* prev = _closure;
162
+ _closure = p;
163
+ return prev;
164
+ }
165
+
166
+ void
167
+ Ice::OutputStream::swap(OutputStream& other)
168
+ {
169
+ swapBuffer(other);
170
+
171
+ std::swap(_instance, other._instance);
172
+ std::swap(_closure, other._closure);
173
+ std::swap(_encoding, other._encoding);
174
+ std::swap(_format, other._format);
175
+
176
+ //
177
+ // Swap is never called for streams that have encapsulations being written. However,
178
+ // encapsulations might still be set in case marshalling failed. We just
179
+ // reset the encapsulations if there are still some set.
180
+ //
181
+ resetEncapsulation();
182
+ other.resetEncapsulation();
183
+ }
184
+
185
+ void
186
+ Ice::OutputStream::resetEncapsulation()
187
+ {
188
+ while(_currentEncaps && _currentEncaps != &_preAllocatedEncaps)
189
+ {
190
+ Encaps* oldEncaps = _currentEncaps;
191
+ _currentEncaps = _currentEncaps->previous;
192
+ delete oldEncaps;
193
+ }
194
+
195
+ _preAllocatedEncaps.reset();
196
+ }
197
+
198
+ void
199
+ Ice::OutputStream::startEncapsulation()
200
+ {
201
+ //
202
+ // If no encoding version is specified, use the current write
203
+ // encapsulation encoding version if there's a current write
204
+ // encapsulation, otherwise, use the stream encoding version.
205
+ //
206
+
207
+ if(_currentEncaps)
208
+ {
209
+ startEncapsulation(_currentEncaps->encoding, _currentEncaps->format);
210
+ }
211
+ else
212
+ {
213
+ startEncapsulation(_encoding, Ice::ICE_ENUM(FormatType, DefaultFormat));
214
+ }
215
+ }
216
+
217
+ void
218
+ Ice::OutputStream::writePendingValues()
219
+ {
220
+ if(_currentEncaps && _currentEncaps->encoder)
221
+ {
222
+ _currentEncaps->encoder->writePendingValues();
223
+ }
224
+ else if(getEncoding() == Ice::Encoding_1_0)
225
+ {
226
+ //
227
+ // If using the 1.0 encoding and no instances were written, we
228
+ // still write an empty sequence for pending instances if
229
+ // requested (i.e.: if this is called).
230
+ //
231
+ // This is required by the 1.0 encoding, even if no instances
232
+ // are written we do marshal an empty sequence if marshaled
233
+ // data types use classes.
234
+ //
235
+ writeSize(0);
236
+ }
237
+ }
238
+
239
+ void
240
+ Ice::OutputStream::writeBlob(const vector<Byte>& v)
241
+ {
242
+ if(!v.empty())
243
+ {
244
+ Container::size_type pos = b.size();
245
+ resize(pos + v.size());
246
+ memcpy(&b[pos], &v[0], v.size());
247
+ }
248
+ }
249
+
250
+ void
251
+ Ice::OutputStream::write(const Byte* begin, const Byte* end)
252
+ {
253
+ Int sz = static_cast<Int>(end - begin);
254
+ writeSize(sz);
255
+ if(sz > 0)
256
+ {
257
+ Container::size_type pos = b.size();
258
+ resize(pos + static_cast<size_t>(sz));
259
+ memcpy(&b[pos], begin, static_cast<size_t>(sz));
260
+ }
261
+ }
262
+
263
+ void
264
+ Ice::OutputStream::write(const vector<bool>& v)
265
+ {
266
+ Int sz = static_cast<Int>(v.size());
267
+ writeSize(sz);
268
+ if(sz > 0)
269
+ {
270
+ Container::size_type pos = b.size();
271
+ resize(pos + static_cast<size_t>(sz));
272
+ copy(v.begin(), v.end(), b.begin() + pos);
273
+ }
274
+ }
275
+
276
+ namespace
277
+ {
278
+
279
+ template<size_t boolSize>
280
+ struct WriteBoolHelper
281
+ {
282
+ static void write(const bool* begin, OutputStream::Container::size_type pos, OutputStream::Container& b, Int sz)
283
+ {
284
+ for(size_t idx = 0; idx < static_cast<size_t>(sz); ++idx)
285
+ {
286
+ b[pos + idx] = static_cast<Byte>(*(begin + idx));
287
+ }
288
+ }
289
+ };
290
+
291
+ template<>
292
+ struct WriteBoolHelper<1>
293
+ {
294
+ static void write(const bool* begin, OutputStream::Container::size_type pos, OutputStream::Container& b, Int sz)
295
+ {
296
+ memcpy(&b[pos], begin, static_cast<size_t>(sz));
297
+ }
298
+ };
299
+
300
+ }
301
+
302
+ void
303
+ Ice::OutputStream::write(const bool* begin, const bool* end)
304
+ {
305
+ Int sz = static_cast<Int>(end - begin);
306
+ writeSize(sz);
307
+ if(sz > 0)
308
+ {
309
+ Container::size_type pos = b.size();
310
+ resize(pos + static_cast<size_t>(sz));
311
+ WriteBoolHelper<sizeof(bool)>::write(begin, pos, b, sz);
312
+ }
313
+ }
314
+
315
+ void
316
+ Ice::OutputStream::write(Short v)
317
+ {
318
+ Container::size_type pos = b.size();
319
+ resize(pos + sizeof(Short));
320
+ Byte* dest = &b[pos];
321
+ #ifdef ICE_BIG_ENDIAN
322
+ const Byte* src = reinterpret_cast<const Byte*>(&v) + sizeof(Short) - 1;
323
+ *dest++ = *src--;
324
+ *dest = *src;
325
+ #else
326
+ const Byte* src = reinterpret_cast<const Byte*>(&v);
327
+ *dest++ = *src++;
328
+ *dest = *src;
329
+ #endif
330
+ }
331
+
332
+ void
333
+ Ice::OutputStream::write(const Short* begin, const Short* end)
334
+ {
335
+ Int sz = static_cast<Int>(end - begin);
336
+ writeSize(sz);
337
+ if(sz > 0)
338
+ {
339
+ Container::size_type pos = b.size();
340
+ resize(pos + static_cast<size_t>(sz) * sizeof(Short));
341
+ #ifdef ICE_BIG_ENDIAN
342
+ const Byte* src = reinterpret_cast<const Byte*>(begin) + sizeof(Short) - 1;
343
+ Byte* dest = &(*(b.begin() + pos));
344
+ for(int j = 0 ; j < sz ; ++j)
345
+ {
346
+ *dest++ = *src--;
347
+ *dest++ = *src--;
348
+ src += 2 * sizeof(Short);
349
+ }
350
+ #else
351
+ memcpy(&b[pos], reinterpret_cast<const Byte*>(begin), static_cast<size_t>(sz) * sizeof(Short));
352
+ #endif
353
+ }
354
+ }
355
+
356
+ void
357
+ Ice::OutputStream::write(const Int* begin, const Int* end)
358
+ {
359
+ Int sz = static_cast<Int>(end - begin);
360
+ writeSize(sz);
361
+ if(sz > 0)
362
+ {
363
+ Container::size_type pos = b.size();
364
+ resize(pos + static_cast<size_t>(sz) * sizeof(Int));
365
+ #ifdef ICE_BIG_ENDIAN
366
+ const Byte* src = reinterpret_cast<const Byte*>(begin) + sizeof(Int) - 1;
367
+ Byte* dest = &(*(b.begin() + pos));
368
+ for(int j = 0 ; j < sz ; ++j)
369
+ {
370
+ *dest++ = *src--;
371
+ *dest++ = *src--;
372
+ *dest++ = *src--;
373
+ *dest++ = *src--;
374
+ src += 2 * sizeof(Int);
375
+ }
376
+ #else
377
+ memcpy(&b[pos], reinterpret_cast<const Byte*>(begin), static_cast<size_t>(sz) * sizeof(Int));
378
+ #endif
379
+ }
380
+ }
381
+
382
+ void
383
+ Ice::OutputStream::write(Long v)
384
+ {
385
+ Container::size_type pos = b.size();
386
+ resize(pos + sizeof(Long));
387
+ Byte* dest = &b[pos];
388
+ #ifdef ICE_BIG_ENDIAN
389
+ const Byte* src = reinterpret_cast<const Byte*>(&v) + sizeof(Long) - 1;
390
+ *dest++ = *src--;
391
+ *dest++ = *src--;
392
+ *dest++ = *src--;
393
+ *dest++ = *src--;
394
+ *dest++ = *src--;
395
+ *dest++ = *src--;
396
+ *dest++ = *src--;
397
+ *dest = *src;
398
+ #else
399
+ const Byte* src = reinterpret_cast<const Byte*>(&v);
400
+ *dest++ = *src++;
401
+ *dest++ = *src++;
402
+ *dest++ = *src++;
403
+ *dest++ = *src++;
404
+ *dest++ = *src++;
405
+ *dest++ = *src++;
406
+ *dest++ = *src++;
407
+ *dest = *src;
408
+ #endif
409
+ }
410
+
411
+ void
412
+ Ice::OutputStream::write(const Long* begin, const Long* end)
413
+ {
414
+ Int sz = static_cast<Int>(end - begin);
415
+ writeSize(sz);
416
+ if(sz > 0)
417
+ {
418
+ Container::size_type pos = b.size();
419
+ resize(pos + static_cast<size_t>(sz) * sizeof(Long));
420
+ #ifdef ICE_BIG_ENDIAN
421
+ const Byte* src = reinterpret_cast<const Byte*>(begin) + sizeof(Long) - 1;
422
+ Byte* dest = &(*(b.begin() + pos));
423
+ for(int j = 0 ; j < sz ; ++j)
424
+ {
425
+ *dest++ = *src--;
426
+ *dest++ = *src--;
427
+ *dest++ = *src--;
428
+ *dest++ = *src--;
429
+ *dest++ = *src--;
430
+ *dest++ = *src--;
431
+ *dest++ = *src--;
432
+ *dest++ = *src--;
433
+ src += 2 * sizeof(Long);
434
+ }
435
+ #else
436
+ memcpy(&b[pos], reinterpret_cast<const Byte*>(begin), static_cast<size_t>(sz) * sizeof(Long));
437
+ #endif
438
+ }
439
+ }
440
+
441
+ void
442
+ Ice::OutputStream::write(Float v)
443
+ {
444
+ Container::size_type pos = b.size();
445
+ resize(pos + sizeof(Float));
446
+ Byte* dest = &b[pos];
447
+ #ifdef ICE_BIG_ENDIAN
448
+ const Byte* src = reinterpret_cast<const Byte*>(&v) + sizeof(Float) - 1;
449
+ *dest++ = *src--;
450
+ *dest++ = *src--;
451
+ *dest++ = *src--;
452
+ *dest = *src;
453
+ #else
454
+ const Byte* src = reinterpret_cast<const Byte*>(&v);
455
+ *dest++ = *src++;
456
+ *dest++ = *src++;
457
+ *dest++ = *src++;
458
+ *dest = *src;
459
+ #endif
460
+ }
461
+
462
+ void
463
+ Ice::OutputStream::write(const Float* begin, const Float* end)
464
+ {
465
+ Int sz = static_cast<Int>(end - begin);
466
+ writeSize(sz);
467
+ if(sz > 0)
468
+ {
469
+ Container::size_type pos = b.size();
470
+ resize(pos + static_cast<size_t>(sz) * sizeof(Float));
471
+ #ifdef ICE_BIG_ENDIAN
472
+ const Byte* src = reinterpret_cast<const Byte*>(begin) + sizeof(Float) - 1;
473
+ Byte* dest = &(*(b.begin() + pos));
474
+ for(int j = 0 ; j < sz ; ++j)
475
+ {
476
+ *dest++ = *src--;
477
+ *dest++ = *src--;
478
+ *dest++ = *src--;
479
+ *dest++ = *src--;
480
+ src += 2 * sizeof(Float);
481
+ }
482
+ #else
483
+ memcpy(&b[pos], reinterpret_cast<const Byte*>(begin), static_cast<size_t>(sz) * sizeof(Float));
484
+ #endif
485
+ }
486
+ }
487
+
488
+ void
489
+ Ice::OutputStream::write(Double v)
490
+ {
491
+ Container::size_type pos = b.size();
492
+ resize(pos + sizeof(Double));
493
+ Byte* dest = &b[pos];
494
+ #ifdef ICE_BIG_ENDIAN
495
+ const Byte* src = reinterpret_cast<const Byte*>(&v) + sizeof(Double) - 1;
496
+ *dest++ = *src--;
497
+ *dest++ = *src--;
498
+ *dest++ = *src--;
499
+ *dest++ = *src--;
500
+ *dest++ = *src--;
501
+ *dest++ = *src--;
502
+ *dest++ = *src--;
503
+ *dest = *src;
504
+ #else
505
+ const Byte* src = reinterpret_cast<const Byte*>(&v);
506
+ *dest++ = *src++;
507
+ *dest++ = *src++;
508
+ *dest++ = *src++;
509
+ *dest++ = *src++;
510
+ *dest++ = *src++;
511
+ *dest++ = *src++;
512
+ *dest++ = *src++;
513
+ *dest = *src;
514
+ #endif
515
+ }
516
+
517
+ void
518
+ Ice::OutputStream::write(const Double* begin, const Double* end)
519
+ {
520
+ Int sz = static_cast<Int>(end - begin);
521
+ writeSize(sz);
522
+ if(sz > 0)
523
+ {
524
+ Container::size_type pos = b.size();
525
+ resize(pos + static_cast<size_t>(sz) * sizeof(Double));
526
+ #ifdef ICE_BIG_ENDIAN
527
+ const Byte* src = reinterpret_cast<const Byte*>(begin) + sizeof(Double) - 1;
528
+ Byte* dest = &(*(b.begin() + pos));
529
+ for(int j = 0 ; j < sz ; ++j)
530
+ {
531
+ *dest++ = *src--;
532
+ *dest++ = *src--;
533
+ *dest++ = *src--;
534
+ *dest++ = *src--;
535
+ *dest++ = *src--;
536
+ *dest++ = *src--;
537
+ *dest++ = *src--;
538
+ *dest++ = *src--;
539
+ src += 2 * sizeof(Double);
540
+ }
541
+ #else
542
+ memcpy(&b[pos], reinterpret_cast<const Byte*>(begin), static_cast<size_t>(sz) * sizeof(Double));
543
+ #endif
544
+ }
545
+ }
546
+
547
+ //
548
+ // NOTE: This member function is intentionally omitted in order to
549
+ // cause a link error if it is used. This is for efficiency reasons:
550
+ // writing a const char * requires a traversal of the string to get
551
+ // the string length first, which takes O(n) time, whereas getting the
552
+ // string length from a std::string takes constant time.
553
+ //
554
+ /*
555
+ void
556
+ Ice::OutputStream::write(const char*)
557
+ {
558
+ }
559
+ */
560
+
561
+ void
562
+ Ice::OutputStream::writeConverted(const char* vdata, size_t vsize)
563
+ {
564
+ //
565
+ // What is the size of the resulting UTF-8 encoded string?
566
+ // Impossible to tell, so we guess. If we don't guess correctly,
567
+ // we'll have to fix the mistake afterwards
568
+ //
569
+ try
570
+ {
571
+ Int guessedSize = static_cast<Int>(vsize);
572
+ writeSize(guessedSize); // writeSize() only writes the size; it does not reserve any buffer space.
573
+
574
+ size_t firstIndex = b.size();
575
+ StreamUTF8BufferI buffer(*this);
576
+
577
+ Byte* lastByte = ICE_NULLPTR;
578
+ bool converted = false;
579
+ if(_instance)
580
+ {
581
+ const StringConverterPtr& stringConverter = _instance->getStringConverter();
582
+ if(stringConverter)
583
+ {
584
+ lastByte = stringConverter->toUTF8(vdata, vdata + vsize, buffer);
585
+ converted = true;
586
+ }
587
+ }
588
+ else
589
+ {
590
+ StringConverterPtr stringConverter = getProcessStringConverter();
591
+ if(stringConverter)
592
+ {
593
+ lastByte = stringConverter->toUTF8(vdata, vdata + vsize, buffer);
594
+ converted = true;
595
+ }
596
+ }
597
+
598
+ if(!converted)
599
+ {
600
+ Container::size_type position = b.size();
601
+ resize(position + vsize);
602
+ memcpy(&b[position], vdata, vsize);
603
+ return;
604
+ }
605
+
606
+ if(lastByte != b.end())
607
+ {
608
+ resize(static_cast<size_t>(lastByte - b.begin()));
609
+ }
610
+ size_t lastIndex = b.size();
611
+
612
+ Int actualSize = static_cast<Int>(lastIndex - firstIndex);
613
+
614
+ //
615
+ // Check against the guess
616
+ //
617
+ if(guessedSize != actualSize)
618
+ {
619
+ if(guessedSize <= 254 && actualSize > 254)
620
+ {
621
+ //
622
+ // Move the UTF-8 sequence 4 bytes further
623
+ // Use memmove instead of memcpy since the source and destination typically overlap.
624
+ //
625
+ resize(b.size() + 4);
626
+ memmove(b.begin() + firstIndex + 4, b.begin() + firstIndex, static_cast<size_t>(actualSize));
627
+ }
628
+ else if(guessedSize > 254 && actualSize <= 254)
629
+ {
630
+ //
631
+ // Move the UTF-8 sequence 4 bytes back
632
+ //
633
+ memmove(b.begin() + firstIndex - 4, b.begin() + firstIndex, static_cast<size_t>(actualSize));
634
+ resize(b.size() - 4);
635
+ }
636
+
637
+ if(guessedSize <= 254)
638
+ {
639
+ rewriteSize(actualSize, b.begin() + firstIndex - 1);
640
+ }
641
+ else
642
+ {
643
+ rewriteSize(actualSize, b.begin() + firstIndex - 1 - 4);
644
+ }
645
+ }
646
+ }
647
+ catch(const IceUtil::IllegalConversionException& ex)
648
+ {
649
+ throw StringConversionException(__FILE__, __LINE__, ex.reason());
650
+ }
651
+ }
652
+
653
+ void
654
+ Ice::OutputStream::write(const string* begin, const string* end, bool convert)
655
+ {
656
+ Int sz = static_cast<Int>(end - begin);
657
+ writeSize(sz);
658
+ if(sz > 0)
659
+ {
660
+ for(int j = 0; j < sz; ++j)
661
+ {
662
+ write(begin[j], convert);
663
+ }
664
+ }
665
+ }
666
+
667
+ void
668
+ Ice::OutputStream::write(const wstring& v)
669
+ {
670
+ if(v.empty())
671
+ {
672
+ writeSize(0);
673
+ return;
674
+ }
675
+
676
+ //
677
+ // What is the size of the resulting UTF-8 encoded string?
678
+ // Impossible to tell, so we guess. If we don't guess correctly,
679
+ // we'll have to fix the mistake afterwards
680
+ //
681
+ try
682
+ {
683
+ Int guessedSize = static_cast<Int>(v.size());
684
+ writeSize(guessedSize); // writeSize() only writes the size; it does not reserve any buffer space.
685
+
686
+ size_t firstIndex = b.size();
687
+ StreamUTF8BufferI buffer(*this);
688
+
689
+ Byte* lastByte = ICE_NULLPTR;
690
+
691
+ // Note: wstringConverter is never null; when set to null, get returns the default unicode wstring converter
692
+ if(_instance)
693
+ {
694
+ lastByte = _instance->getWstringConverter()->toUTF8(v.data(), v.data() + v.size(), buffer);
695
+ }
696
+ else
697
+ {
698
+ lastByte = getProcessWstringConverter()->toUTF8(v.data(), v.data() + v.size(), buffer);
699
+ }
700
+
701
+ if(lastByte != b.end())
702
+ {
703
+ resize(static_cast<size_t>(lastByte - b.begin()));
704
+ }
705
+ size_t lastIndex = b.size();
706
+
707
+ Int actualSize = static_cast<Int>(lastIndex - firstIndex);
708
+
709
+ //
710
+ // Check against the guess
711
+ //
712
+ if(guessedSize != actualSize)
713
+ {
714
+ if(guessedSize <= 254 && actualSize > 254)
715
+ {
716
+ //
717
+ // Move the UTF-8 sequence 4 bytes further
718
+ // Use memmove instead of memcpy since the source and destination typically overlap.
719
+ //
720
+ resize(b.size() + 4);
721
+ memmove(b.begin() + firstIndex + 4, b.begin() + firstIndex, static_cast<size_t>(actualSize));
722
+ }
723
+ else if(guessedSize > 254 && actualSize <= 254)
724
+ {
725
+ //
726
+ // Move the UTF-8 sequence 4 bytes back
727
+ //
728
+ memmove(b.begin() + firstIndex - 4, b.begin() + firstIndex, static_cast<size_t>(actualSize));
729
+ resize(b.size() - 4);
730
+ }
731
+
732
+ if(guessedSize <= 254)
733
+ {
734
+ rewriteSize(actualSize, b.begin() + firstIndex - 1);
735
+ }
736
+ else
737
+ {
738
+ rewriteSize(actualSize, b.begin() + firstIndex - 1 - 4);
739
+ }
740
+ }
741
+ }
742
+ catch(const IceUtil::IllegalConversionException& ex)
743
+ {
744
+ throw StringConversionException(__FILE__, __LINE__, ex.reason());
745
+ }
746
+ }
747
+
748
+ void
749
+ Ice::OutputStream::write(const wstring* begin, const wstring* end)
750
+ {
751
+ Int sz = static_cast<Int>(end - begin);
752
+ writeSize(sz);
753
+ if(sz > 0)
754
+ {
755
+ for(int j = 0; j < sz; ++j)
756
+ {
757
+ write(begin[j]);
758
+ }
759
+ }
760
+ }
761
+
762
+ void
763
+ #ifdef ICE_CPP11_MAPPING
764
+ Ice::OutputStream::writeProxy(const shared_ptr<ObjectPrx>& v)
765
+ #else
766
+ Ice::OutputStream::write(const ObjectPrx& v)
767
+ #endif
768
+ {
769
+ if(v)
770
+ {
771
+ v->_write(*this);
772
+ }
773
+ else
774
+ {
775
+ Identity ident;
776
+ write(ident);
777
+ }
778
+ }
779
+
780
+ void
781
+ Ice::OutputStream::writeEnum(Int v, Int maxValue)
782
+ {
783
+ if(getEncoding() == Encoding_1_0)
784
+ {
785
+ if(maxValue < 127)
786
+ {
787
+ write(static_cast<Byte>(v));
788
+ }
789
+ else if(maxValue < 32767)
790
+ {
791
+ write(static_cast<Short>(v));
792
+ }
793
+ else
794
+ {
795
+ write(v);
796
+ }
797
+ }
798
+ else
799
+ {
800
+ writeSize(v);
801
+ }
802
+ }
803
+
804
+ void
805
+ Ice::OutputStream::writeException(const UserException& e)
806
+ {
807
+ initEncaps();
808
+ _currentEncaps->encoder->write(e);
809
+ }
810
+
811
+ bool
812
+ Ice::OutputStream::writeOptImpl(Int tag, OptionalFormat type)
813
+ {
814
+ if(getEncoding() == Encoding_1_0)
815
+ {
816
+ return false; // Optional members aren't supported with the 1.0 encoding.
817
+ }
818
+
819
+ Byte v = static_cast<Byte>(type);
820
+ if(tag < 30)
821
+ {
822
+ v |= static_cast<Byte>(tag << 3);
823
+ write(v);
824
+ }
825
+ else
826
+ {
827
+ v |= 0xF0; // tag = 30
828
+ write(v);
829
+ writeSize(tag);
830
+ }
831
+ return true;
832
+ }
833
+
834
+ void
835
+ Ice::OutputStream::finished(vector<Byte>& bytes)
836
+ {
837
+ vector<Byte>(b.begin(), b.end()).swap(bytes);
838
+ }
839
+
840
+ pair<const Byte*, const Byte*>
841
+ Ice::OutputStream::finished()
842
+ {
843
+ if(b.empty())
844
+ {
845
+ return pair<const Byte*, const Byte*>(reinterpret_cast<Ice::Byte*>(0), reinterpret_cast<Ice::Byte*>(0));
846
+ }
847
+ else
848
+ {
849
+ return pair<const Byte*, const Byte*>(&b[0], &b[0] + b.size());
850
+ }
851
+ }
852
+
853
+ void
854
+ Ice::OutputStream::throwEncapsulationException(const char* file, int line)
855
+ {
856
+ throw EncapsulationException(file, line);
857
+ }
858
+
859
+ void
860
+ Ice::OutputStream::initEncaps()
861
+ {
862
+ if(!_currentEncaps) // Lazy initialization.
863
+ {
864
+ _currentEncaps = &_preAllocatedEncaps;
865
+ _currentEncaps->start = b.size();
866
+ _currentEncaps->encoding = _encoding;
867
+ }
868
+
869
+ if(_currentEncaps->format == Ice::ICE_ENUM(FormatType, DefaultFormat))
870
+ {
871
+ _currentEncaps->format = _format;
872
+ }
873
+
874
+ if(!_currentEncaps->encoder) // Lazy initialization.
875
+ {
876
+ if(_currentEncaps->encoding == Encoding_1_0)
877
+ {
878
+ _currentEncaps->encoder = new EncapsEncoder10(this, _currentEncaps);
879
+ }
880
+ else
881
+ {
882
+ _currentEncaps->encoder = new EncapsEncoder11(this, _currentEncaps);
883
+ }
884
+ }
885
+ }
886
+
887
+ Ice::OutputStream::EncapsEncoder::~EncapsEncoder()
888
+ {
889
+ // Out of line to avoid weak vtable
890
+ }
891
+
892
+ Int
893
+ Ice::OutputStream::EncapsEncoder::registerTypeId(const string& typeId)
894
+ {
895
+ TypeIdMap::const_iterator p = _typeIdMap.find(typeId);
896
+ if(p != _typeIdMap.end())
897
+ {
898
+ return p->second;
899
+ }
900
+ else
901
+ {
902
+ _typeIdMap.insert(make_pair(typeId, ++_typeIdIndex));
903
+ return -1;
904
+ }
905
+ }
906
+
907
+ void
908
+ Ice::OutputStream::EncapsEncoder10::write(const ValuePtr& v)
909
+ {
910
+ //
911
+ // Object references are encoded as a negative integer in 1.0.
912
+ //
913
+ if(v)
914
+ {
915
+ _stream->write(-registerValue(v));
916
+ }
917
+ else
918
+ {
919
+ _stream->write(0);
920
+ }
921
+ }
922
+
923
+ void
924
+ Ice::OutputStream::EncapsEncoder10::write(const UserException& v)
925
+ {
926
+ //
927
+ // User exception with the 1.0 encoding start with a boolean
928
+ // flag that indicates whether or not the exception uses
929
+ // classes.
930
+ //
931
+ // This allows reading the pending instances even if some part of
932
+ // the exception was sliced.
933
+ //
934
+ bool usesClasses = v._usesClasses();
935
+ _stream->write(usesClasses);
936
+ v._write(_stream);
937
+ if(usesClasses)
938
+ {
939
+ writePendingValues();
940
+ }
941
+ }
942
+
943
+ void
944
+ Ice::OutputStream::EncapsEncoder10::startInstance(SliceType sliceType, const SlicedDataPtr&)
945
+ {
946
+ _sliceType = sliceType;
947
+ }
948
+
949
+ void
950
+ Ice::OutputStream::EncapsEncoder10::endInstance()
951
+ {
952
+ if(_sliceType == ValueSlice)
953
+ {
954
+ //
955
+ // Write the Object slice.
956
+ //
957
+ startSlice(Object::ice_staticId(), -1, true);
958
+ _stream->writeSize(0); // For compatibility with the old AFM.
959
+ endSlice();
960
+ }
961
+ _sliceType = NoSlice;
962
+ }
963
+
964
+ void
965
+ Ice::OutputStream::EncapsEncoder10::startSlice(const string& typeId, int, bool /*last*/)
966
+ {
967
+ //
968
+ // For instance slices, encode a boolean to indicate how the type ID
969
+ // is encoded and the type ID either as a string or index. For
970
+ // exception slices, always encode the type ID as a string.
971
+ //
972
+ if(_sliceType == ValueSlice)
973
+ {
974
+ Int index = registerTypeId(typeId);
975
+ if(index < 0)
976
+ {
977
+ _stream->write(false);
978
+ _stream->write(typeId, false);
979
+ }
980
+ else
981
+ {
982
+ _stream->write(true);
983
+ _stream->writeSize(index);
984
+ }
985
+ }
986
+ else
987
+ {
988
+ _stream->write(typeId, false);
989
+ }
990
+
991
+ _stream->write(Int(0)); // Placeholder for the slice length.
992
+
993
+ _writeSlice = _stream->b.size();
994
+ }
995
+
996
+ void
997
+ Ice::OutputStream::EncapsEncoder10::endSlice()
998
+ {
999
+ //
1000
+ // Write the slice length.
1001
+ //
1002
+ Int sz = static_cast<Int>(_stream->b.size() - _writeSlice + sizeof(Int));
1003
+ Byte* dest = &(*(_stream->b.begin() + _writeSlice - sizeof(Int)));
1004
+ _stream->write(sz, dest);
1005
+ }
1006
+
1007
+ void
1008
+ Ice::OutputStream::EncapsEncoder10::writePendingValues()
1009
+ {
1010
+ while(!_toBeMarshaledMap.empty())
1011
+ {
1012
+ //
1013
+ // Consider the to be marshalled instances as marshalled now,
1014
+ // this is necessary to avoid adding again the "to be
1015
+ // marshalled instances" into _toBeMarshaledMap while writing
1016
+ // instances.
1017
+ //
1018
+ _marshaledMap.insert(_toBeMarshaledMap.begin(), _toBeMarshaledMap.end());
1019
+
1020
+ PtrToIndexMap savedMap;
1021
+ savedMap.swap(_toBeMarshaledMap);
1022
+ _stream->writeSize(static_cast<Int>(savedMap.size()));
1023
+ for(PtrToIndexMap::iterator p = savedMap.begin(); p != savedMap.end(); ++p)
1024
+ {
1025
+ //
1026
+ // Ask the instance to marshal itself. Any new class
1027
+ // instances that are triggered by the classes marshaled
1028
+ // are added to toBeMarshaledMap.
1029
+ //
1030
+ _stream->write(p->second);
1031
+
1032
+ try
1033
+ {
1034
+ p->first->ice_preMarshal();
1035
+ }
1036
+ catch(const std::exception& ex)
1037
+ {
1038
+ Warning out(_stream->instance()->initializationData().logger);
1039
+ out << "std::exception raised by ice_preMarshal:\n" << ex;
1040
+ }
1041
+ catch(...)
1042
+ {
1043
+ Warning out(_stream->instance()->initializationData().logger);
1044
+ out << "unknown exception raised by ice_preMarshal";
1045
+ }
1046
+
1047
+ p->first->_iceWrite(_stream);
1048
+ }
1049
+ }
1050
+ _stream->writeSize(0); // Zero marker indicates end of sequence of sequences of instances.
1051
+ }
1052
+
1053
+ Int
1054
+ Ice::OutputStream::EncapsEncoder10::registerValue(const ValuePtr& v)
1055
+ {
1056
+ assert(v);
1057
+
1058
+ //
1059
+ // Look for this instance in the to-be-marshaled map.
1060
+ //
1061
+ PtrToIndexMap::const_iterator p = _toBeMarshaledMap.find(v);
1062
+ if(p != _toBeMarshaledMap.end())
1063
+ {
1064
+ return p->second;
1065
+ }
1066
+
1067
+ //
1068
+ // Didn't find it, try the marshaled map next.
1069
+ //
1070
+ PtrToIndexMap::const_iterator q = _marshaledMap.find(v);
1071
+ if(q != _marshaledMap.end())
1072
+ {
1073
+ return q->second;
1074
+ }
1075
+
1076
+ //
1077
+ // We haven't seen this instance previously, create a new
1078
+ // index, and insert it into the to-be-marshaled map.
1079
+ //
1080
+ _toBeMarshaledMap.insert(make_pair(v, ++_valueIdIndex));
1081
+ return _valueIdIndex;
1082
+ }
1083
+
1084
+ void
1085
+ Ice::OutputStream::EncapsEncoder11::write(const ValuePtr& v)
1086
+ {
1087
+ if(!v)
1088
+ {
1089
+ _stream->writeSize(0); // Nil reference.
1090
+ }
1091
+ else if(_current && _encaps->format == ICE_ENUM(FormatType, SlicedFormat))
1092
+ {
1093
+ //
1094
+ // If writing an instance within a slice and using the sliced
1095
+ // format, write an index from the instance indirection
1096
+ // table. The indirect instance table is encoded at the end of
1097
+ // each slice and is always read (even if the Slice is
1098
+ // unknown).
1099
+ //
1100
+ PtrToIndexMap::const_iterator p = _current->indirectionMap.find(v);
1101
+ if(p == _current->indirectionMap.end())
1102
+ {
1103
+ _current->indirectionTable.push_back(v);
1104
+ Int idx = static_cast<Int>(_current->indirectionTable.size()); // Position + 1 (0 is reserved for nil)
1105
+ _current->indirectionMap.insert(make_pair(v, idx));
1106
+ _stream->writeSize(idx);
1107
+ }
1108
+ else
1109
+ {
1110
+ _stream->writeSize(p->second);
1111
+ }
1112
+ }
1113
+ else
1114
+ {
1115
+ writeInstance(v); // Write the instance or a reference if already marshaled.
1116
+ }
1117
+ }
1118
+
1119
+ void
1120
+ Ice::OutputStream::EncapsEncoder11::write(const UserException& v)
1121
+ {
1122
+ v._write(_stream);
1123
+ }
1124
+
1125
+ void
1126
+ Ice::OutputStream::EncapsEncoder11::startInstance(SliceType sliceType, const SlicedDataPtr& data)
1127
+ {
1128
+ if(!_current)
1129
+ {
1130
+ _current = &_preAllocatedInstanceData;
1131
+ }
1132
+ else
1133
+ {
1134
+ _current = _current->next ? _current->next : new InstanceData(_current);
1135
+ }
1136
+ _current->sliceType = sliceType;
1137
+ _current->firstSlice = true;
1138
+
1139
+ if(data)
1140
+ {
1141
+ writeSlicedData(data);
1142
+ }
1143
+ }
1144
+
1145
+ void
1146
+ Ice::OutputStream::EncapsEncoder11::endInstance()
1147
+ {
1148
+ _current = _current->previous;
1149
+ }
1150
+
1151
+ void
1152
+ Ice::OutputStream::EncapsEncoder11::startSlice(const string& typeId, int compactId, bool last)
1153
+ {
1154
+ assert(_current->indirectionTable.empty() && _current->indirectionMap.empty());
1155
+
1156
+ _current->sliceFlagsPos = _stream->b.size();
1157
+
1158
+ _current->sliceFlags = 0;
1159
+ if(_encaps->format == ICE_ENUM(FormatType, SlicedFormat))
1160
+ {
1161
+ _current->sliceFlags |= FLAG_HAS_SLICE_SIZE; // Encode the slice size if using the sliced format.
1162
+ }
1163
+ if(last)
1164
+ {
1165
+ _current->sliceFlags |= FLAG_IS_LAST_SLICE; // This is the last slice.
1166
+ }
1167
+
1168
+ _stream->write(Byte(0)); // Placeholder for the slice flags
1169
+
1170
+ //
1171
+ // For instance slices, encode the flag and the type ID either as a
1172
+ // string or index. For exception slices, always encode the type
1173
+ // ID a string.
1174
+ //
1175
+ if(_current->sliceType == ValueSlice)
1176
+ {
1177
+ //
1178
+ // Encode the type ID (only in the first slice for the compact
1179
+ // encoding).
1180
+ //
1181
+ if(_encaps->format == ICE_ENUM(FormatType, SlicedFormat) || _current->firstSlice)
1182
+ {
1183
+ if(compactId >= 0)
1184
+ {
1185
+ _current->sliceFlags |= FLAG_HAS_TYPE_ID_COMPACT;
1186
+ _stream->writeSize(compactId);
1187
+ }
1188
+ else
1189
+ {
1190
+ Int index = registerTypeId(typeId);
1191
+ if(index < 0)
1192
+ {
1193
+ _current->sliceFlags |= FLAG_HAS_TYPE_ID_STRING;
1194
+ _stream->write(typeId, false);
1195
+ }
1196
+ else
1197
+ {
1198
+ _current->sliceFlags |= FLAG_HAS_TYPE_ID_INDEX;
1199
+ _stream->writeSize(index);
1200
+ }
1201
+ }
1202
+ }
1203
+ }
1204
+ else
1205
+ {
1206
+ _stream->write(typeId, false);
1207
+ }
1208
+
1209
+ if(_current->sliceFlags & FLAG_HAS_SLICE_SIZE)
1210
+ {
1211
+ _stream->write(Int(0)); // Placeholder for the slice length.
1212
+ }
1213
+
1214
+ _current->writeSlice = _stream->b.size();
1215
+ _current->firstSlice = false;
1216
+ }
1217
+
1218
+ void
1219
+ Ice::OutputStream::EncapsEncoder11::endSlice()
1220
+ {
1221
+ //
1222
+ // Write the optional member end marker if some optional members
1223
+ // were encoded. Note that the optional members are encoded before
1224
+ // the indirection table and are included in the slice size.
1225
+ //
1226
+ if(_current->sliceFlags & FLAG_HAS_OPTIONAL_MEMBERS)
1227
+ {
1228
+ _stream->write(OPTIONAL_END_MARKER);
1229
+ }
1230
+
1231
+ //
1232
+ // Write the slice length if necessary.
1233
+ //
1234
+ if(_current->sliceFlags & FLAG_HAS_SLICE_SIZE)
1235
+ {
1236
+ Int sz = static_cast<Int>(_stream->b.size() - _current->writeSlice + sizeof(Int));
1237
+ Byte* dest = &(*(_stream->b.begin() + _current->writeSlice - sizeof(Int)));
1238
+ _stream->write(sz, dest);
1239
+ }
1240
+
1241
+ //
1242
+ // Only write the indirection table if it contains entries.
1243
+ //
1244
+ if(!_current->indirectionTable.empty())
1245
+ {
1246
+ assert(_encaps->format == ICE_ENUM(FormatType, SlicedFormat));
1247
+ _current->sliceFlags |= FLAG_HAS_INDIRECTION_TABLE;
1248
+
1249
+ //
1250
+ // Write the indirect instance table.
1251
+ //
1252
+ _stream->writeSize(static_cast<Int>(_current->indirectionTable.size()));
1253
+ ValueList::const_iterator p;
1254
+ for(p = _current->indirectionTable.begin(); p != _current->indirectionTable.end(); ++p)
1255
+ {
1256
+ writeInstance(*p);
1257
+ }
1258
+ _current->indirectionTable.clear();
1259
+ _current->indirectionMap.clear();
1260
+ }
1261
+
1262
+ //
1263
+ // Finally, update the slice flags.
1264
+ //
1265
+ Byte* dest = &(*(_stream->b.begin() + _current->sliceFlagsPos));
1266
+ *dest = _current->sliceFlags;
1267
+ }
1268
+
1269
+ bool
1270
+ Ice::OutputStream::EncapsEncoder11::writeOptional(Ice::Int tag, Ice::OptionalFormat format)
1271
+ {
1272
+ if(!_current)
1273
+ {
1274
+ return _stream->writeOptImpl(tag, format);
1275
+ }
1276
+ else
1277
+ {
1278
+ if(_stream->writeOptImpl(tag, format))
1279
+ {
1280
+ _current->sliceFlags |= FLAG_HAS_OPTIONAL_MEMBERS;
1281
+ return true;
1282
+ }
1283
+ else
1284
+ {
1285
+ return false;
1286
+ }
1287
+ }
1288
+ }
1289
+
1290
+ void
1291
+ Ice::OutputStream::EncapsEncoder11::writeSlicedData(const SlicedDataPtr& slicedData)
1292
+ {
1293
+ assert(slicedData);
1294
+
1295
+ //
1296
+ // We only remarshal preserved slices if we are using the sliced
1297
+ // format. Otherwise, we ignore the preserved slices, which
1298
+ // essentially "slices" the instance into the most-derived type
1299
+ // known by the sender.
1300
+ //
1301
+ if(_encaps->format != ICE_ENUM(FormatType, SlicedFormat))
1302
+ {
1303
+ return;
1304
+ }
1305
+
1306
+ for(SliceInfoSeq::const_iterator p = slicedData->slices.begin(); p != slicedData->slices.end(); ++p)
1307
+ {
1308
+ startSlice((*p)->typeId, (*p)->compactId, (*p)->isLastSlice);
1309
+
1310
+ //
1311
+ // Write the bytes associated with this slice.
1312
+ //
1313
+ _stream->writeBlob((*p)->bytes);
1314
+
1315
+ if((*p)->hasOptionalMembers)
1316
+ {
1317
+ _current->sliceFlags |= FLAG_HAS_OPTIONAL_MEMBERS;
1318
+ }
1319
+
1320
+ //
1321
+ // Make sure to also re-write the instance indirection table.
1322
+ //
1323
+ _current->indirectionTable = (*p)->instances;
1324
+
1325
+ endSlice();
1326
+ }
1327
+ }
1328
+
1329
+ void
1330
+ Ice::OutputStream::EncapsEncoder11::writeInstance(const ValuePtr& v)
1331
+ {
1332
+ assert(v);
1333
+
1334
+ //
1335
+ // If the instance was already marshaled, just write it's ID.
1336
+ //
1337
+ PtrToIndexMap::const_iterator q = _marshaledMap.find(v);
1338
+ if(q != _marshaledMap.end())
1339
+ {
1340
+ _stream->writeSize(q->second);
1341
+ return;
1342
+ }
1343
+
1344
+ //
1345
+ // We haven't seen this instance previously, create a new ID,
1346
+ // insert it into the marshaled map, and write the instance.
1347
+ //
1348
+ _marshaledMap.insert(make_pair(v, ++_valueIdIndex));
1349
+
1350
+ try
1351
+ {
1352
+ v->ice_preMarshal();
1353
+ }
1354
+ catch(const std::exception& ex)
1355
+ {
1356
+ Warning out(_stream->instance()->initializationData().logger);
1357
+ out << "std::exception raised by ice_preMarshal:\n" << ex;
1358
+ }
1359
+ catch(...)
1360
+ {
1361
+ Warning out(_stream->instance()->initializationData().logger);
1362
+ out << "unknown exception raised by ice_preMarshal";
1363
+ }
1364
+
1365
+ _stream->writeSize(1); // Object instance marker.
1366
+ v->_iceWrite(_stream);
1367
+ }