zeroc-ice 3.6.5 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (752) hide show
  1. checksums.yaml +4 -4
  2. data/BZIP2_LICENSE +42 -0
  3. data/ICE_LICENSE +17 -17
  4. data/LICENSE +12 -12
  5. data/bin/slice2rb +1 -1
  6. data/ext/Communicator.cpp +150 -53
  7. data/ext/Communicator.h +1 -1
  8. data/ext/Config.h +2 -12
  9. data/ext/Connection.cpp +89 -68
  10. data/ext/Connection.h +1 -1
  11. data/ext/Endpoint.cpp +16 -45
  12. data/ext/Endpoint.h +1 -1
  13. data/ext/ImplicitContext.cpp +1 -5
  14. data/ext/ImplicitContext.h +1 -1
  15. data/ext/Init.cpp +4 -1
  16. data/ext/Logger.cpp +1 -1
  17. data/ext/Logger.h +1 -1
  18. data/ext/Operation.cpp +33 -44
  19. data/ext/Operation.h +1 -1
  20. data/ext/Properties.cpp +1 -1
  21. data/ext/Properties.h +1 -1
  22. data/ext/Proxy.cpp +22 -57
  23. data/ext/Proxy.h +1 -1
  24. data/ext/Slice.cpp +5 -5
  25. data/ext/Slice.h +1 -1
  26. data/ext/Types.cpp +244 -171
  27. data/ext/Types.h +118 -66
  28. data/ext/Util.cpp +13 -9
  29. data/ext/Util.h +10 -10
  30. data/ext/ValueFactoryManager.cpp +445 -0
  31. data/ext/ValueFactoryManager.h +100 -0
  32. data/ext/extconf.rb +47 -45
  33. data/ext/ice/bzip2/blocksort.c +1094 -0
  34. data/ext/ice/bzip2/bzlib.c +1572 -0
  35. data/ext/ice/bzip2/bzlib.h +282 -0
  36. data/ext/ice/bzip2/bzlib_private.h +509 -0
  37. data/ext/ice/bzip2/compress.c +672 -0
  38. data/ext/ice/bzip2/crctable.c +104 -0
  39. data/ext/ice/bzip2/decompress.c +646 -0
  40. data/ext/ice/bzip2/huffman.c +205 -0
  41. data/ext/ice/bzip2/randtable.c +84 -0
  42. data/ext/ice/cpp/include/Ice/Application.h +77 -60
  43. data/ext/ice/cpp/include/Ice/AsyncResult.h +34 -318
  44. data/ext/ice/cpp/include/Ice/AsyncResultF.h +4 -2
  45. data/ext/ice/cpp/include/Ice/BatchRequestInterceptor.h +5 -10
  46. data/ext/ice/cpp/include/Ice/BatchRequestQueueF.h +1 -1
  47. data/ext/ice/cpp/include/Ice/Buffer.h +10 -10
  48. data/ext/ice/cpp/include/Ice/CommunicatorAsync.h +14 -12
  49. data/ext/ice/cpp/include/Ice/Comparable.h +130 -0
  50. data/ext/ice/cpp/include/Ice/Config.h +7 -36
  51. data/ext/ice/cpp/include/Ice/ConnectionAsync.h +107 -11
  52. data/ext/ice/cpp/include/Ice/ConnectionIF.h +5 -1
  53. data/ext/ice/cpp/include/Ice/ConsoleUtil.h +28 -0
  54. data/ext/ice/cpp/include/Ice/{DefaultObjectFactory.h → DefaultValueFactory.h} +28 -14
  55. data/ext/ice/cpp/include/Ice/DispatchInterceptor.h +4 -6
  56. data/ext/ice/cpp/include/Ice/Dispatcher.h +14 -13
  57. data/ext/ice/cpp/include/Ice/DynamicLibrary.h +7 -5
  58. data/ext/ice/cpp/include/Ice/DynamicLibraryF.h +1 -1
  59. data/ext/ice/cpp/include/Ice/Exception.h +66 -56
  60. data/ext/ice/cpp/include/Ice/ExceptionHelpers.h +69 -0
  61. data/ext/ice/cpp/include/Ice/FactoryTable.h +11 -12
  62. data/ext/ice/cpp/include/Ice/FactoryTableInit.h +27 -25
  63. data/ext/ice/cpp/include/Ice/Format.h +6 -1
  64. data/ext/ice/cpp/include/Ice/Functional.h +33 -33
  65. data/ext/ice/cpp/include/Ice/GCObject.h +9 -5
  66. data/ext/ice/cpp/include/Ice/Handle.h +6 -11
  67. data/ext/ice/cpp/include/Ice/Ice.h +9 -5
  68. data/ext/ice/cpp/include/{IceUtil → Ice}/IconvStringConverter.h +108 -62
  69. data/ext/ice/cpp/include/Ice/Incoming.h +109 -33
  70. data/ext/ice/cpp/include/Ice/IncomingAsync.h +63 -23
  71. data/ext/ice/cpp/include/Ice/IncomingAsyncF.h +7 -1
  72. data/ext/ice/cpp/include/Ice/Initialize.h +178 -38
  73. data/ext/ice/cpp/include/Ice/InputStream.h +994 -0
  74. data/ext/ice/cpp/include/Ice/InstanceF.h +1 -2
  75. data/ext/ice/cpp/include/Ice/InterfaceByValue.h +46 -0
  76. data/ext/ice/cpp/include/Ice/LocalObject.h +9 -9
  77. data/ext/ice/cpp/include/Ice/LocalObjectF.h +1 -1
  78. data/ext/ice/cpp/include/Ice/LoggerUtil.h +20 -14
  79. data/ext/ice/cpp/include/Ice/MetricsAdminI.h +114 -65
  80. data/ext/ice/cpp/include/Ice/MetricsFunctional.h +23 -5
  81. data/ext/ice/cpp/include/Ice/MetricsObserverI.h +99 -26
  82. data/ext/ice/cpp/include/Ice/NativePropertiesAdmin.h +17 -4
  83. data/ext/ice/cpp/include/Ice/Object.h +105 -56
  84. data/ext/ice/cpp/include/Ice/ObjectF.h +8 -3
  85. data/ext/ice/cpp/include/Ice/ObserverHelper.h +18 -8
  86. data/ext/ice/cpp/include/Ice/Optional.h +1084 -0
  87. data/ext/ice/cpp/include/Ice/OutgoingAsync.h +655 -84
  88. data/ext/ice/cpp/include/Ice/OutgoingAsyncF.h +12 -6
  89. data/ext/ice/cpp/include/Ice/OutputStream.h +753 -0
  90. data/ext/ice/cpp/include/Ice/Protocol.h +19 -12
  91. data/ext/ice/cpp/include/Ice/Proxy.h +1329 -717
  92. data/ext/ice/cpp/include/Ice/ProxyF.h +11 -33
  93. data/ext/ice/cpp/include/Ice/ProxyFactoryF.h +1 -1
  94. data/ext/ice/cpp/include/Ice/ProxyHandle.h +34 -50
  95. data/ext/ice/cpp/include/Ice/ReferenceF.h +1 -1
  96. data/ext/ice/cpp/include/Ice/RegisterPlugins.h +22 -3
  97. data/ext/ice/cpp/include/Ice/RequestHandlerF.h +10 -4
  98. data/ext/ice/cpp/include/Ice/ResponseHandlerF.h +6 -1
  99. data/ext/ice/cpp/include/{IceUtil → Ice}/SHA1.h +16 -16
  100. data/ext/ice/cpp/include/Ice/ServantManagerF.h +1 -1
  101. data/ext/ice/cpp/include/Ice/Service.h +13 -18
  102. data/ext/ice/cpp/include/Ice/SliceChecksums.h +1 -1
  103. data/ext/ice/cpp/include/Ice/SlicedData.h +46 -20
  104. data/ext/ice/cpp/include/Ice/SlicedDataF.h +14 -6
  105. data/ext/ice/cpp/include/Ice/StreamHelpers.h +159 -49
  106. data/ext/ice/cpp/include/Ice/StringConverter.h +52 -0
  107. data/ext/ice/cpp/include/Ice/ThreadPoolF.h +1 -1
  108. data/{slice/Ice/ObjectFactoryF.ice → ext/ice/cpp/include/Ice/UUID.h} +9 -7
  109. data/ext/ice/cpp/include/{IceUtil → Ice}/UniquePtr.h +21 -22
  110. data/ext/ice/cpp/include/Ice/UniqueRef.h +98 -0
  111. data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +40 -8
  112. data/ext/ice/cpp/include/Ice/Value.h +104 -0
  113. data/{slice/Freeze/ConnectionF.ice → ext/ice/cpp/include/Ice/ValueF.h} +11 -7
  114. data/ext/ice/cpp/include/IceSSL/Config.h +8 -23
  115. data/ext/ice/cpp/include/IceSSL/IceSSL.h +17 -6
  116. data/ext/ice/cpp/include/IceSSL/OpenSSL.h +130 -0
  117. data/ext/ice/cpp/include/IceSSL/Plugin.h +172 -259
  118. data/ext/ice/cpp/include/IceSSL/SChannel.h +66 -0
  119. data/ext/ice/cpp/include/IceSSL/SecureTransport.h +66 -0
  120. data/ext/ice/cpp/include/IceSSL/UWP.h +58 -0
  121. data/ext/ice/cpp/include/IceUtil/Atomic.h +8 -10
  122. data/ext/ice/cpp/include/IceUtil/Cond.h +17 -18
  123. data/ext/ice/cpp/include/IceUtil/Config.h +138 -39
  124. data/ext/ice/cpp/include/IceUtil/ConsoleUtil.h +97 -0
  125. data/ext/ice/cpp/include/IceUtil/CountDownLatch.h +5 -5
  126. data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +23 -17
  127. data/ext/ice/cpp/include/IceUtil/DisableWarnings.h +1 -3
  128. data/ext/ice/cpp/include/IceUtil/Exception.h +157 -67
  129. data/ext/ice/cpp/include/IceUtil/FileUtil.h +148 -0
  130. data/ext/ice/cpp/include/IceUtil/Functional.h +1 -2
  131. data/ext/ice/cpp/include/IceUtil/Handle.h +11 -11
  132. data/ext/ice/cpp/include/IceUtil/IceUtil.h +4 -10
  133. data/ext/ice/cpp/include/IceUtil/InputUtil.h +3 -3
  134. data/ext/ice/cpp/include/IceUtil/Iterator.h +2 -2
  135. data/ext/ice/cpp/include/IceUtil/Lock.h +8 -10
  136. data/ext/ice/cpp/include/IceUtil/Monitor.h +1 -2
  137. data/ext/ice/cpp/include/IceUtil/Mutex.h +17 -11
  138. data/ext/ice/cpp/include/IceUtil/MutexProtocol.h +2 -2
  139. data/ext/ice/cpp/include/IceUtil/MutexPtrLock.h +4 -4
  140. data/ext/ice/cpp/include/IceUtil/MutexPtrTryLock.h +4 -4
  141. data/ext/ice/cpp/include/IceUtil/Optional.h +32 -18
  142. data/ext/ice/cpp/include/IceUtil/Options.h +17 -18
  143. data/ext/ice/cpp/include/IceUtil/OutputUtil.h +55 -29
  144. data/ext/ice/cpp/include/IceUtil/PopDisableWarnings.h +6 -6
  145. data/ext/ice/cpp/include/IceUtil/PushDisableWarnings.h +11 -10
  146. data/ext/ice/cpp/include/IceUtil/Random.h +3 -3
  147. data/ext/ice/cpp/include/IceUtil/RecMutex.h +7 -8
  148. data/ext/ice/cpp/include/IceUtil/ResourceConfig.h +58 -0
  149. data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +1 -9
  150. data/ext/ice/cpp/include/IceUtil/ScopedArray.h +8 -2
  151. data/ext/ice/cpp/include/IceUtil/Shared.h +5 -7
  152. data/ext/ice/cpp/{src → include}/IceUtil/StopWatch.h +2 -2
  153. data/ext/ice/cpp/include/IceUtil/StringConverter.h +77 -72
  154. data/ext/ice/cpp/include/IceUtil/StringUtil.h +32 -21
  155. data/ext/ice/cpp/include/IceUtil/Thread.h +10 -12
  156. data/ext/ice/cpp/include/IceUtil/ThreadException.h +33 -42
  157. data/ext/ice/cpp/include/IceUtil/Time.h +3 -3
  158. data/ext/ice/cpp/include/IceUtil/Timer.h +14 -13
  159. data/ext/ice/cpp/include/IceUtil/UUID.h +2 -2
  160. data/ext/ice/cpp/include/IceUtil/UndefSysMacros.h +1 -1
  161. data/ext/ice/cpp/include/{Ice → generated/Ice}/BuiltinSequences.h +41 -8
  162. data/ext/ice/cpp/include/generated/Ice/Communicator.h +364 -0
  163. data/ext/ice/cpp/include/{Ice → generated/Ice}/CommunicatorF.h +40 -8
  164. data/ext/ice/cpp/include/generated/Ice/Connection.h +872 -0
  165. data/ext/ice/cpp/include/{Ice → generated/Ice}/ConnectionF.h +46 -8
  166. data/ext/ice/cpp/include/{Ice → generated/Ice}/Current.h +71 -8
  167. data/ext/ice/cpp/include/generated/Ice/Endpoint.h +582 -0
  168. data/ext/ice/cpp/include/{Ice → generated/Ice}/EndpointF.h +62 -8
  169. data/ext/ice/cpp/include/{Ice → generated/Ice}/EndpointTypes.h +31 -16
  170. data/ext/ice/cpp/include/{Ice → generated/Ice}/FacetMap.h +23 -8
  171. data/ext/ice/cpp/include/generated/Ice/Identity.h +221 -0
  172. data/ext/ice/cpp/include/{Ice → generated/Ice}/ImplicitContext.h +72 -13
  173. data/ext/ice/cpp/include/{Ice → generated/Ice}/ImplicitContextF.h +40 -8
  174. data/ext/ice/cpp/include/generated/Ice/Instrumentation.h +602 -0
  175. data/ext/ice/cpp/include/{Ice → generated/Ice}/InstrumentationF.h +54 -8
  176. data/ext/ice/cpp/include/generated/Ice/LocalException.h +2802 -0
  177. data/ext/ice/cpp/include/generated/Ice/Locator.h +2036 -0
  178. data/ext/ice/cpp/include/{Ice → generated/Ice}/LocatorF.h +53 -12
  179. data/ext/ice/cpp/include/{Ice → generated/Ice}/Logger.h +71 -13
  180. data/ext/ice/cpp/include/{Ice → generated/Ice}/LoggerF.h +40 -8
  181. data/ext/ice/cpp/include/generated/Ice/Metrics.h +2649 -0
  182. data/ext/ice/cpp/include/generated/Ice/ObjectAdapter.h +302 -0
  183. data/ext/ice/cpp/include/{Ice → generated/Ice}/ObjectAdapterF.h +40 -8
  184. data/ext/ice/cpp/include/generated/Ice/ObjectFactory.h +142 -0
  185. data/ext/ice/cpp/include/generated/Ice/Plugin.h +197 -0
  186. data/ext/ice/cpp/include/{Ice → generated/Ice}/PluginF.h +43 -8
  187. data/ext/ice/cpp/include/generated/Ice/Process.h +536 -0
  188. data/ext/ice/cpp/include/{Ice → generated/Ice}/ProcessF.h +45 -10
  189. data/ext/ice/cpp/include/{Ice → generated/Ice}/Properties.h +88 -21
  190. data/ext/ice/cpp/include/generated/Ice/PropertiesAdmin.h +749 -0
  191. data/ext/ice/cpp/include/{Ice → generated/Ice}/PropertiesF.h +48 -10
  192. data/ext/ice/cpp/include/generated/Ice/RemoteLogger.h +1449 -0
  193. data/ext/ice/cpp/include/generated/Ice/Router.h +1032 -0
  194. data/ext/ice/cpp/include/{Ice → generated/Ice}/RouterF.h +45 -10
  195. data/ext/ice/cpp/include/{Ice → generated/Ice}/ServantLocator.h +65 -13
  196. data/ext/ice/cpp/include/{Ice → generated/Ice}/ServantLocatorF.h +40 -8
  197. data/ext/ice/cpp/include/{Ice → generated/Ice}/SliceChecksumDict.h +23 -8
  198. data/ext/ice/cpp/include/generated/Ice/ValueFactory.h +169 -0
  199. data/ext/ice/cpp/include/generated/Ice/Version.h +334 -0
  200. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +172 -0
  201. data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +98 -0
  202. data/ext/ice/cpp/include/generated/IceSSL/EndpointInfo.h +156 -0
  203. data/ext/ice/cpp/src/Ice/ACM.cpp +18 -14
  204. data/ext/ice/cpp/src/Ice/ACM.h +9 -2
  205. data/ext/ice/cpp/{include → src}/Ice/ACMF.h +10 -5
  206. data/ext/ice/cpp/src/Ice/Acceptor.cpp +6 -1
  207. data/ext/ice/cpp/src/Ice/Acceptor.h +4 -3
  208. data/ext/ice/cpp/src/Ice/AcceptorF.h +1 -1
  209. data/ext/ice/cpp/src/{IceUtil → Ice}/ArgVector.cpp +9 -9
  210. data/ext/ice/cpp/src/{IceUtil → Ice}/ArgVector.h +7 -7
  211. data/ext/ice/cpp/src/Ice/AsyncResult.cpp +15 -538
  212. data/ext/ice/cpp/src/Ice/Base64.cpp +11 -11
  213. data/ext/ice/cpp/src/Ice/Base64.h +1 -1
  214. data/ext/ice/cpp/src/Ice/BatchRequestQueue.cpp +40 -12
  215. data/ext/ice/cpp/src/Ice/BatchRequestQueue.h +15 -10
  216. data/ext/ice/cpp/src/Ice/Buffer.cpp +74 -12
  217. data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +20 -6
  218. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +85 -190
  219. data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.h +17 -18
  220. data/ext/ice/cpp/src/Ice/Communicator.cpp +39 -8
  221. data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +27 -5
  222. data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +271 -104
  223. data/ext/ice/cpp/src/Ice/CommunicatorI.h +84 -28
  224. data/ext/ice/cpp/src/{IceUtil → Ice}/Cond.cpp +3 -3
  225. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.cpp +58 -125
  226. data/ext/ice/cpp/src/Ice/ConnectRequestHandler.h +11 -22
  227. data/ext/ice/cpp/src/Ice/ConnectRequestHandlerF.h +6 -2
  228. data/ext/ice/cpp/src/Ice/Connection.cpp +88 -8
  229. data/ext/ice/cpp/src/Ice/ConnectionF.cpp +27 -5
  230. data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +158 -80
  231. data/ext/ice/cpp/src/Ice/ConnectionFactory.h +41 -23
  232. data/ext/ice/cpp/{include → src}/Ice/ConnectionFactoryF.h +8 -3
  233. data/ext/ice/cpp/src/Ice/ConnectionI.cpp +707 -653
  234. data/ext/ice/cpp/src/Ice/ConnectionI.h +97 -69
  235. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +2 -15
  236. data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.h +4 -3
  237. data/ext/ice/cpp/src/Ice/Connector.cpp +6 -1
  238. data/ext/ice/cpp/src/Ice/Connector.h +4 -3
  239. data/ext/ice/cpp/src/Ice/ConnectorF.h +1 -1
  240. data/ext/ice/cpp/src/{IceUtil → Ice}/CountDownLatch.cpp +4 -4
  241. data/ext/ice/cpp/src/Ice/Current.cpp +29 -6
  242. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +6 -5
  243. data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.h +1 -1
  244. data/ext/ice/cpp/src/Ice/DefaultsAndOverridesF.h +1 -1
  245. data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +5 -25
  246. data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +29 -19
  247. data/ext/ice/cpp/src/Ice/Endpoint.cpp +85 -6
  248. data/ext/ice/cpp/src/Ice/EndpointF.cpp +27 -5
  249. data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +152 -1
  250. data/ext/ice/cpp/src/Ice/EndpointFactory.h +72 -6
  251. data/ext/ice/cpp/src/Ice/EndpointFactoryF.h +1 -1
  252. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.cpp +35 -19
  253. data/ext/ice/cpp/src/Ice/EndpointFactoryManager.h +10 -4
  254. data/ext/ice/cpp/src/Ice/EndpointFactoryManagerF.h +1 -1
  255. data/ext/ice/cpp/src/Ice/EndpointI.cpp +17 -1
  256. data/ext/ice/cpp/src/Ice/EndpointI.h +35 -9
  257. data/ext/ice/cpp/src/Ice/EndpointIF.h +18 -5
  258. data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +18 -6
  259. data/ext/ice/cpp/src/Ice/EventHandler.cpp +6 -4
  260. data/ext/ice/cpp/src/Ice/EventHandler.h +13 -8
  261. data/ext/ice/cpp/src/Ice/EventHandlerF.h +5 -2
  262. data/ext/ice/cpp/src/Ice/Exception.cpp +95 -86
  263. data/ext/ice/cpp/src/Ice/FacetMap.cpp +20 -6
  264. data/ext/ice/cpp/src/Ice/FactoryTable.cpp +37 -28
  265. data/ext/ice/cpp/src/Ice/FactoryTableInit.cpp +2 -4
  266. data/ext/ice/cpp/src/Ice/GCObject.cpp +28 -25
  267. data/ext/ice/cpp/src/Ice/HashUtil.h +2 -3
  268. data/ext/ice/cpp/src/Ice/HttpParser.cpp +1 -2
  269. data/ext/ice/cpp/src/Ice/HttpParser.h +1 -1
  270. data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +92 -53
  271. data/ext/ice/cpp/src/Ice/IPEndpointI.h +19 -10
  272. data/ext/ice/cpp/src/Ice/IPEndpointIF.h +6 -2
  273. data/ext/ice/cpp/src/Ice/IconvStringConverter.cpp +56 -0
  274. data/ext/ice/cpp/src/Ice/Identity.cpp +24 -10
  275. data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +37 -6
  276. data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +27 -5
  277. data/ext/ice/cpp/src/Ice/ImplicitContextI.cpp +14 -14
  278. data/ext/ice/cpp/src/Ice/ImplicitContextI.h +7 -5
  279. data/ext/ice/cpp/src/Ice/Incoming.cpp +276 -245
  280. data/ext/ice/cpp/src/Ice/IncomingAsync.cpp +104 -209
  281. data/ext/ice/cpp/src/Ice/IncomingRequest.h +5 -4
  282. data/ext/ice/cpp/src/Ice/Initialize.cpp +299 -172
  283. data/ext/ice/cpp/src/Ice/InputStream.cpp +2773 -0
  284. data/ext/ice/cpp/src/Ice/Instance.cpp +191 -231
  285. data/ext/ice/cpp/src/Ice/Instance.h +30 -18
  286. data/ext/ice/cpp/src/Ice/Instrumentation.cpp +106 -7
  287. data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +27 -5
  288. data/ext/ice/cpp/src/Ice/InstrumentationI.cpp +117 -99
  289. data/ext/ice/cpp/src/Ice/InstrumentationI.h +30 -31
  290. data/ext/ice/cpp/src/Ice/LocalException.cpp +1190 -416
  291. data/ext/ice/cpp/src/Ice/LocalObject.cpp +1 -2
  292. data/ext/ice/cpp/src/Ice/Locator.cpp +1167 -1215
  293. data/ext/ice/cpp/src/Ice/LocatorF.cpp +29 -6
  294. data/ext/ice/cpp/src/Ice/LocatorInfo.cpp +129 -163
  295. data/ext/ice/cpp/src/Ice/LocatorInfo.h +29 -29
  296. data/ext/ice/cpp/src/Ice/LocatorInfoF.h +1 -1
  297. data/ext/ice/cpp/src/Ice/Logger.cpp +35 -5
  298. data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +178 -73
  299. data/ext/ice/cpp/src/Ice/LoggerAdminI.h +4 -4
  300. data/ext/ice/cpp/src/Ice/LoggerF.cpp +27 -5
  301. data/ext/ice/cpp/src/Ice/LoggerI.cpp +14 -44
  302. data/ext/ice/cpp/src/Ice/LoggerI.h +7 -13
  303. data/ext/ice/cpp/src/Ice/LoggerUtil.cpp +10 -12
  304. data/ext/ice/cpp/src/Ice/Metrics.cpp +1059 -1069
  305. data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +49 -19
  306. data/ext/ice/cpp/src/Ice/MetricsObserverI.cpp +1 -2
  307. data/ext/ice/cpp/src/Ice/Network.cpp +534 -170
  308. data/ext/ice/cpp/src/Ice/Network.h +100 -23
  309. data/ext/ice/cpp/src/Ice/NetworkF.h +2 -2
  310. data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +21 -14
  311. data/ext/ice/cpp/src/Ice/NetworkProxy.h +5 -2
  312. data/ext/ice/cpp/src/Ice/NetworkProxyF.h +1 -1
  313. data/ext/ice/cpp/src/Ice/Object.cpp +217 -221
  314. data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +41 -6
  315. data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +27 -5
  316. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +35 -14
  317. data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.h +13 -7
  318. data/ext/ice/cpp/{include → src}/Ice/ObjectAdapterFactoryF.h +5 -1
  319. data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +184 -58
  320. data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +32 -26
  321. data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +37 -6
  322. data/ext/ice/cpp/src/Ice/ObserverHelper.cpp +9 -32
  323. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.cpp +40 -18
  324. data/ext/ice/cpp/src/Ice/OpaqueEndpointI.h +14 -5
  325. data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +803 -365
  326. data/ext/ice/cpp/src/Ice/OutputStream.cpp +1399 -0
  327. data/ext/ice/cpp/src/Ice/Plugin.cpp +45 -6
  328. data/ext/ice/cpp/src/Ice/PluginF.cpp +27 -5
  329. data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +13 -13
  330. data/ext/ice/cpp/src/Ice/PluginManagerI.h +5 -6
  331. data/ext/ice/cpp/src/Ice/Process.cpp +256 -114
  332. data/ext/ice/cpp/src/Ice/ProcessF.cpp +29 -6
  333. data/ext/ice/cpp/src/Ice/Properties.cpp +38 -8
  334. data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +340 -328
  335. data/ext/ice/cpp/src/Ice/PropertiesAdminI.cpp +81 -17
  336. data/ext/ice/cpp/src/Ice/PropertiesAdminI.h +29 -5
  337. data/ext/ice/cpp/src/Ice/PropertiesF.cpp +29 -6
  338. data/ext/ice/cpp/src/Ice/PropertiesI.cpp +25 -26
  339. data/ext/ice/cpp/src/Ice/PropertiesI.h +8 -11
  340. data/ext/ice/cpp/src/Ice/PropertyNames.cpp +107 -50
  341. data/ext/ice/cpp/src/Ice/PropertyNames.h +4 -2
  342. data/ext/ice/cpp/src/Ice/Protocol.cpp +2 -2
  343. data/ext/ice/cpp/src/Ice/ProtocolInstance.cpp +37 -2
  344. data/ext/ice/cpp/src/Ice/ProtocolInstance.h +9 -20
  345. data/ext/ice/cpp/src/Ice/ProtocolInstanceF.h +1 -1
  346. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +6 -1
  347. data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.h +3 -1
  348. data/ext/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +1 -1
  349. data/ext/ice/cpp/src/Ice/Proxy.cpp +690 -964
  350. data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +23 -32
  351. data/ext/ice/cpp/src/Ice/ProxyFactory.h +16 -11
  352. data/ext/ice/cpp/src/Ice/Reference.cpp +75 -69
  353. data/ext/ice/cpp/src/Ice/Reference.h +27 -22
  354. data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +18 -21
  355. data/ext/ice/cpp/src/Ice/ReferenceFactory.h +12 -12
  356. data/ext/ice/cpp/src/Ice/ReferenceFactoryF.h +1 -1
  357. data/ext/ice/cpp/src/Ice/RegisterPluginsInit.cpp +18 -4
  358. data/ext/ice/cpp/src/Ice/RegisterPluginsInit.h +1 -1
  359. data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +672 -552
  360. data/ext/ice/cpp/src/Ice/ReplyStatus.h +1 -1
  361. data/ext/ice/cpp/src/Ice/RequestHandler.cpp +5 -3
  362. data/ext/ice/cpp/src/Ice/RequestHandler.h +10 -13
  363. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.cpp +10 -6
  364. data/ext/ice/cpp/src/Ice/RequestHandlerFactory.h +2 -2
  365. data/ext/ice/cpp/src/Ice/ResponseHandler.cpp +3 -6
  366. data/ext/ice/cpp/src/Ice/ResponseHandler.h +16 -7
  367. data/ext/ice/cpp/src/Ice/RetryQueue.cpp +6 -12
  368. data/ext/ice/cpp/src/Ice/RetryQueue.h +7 -6
  369. data/ext/ice/cpp/src/Ice/RetryQueueF.h +1 -1
  370. data/ext/ice/cpp/src/Ice/Router.cpp +523 -474
  371. data/ext/ice/cpp/src/Ice/RouterF.cpp +29 -6
  372. data/ext/ice/cpp/src/Ice/RouterInfo.cpp +91 -70
  373. data/ext/ice/cpp/src/Ice/RouterInfo.h +43 -32
  374. data/ext/ice/cpp/src/Ice/RouterInfoF.h +1 -1
  375. data/ext/ice/cpp/src/{IceUtil → Ice}/SHA1.cpp +21 -21
  376. data/ext/ice/cpp/src/Ice/Selector.cpp +989 -923
  377. data/ext/ice/cpp/src/Ice/Selector.h +100 -147
  378. data/ext/ice/cpp/src/Ice/ServantLocator.cpp +37 -6
  379. data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +27 -5
  380. data/ext/ice/cpp/src/Ice/ServantManager.cpp +9 -9
  381. data/ext/ice/cpp/src/Ice/ServantManager.h +1 -1
  382. data/ext/ice/cpp/src/Ice/SharedContext.h +2 -2
  383. data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +20 -6
  384. data/ext/ice/cpp/src/Ice/SliceChecksums.cpp +2 -2
  385. data/ext/ice/cpp/src/Ice/SlicedData.cpp +72 -20
  386. data/ext/ice/cpp/src/Ice/StreamSocket.cpp +173 -18
  387. data/ext/ice/cpp/src/Ice/StreamSocket.h +13 -4
  388. data/ext/ice/cpp/src/Ice/StringConverterPlugin.cpp +48 -17
  389. data/ext/ice/cpp/src/Ice/StringUtil.h +35 -0
  390. data/ext/ice/cpp/src/Ice/SysLoggerI.cpp +8 -4
  391. data/ext/ice/cpp/src/Ice/SysLoggerI.h +2 -3
  392. data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +158 -32
  393. data/ext/ice/cpp/src/Ice/TcpAcceptor.h +12 -5
  394. data/ext/ice/cpp/src/Ice/TcpConnector.cpp +1 -7
  395. data/ext/ice/cpp/src/Ice/TcpConnector.h +1 -2
  396. data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +40 -32
  397. data/ext/ice/cpp/src/Ice/TcpEndpointI.h +11 -8
  398. data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +12 -27
  399. data/ext/ice/cpp/src/Ice/TcpTransceiver.h +7 -10
  400. data/ext/ice/cpp/src/{IceUtil → Ice}/Thread.cpp +24 -41
  401. data/ext/ice/cpp/src/Ice/ThreadPool.cpp +175 -267
  402. data/ext/ice/cpp/src/Ice/ThreadPool.h +38 -43
  403. data/ext/ice/cpp/src/{IceUtil → Ice}/Timer.cpp +28 -21
  404. data/ext/ice/cpp/src/Ice/TraceLevels.cpp +2 -2
  405. data/ext/ice/cpp/src/Ice/TraceLevels.h +1 -1
  406. data/ext/ice/cpp/src/Ice/TraceLevelsF.h +2 -2
  407. data/ext/ice/cpp/src/Ice/TraceUtil.cpp +53 -31
  408. data/ext/ice/cpp/src/Ice/TraceUtil.h +13 -6
  409. data/ext/ice/cpp/src/Ice/Transceiver.cpp +1 -2
  410. data/ext/ice/cpp/src/Ice/Transceiver.h +8 -7
  411. data/ext/ice/cpp/src/Ice/TransceiverF.h +1 -1
  412. data/ext/ice/cpp/src/Ice/UdpConnector.cpp +2 -8
  413. data/ext/ice/cpp/src/Ice/UdpConnector.h +1 -2
  414. data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +92 -31
  415. data/ext/ice/cpp/src/Ice/UdpEndpointI.h +12 -4
  416. data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +150 -179
  417. data/ext/ice/cpp/src/Ice/UdpTransceiver.h +15 -17
  418. data/ext/ice/cpp/src/Ice/Value.cpp +81 -0
  419. data/ext/ice/cpp/src/Ice/ValueFactory.cpp +84 -0
  420. data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.cpp +70 -0
  421. data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.h +42 -0
  422. data/ext/ice/cpp/src/Ice/Version.cpp +24 -14
  423. data/ext/ice/cpp/src/Ice/VirtualShared.h +43 -0
  424. data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +3 -9
  425. data/ext/ice/cpp/src/Ice/WSAcceptor.h +3 -7
  426. data/ext/ice/cpp/src/Ice/WSConnector.cpp +5 -11
  427. data/ext/ice/cpp/src/Ice/WSConnector.h +3 -6
  428. data/ext/ice/cpp/src/Ice/WSEndpoint.cpp +185 -80
  429. data/ext/ice/cpp/src/Ice/WSEndpoint.h +21 -31
  430. data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +41 -37
  431. data/ext/ice/cpp/src/Ice/WSTransceiver.h +7 -21
  432. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +526 -264
  433. data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +341 -455
  434. data/ext/ice/cpp/src/IceDiscovery/LocatorI.cpp +86 -26
  435. data/ext/ice/cpp/src/IceDiscovery/LocatorI.h +59 -23
  436. data/ext/ice/cpp/src/IceDiscovery/LookupI.cpp +315 -61
  437. data/ext/ice/cpp/src/IceDiscovery/LookupI.h +83 -36
  438. data/ext/ice/cpp/src/IceDiscovery/PluginI.cpp +57 -59
  439. data/ext/ice/cpp/src/IceDiscovery/PluginI.h +3 -3
  440. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.cpp +396 -159
  441. data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.h +251 -355
  442. data/ext/ice/cpp/src/IceLocatorDiscovery/Plugin.h +52 -0
  443. data/ext/ice/cpp/src/IceLocatorDiscovery/PluginI.cpp +526 -131
  444. data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +19 -165
  445. data/ext/ice/cpp/src/IceSSL/AcceptorI.h +8 -17
  446. data/ext/ice/cpp/src/IceSSL/CertificateI.cpp +284 -0
  447. data/ext/ice/cpp/src/IceSSL/CertificateI.h +69 -0
  448. data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +39 -11
  449. data/ext/ice/cpp/src/{Ice/ObjectFactoryF.cpp → IceSSL/ConnectionInfoF.cpp} +31 -9
  450. data/ext/ice/cpp/src/IceSSL/ConnectorI.cpp +14 -56
  451. data/ext/ice/cpp/src/IceSSL/ConnectorI.h +6 -13
  452. data/ext/ice/cpp/src/IceSSL/EndpointI.cpp +205 -197
  453. data/ext/ice/cpp/src/IceSSL/EndpointI.h +41 -33
  454. data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +39 -10
  455. data/ext/ice/cpp/src/IceSSL/Instance.cpp +1 -6
  456. data/ext/ice/cpp/src/IceSSL/Instance.h +7 -7
  457. data/ext/ice/cpp/src/IceSSL/InstanceF.h +11 -7
  458. data/ext/ice/cpp/src/IceSSL/OpenSSLCertificateI.cpp +588 -0
  459. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +117 -152
  460. data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.h +64 -0
  461. data/ext/ice/cpp/src/IceSSL/OpenSSLEngineF.h +32 -0
  462. data/ext/ice/cpp/src/IceSSL/OpenSSLPluginI.cpp +132 -0
  463. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +400 -89
  464. data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +36 -21
  465. data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.cpp +291 -0
  466. data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.h +63 -0
  467. data/ext/ice/cpp/src/IceSSL/PluginI.cpp +71 -41
  468. data/ext/ice/cpp/src/IceSSL/PluginI.h +13 -18
  469. data/ext/ice/cpp/src/IceSSL/RFC2253.cpp +9 -54
  470. data/ext/ice/cpp/src/IceSSL/RFC2253.h +7 -7
  471. data/ext/ice/cpp/src/IceSSL/SChannelCertificateI.cpp +585 -0
  472. data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +491 -75
  473. data/ext/ice/cpp/src/IceSSL/SChannelEngine.h +126 -0
  474. data/ext/ice/cpp/src/IceSSL/SChannelEngineF.h +32 -0
  475. data/ext/ice/cpp/src/IceSSL/SChannelPluginI.cpp +78 -0
  476. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +126 -169
  477. data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.h +19 -22
  478. data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +79 -74
  479. data/ext/ice/cpp/src/IceSSL/SSLEngine.h +24 -187
  480. data/ext/ice/cpp/src/IceSSL/SSLEngineF.h +4 -19
  481. data/ext/ice/cpp/src/IceSSL/SecureTransportCertificateI.cpp +862 -0
  482. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +56 -214
  483. data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.h +60 -0
  484. data/ext/ice/cpp/src/IceSSL/SecureTransportEngineF.h +31 -0
  485. data/ext/ice/cpp/src/IceSSL/SecureTransportPluginI.cpp +80 -0
  486. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +137 -144
  487. data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +25 -28
  488. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +857 -0
  489. data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.h +46 -0
  490. data/ext/ice/cpp/src/IceSSL/TrustManager.cpp +9 -13
  491. data/ext/ice/cpp/src/IceSSL/TrustManager.h +4 -4
  492. data/ext/ice/cpp/src/IceSSL/TrustManagerF.h +3 -3
  493. data/ext/ice/cpp/src/IceSSL/UWPCertificateI.cpp +271 -0
  494. data/ext/ice/cpp/src/IceSSL/UWPEngine.cpp +343 -0
  495. data/ext/ice/cpp/src/IceSSL/UWPEngine.h +46 -0
  496. data/ext/ice/cpp/{include/Ice/ObjectFactoryManagerF.h → src/IceSSL/UWPEngineF.h} +13 -8
  497. data/ext/ice/cpp/src/IceSSL/UWPPluginI.cpp +94 -0
  498. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.cpp +388 -0
  499. data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.h +76 -0
  500. data/ext/ice/cpp/src/IceSSL/Util.cpp +66 -1256
  501. data/ext/ice/cpp/src/IceSSL/Util.h +48 -137
  502. data/ext/ice/cpp/src/IceUtil/ConsoleUtil.cpp +162 -0
  503. data/ext/ice/cpp/src/IceUtil/ConvertUTF.cpp +22 -22
  504. data/ext/ice/cpp/src/IceUtil/ConvertUTF.h +34 -26
  505. data/ext/ice/cpp/src/IceUtil/CtrlCHandler.cpp +20 -31
  506. data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +25 -116
  507. data/ext/ice/cpp/src/IceUtil/InputUtil.cpp +1 -1
  508. data/ext/ice/cpp/src/IceUtil/MutexProtocol.cpp +1 -1
  509. data/ext/ice/cpp/src/IceUtil/Options.cpp +23 -46
  510. data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +7 -6
  511. data/ext/ice/cpp/src/IceUtil/Random.cpp +13 -13
  512. data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +3 -9
  513. data/ext/ice/cpp/src/IceUtil/Shared.cpp +8 -3
  514. data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +501 -264
  515. data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +540 -235
  516. data/ext/ice/cpp/src/IceUtil/ThreadException.cpp +37 -74
  517. data/ext/ice/cpp/src/IceUtil/Time.cpp +1 -1
  518. data/ext/ice/cpp/src/IceUtil/UUID.cpp +10 -10
  519. data/ext/ice/cpp/src/IceUtil/Unicode.cpp +98 -97
  520. data/ext/ice/cpp/src/IceUtil/Unicode.h +21 -35
  521. data/ext/ice/cpp/src/IceUtil/UtilException.cpp +838 -0
  522. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +815 -163
  523. data/ext/ice/cpp/src/Slice/CPlusPlusUtil.h +76 -0
  524. data/ext/ice/cpp/src/Slice/Checksum.cpp +2 -2
  525. data/ext/ice/cpp/{include → src}/Slice/Checksum.h +2 -2
  526. data/ext/ice/cpp/src/Slice/FileTracker.cpp +25 -78
  527. data/ext/ice/cpp/{include → src}/Slice/FileTracker.h +9 -9
  528. data/ext/ice/cpp/src/Slice/Grammar.cpp +1994 -1943
  529. data/ext/ice/cpp/src/Slice/Grammar.h +44 -24
  530. data/ext/ice/cpp/src/Slice/GrammarUtil.h +14 -14
  531. data/ext/ice/cpp/src/Slice/JavaUtil.cpp +2658 -1927
  532. data/ext/ice/cpp/{include → src}/Slice/JavaUtil.h +178 -59
  533. data/ext/ice/cpp/src/Slice/MD5.cpp +1 -1
  534. data/ext/ice/cpp/src/Slice/MD5.h +1 -1
  535. data/ext/ice/cpp/src/Slice/MD5I.cpp +0 -1
  536. data/ext/ice/cpp/src/Slice/MD5I.h +1 -1
  537. data/ext/ice/cpp/src/Slice/PHPUtil.cpp +12 -15
  538. data/ext/ice/cpp/{include → src}/Slice/PHPUtil.h +6 -15
  539. data/ext/ice/cpp/src/Slice/Parser.cpp +802 -307
  540. data/ext/ice/cpp/{include → src}/Slice/Parser.h +76 -84
  541. data/ext/ice/cpp/src/Slice/Preprocessor.cpp +43 -21
  542. data/ext/ice/cpp/{include → src}/Slice/Preprocessor.h +7 -12
  543. data/ext/ice/cpp/src/Slice/Python.cpp +207 -86
  544. data/ext/ice/cpp/src/Slice/PythonUtil.cpp +683 -679
  545. data/ext/ice/cpp/{include → src}/Slice/PythonUtil.h +19 -8
  546. data/ext/ice/cpp/src/Slice/Ruby.cpp +38 -34
  547. data/ext/ice/cpp/src/Slice/RubyUtil.cpp +177 -445
  548. data/ext/ice/cpp/{include → src}/Slice/RubyUtil.h +6 -6
  549. data/ext/ice/cpp/src/Slice/Scanner.cpp +218 -306
  550. data/ext/ice/cpp/src/Slice/{Util.cpp → SliceUtil.cpp} +37 -64
  551. data/ext/ice/cpp/src/Slice/StringLiteralUtil.cpp +374 -0
  552. data/ext/ice/cpp/src/Slice/Util.h +54 -0
  553. data/ext/ice/mcpp/Makefile +5 -2
  554. data/ice.gemspec +2 -7
  555. data/lib/Glacier2.rb +1 -1
  556. data/lib/Glacier2/Metrics.rb +7 -46
  557. data/lib/Glacier2/PermissionsVerifier.rb +24 -95
  558. data/lib/Glacier2/PermissionsVerifierF.rb +3 -3
  559. data/lib/Glacier2/Router.rb +32 -74
  560. data/lib/Glacier2/RouterF.rb +3 -3
  561. data/lib/Glacier2/SSLInfo.rb +4 -7
  562. data/lib/Glacier2/Session.rb +88 -307
  563. data/lib/Ice.rb +83 -52
  564. data/lib/Ice/BuiltinSequences.rb +4 -4
  565. data/lib/Ice/Communicator.rb +56 -58
  566. data/lib/Ice/CommunicatorF.rb +3 -3
  567. data/lib/Ice/Connection.rb +153 -162
  568. data/lib/Ice/ConnectionF.rb +3 -3
  569. data/lib/Ice/Current.rb +4 -11
  570. data/lib/Ice/Endpoint.rb +57 -133
  571. data/lib/Ice/EndpointF.rb +3 -3
  572. data/lib/Ice/EndpointTypes.rb +3 -7
  573. data/lib/Ice/FacetMap.rb +4 -4
  574. data/lib/Ice/Identity.rb +5 -8
  575. data/lib/Ice/ImplicitContext.rb +5 -34
  576. data/lib/Ice/ImplicitContextF.rb +3 -3
  577. data/lib/Ice/Instrumentation.rb +23 -275
  578. data/lib/Ice/InstrumentationF.rb +3 -3
  579. data/lib/Ice/LocalException.rb +95 -141
  580. data/lib/Ice/Locator.rb +51 -165
  581. data/lib/Ice/LocatorF.rb +3 -3
  582. data/lib/Ice/Logger.rb +5 -34
  583. data/lib/Ice/LoggerF.rb +3 -3
  584. data/lib/Ice/Metrics.rb +61 -416
  585. data/lib/Ice/ObjectAdapter.rb +34 -0
  586. data/lib/Ice/ObjectAdapterF.rb +3 -3
  587. data/lib/Ice/ObjectFactory.rb +5 -30
  588. data/lib/Ice/Plugin.rb +7 -60
  589. data/lib/Ice/PluginF.rb +3 -3
  590. data/lib/Ice/Process.rb +16 -52
  591. data/lib/Ice/ProcessF.rb +3 -3
  592. data/lib/Ice/Properties.rb +5 -41
  593. data/lib/Ice/PropertiesAdmin.rb +19 -56
  594. data/lib/Ice/PropertiesF.rb +3 -3
  595. data/lib/Ice/RemoteLogger.rb +34 -115
  596. data/lib/Ice/Router.rb +29 -101
  597. data/lib/Ice/RouterF.rb +3 -3
  598. data/lib/Ice/ServantLocator.rb +31 -0
  599. data/lib/Ice/{ObjectFactoryF.rb → ServantLocatorF.rb} +6 -6
  600. data/lib/Ice/SliceChecksumDict.rb +3 -3
  601. data/lib/Ice/ValueFactory.rb +33 -0
  602. data/lib/Ice/Version.rb +5 -11
  603. data/lib/IceBox.rb +1 -1
  604. data/lib/IceBox/IceBox.rb +44 -148
  605. data/lib/IceGrid.rb +1 -4
  606. data/lib/IceGrid/Admin.rb +551 -427
  607. data/lib/IceGrid/Descriptor.rb +62 -529
  608. data/lib/IceGrid/Exception.rb +24 -45
  609. data/lib/IceGrid/FileParser.rb +14 -50
  610. data/lib/IceGrid/PluginFacade.rb +40 -0
  611. data/lib/IceGrid/Registry.rb +151 -58
  612. data/lib/IceGrid/Session.rb +25 -64
  613. data/lib/IceGrid/UserAccountMapper.rb +14 -50
  614. data/lib/IcePatch2.rb +1 -1
  615. data/lib/IcePatch2/FileInfo.rb +5 -11
  616. data/lib/IcePatch2/FileServer.rb +33 -76
  617. data/lib/IceStorm.rb +1 -1
  618. data/lib/IceStorm/IceStorm.rb +79 -206
  619. data/lib/IceStorm/Metrics.rb +11 -89
  620. data/slice/Glacier2/Metrics.ice +8 -4
  621. data/slice/Glacier2/PermissionsVerifier.ice +10 -7
  622. data/slice/Glacier2/PermissionsVerifierF.ice +7 -4
  623. data/slice/Glacier2/Router.ice +10 -8
  624. data/slice/Glacier2/RouterF.ice +7 -4
  625. data/slice/Glacier2/SSLInfo.ice +8 -5
  626. data/slice/Glacier2/Session.ice +15 -13
  627. data/slice/Ice/BuiltinSequences.ice +7 -4
  628. data/slice/Ice/Communicator.ice +141 -66
  629. data/slice/Ice/CommunicatorF.ice +7 -4
  630. data/slice/Ice/Connection.ice +183 -86
  631. data/slice/Ice/ConnectionF.ice +7 -4
  632. data/slice/Ice/Current.ice +13 -9
  633. data/slice/Ice/Endpoint.ice +63 -14
  634. data/slice/Ice/EndpointF.ice +7 -4
  635. data/slice/Ice/EndpointTypes.ice +8 -6
  636. data/slice/Ice/FacetMap.ice +7 -4
  637. data/slice/Ice/Identity.ice +13 -5
  638. data/slice/Ice/ImplicitContext.ice +20 -18
  639. data/slice/Ice/ImplicitContextF.ice +7 -4
  640. data/slice/Ice/Instrumentation.ice +20 -19
  641. data/slice/Ice/InstrumentationF.ice +8 -5
  642. data/slice/Ice/LocalException.ice +87 -87
  643. data/slice/Ice/Locator.ice +19 -18
  644. data/slice/Ice/LocatorF.ice +7 -4
  645. data/slice/Ice/Logger.ice +9 -7
  646. data/slice/Ice/LoggerF.ice +7 -4
  647. data/slice/Ice/Metrics.ice +18 -14
  648. data/slice/Ice/ObjectAdapter.ice +30 -13
  649. data/slice/Ice/ObjectAdapterF.ice +7 -4
  650. data/slice/Ice/ObjectFactory.ice +15 -12
  651. data/slice/Ice/Plugin.ice +9 -6
  652. data/slice/Ice/PluginF.ice +8 -5
  653. data/slice/Ice/Process.ice +9 -6
  654. data/slice/Ice/ProcessF.ice +7 -4
  655. data/slice/Ice/Properties.ice +15 -12
  656. data/slice/Ice/PropertiesAdmin.ice +9 -5
  657. data/slice/Ice/PropertiesF.ice +7 -4
  658. data/slice/Ice/RemoteLogger.ice +33 -24
  659. data/slice/Ice/Router.ice +16 -7
  660. data/slice/Ice/RouterF.ice +7 -4
  661. data/slice/Ice/ServantLocator.ice +13 -10
  662. data/slice/Ice/ServantLocatorF.ice +7 -4
  663. data/slice/Ice/SliceChecksumDict.ice +7 -4
  664. data/slice/Ice/ValueFactory.ice +127 -0
  665. data/slice/Ice/Version.ice +9 -5
  666. data/slice/IceBT/ConnectionInfo.ice +53 -0
  667. data/slice/IceBT/EndpointInfo.ice +51 -0
  668. data/slice/IceBT/Types.ice +39 -0
  669. data/slice/IceBox/IceBox.ice +20 -21
  670. data/slice/IceDiscovery/IceDiscovery.ice +9 -5
  671. data/slice/IceGrid/Admin.ice +390 -30
  672. data/slice/IceGrid/Descriptor.ice +37 -29
  673. data/slice/IceGrid/Exception.ice +33 -27
  674. data/slice/IceGrid/FileParser.ice +9 -6
  675. data/slice/IceGrid/PluginFacade.ice +11 -9
  676. data/slice/IceGrid/Registry.ice +139 -16
  677. data/slice/IceGrid/Session.ice +10 -8
  678. data/slice/IceGrid/UserAccountMapper.ice +9 -6
  679. data/slice/IceIAP/ConnectionInfo.ice +70 -0
  680. data/slice/IceIAP/EndpointInfo.ice +64 -0
  681. data/slice/IceLocatorDiscovery/IceLocatorDiscovery.ice +9 -7
  682. data/slice/IcePatch2/FileInfo.ice +9 -8
  683. data/slice/IcePatch2/FileServer.ice +17 -13
  684. data/slice/IceSSL/ConnectionInfo.ice +14 -17
  685. data/slice/IceSSL/ConnectionInfoF.ice +24 -0
  686. data/slice/IceSSL/EndpointInfo.ice +9 -30
  687. data/slice/IceStorm/IceStorm.ice +22 -18
  688. data/slice/IceStorm/Metrics.ice +9 -5
  689. metadata +154 -120
  690. data/ext/ObjectFactory.cpp +0 -140
  691. data/ext/ObjectFactory.h +0 -50
  692. data/ext/ice/cpp/include/Ice/BasicStream.h +0 -1335
  693. data/ext/ice/cpp/include/Ice/Communicator.h +0 -200
  694. data/ext/ice/cpp/include/Ice/Connection.h +0 -497
  695. data/ext/ice/cpp/include/Ice/DeprecatedStringConverter.h +0 -62
  696. data/ext/ice/cpp/include/Ice/Endpoint.h +0 -341
  697. data/ext/ice/cpp/include/Ice/Identity.h +0 -168
  698. data/ext/ice/cpp/include/Ice/Instrumentation.h +0 -365
  699. data/ext/ice/cpp/include/Ice/LocalException.h +0 -1030
  700. data/ext/ice/cpp/include/Ice/Locator.h +0 -2193
  701. data/ext/ice/cpp/include/Ice/Metrics.h +0 -2974
  702. data/ext/ice/cpp/include/Ice/ObjectAdapter.h +0 -168
  703. data/ext/ice/cpp/include/Ice/ObjectFactory.h +0 -92
  704. data/ext/ice/cpp/include/Ice/ObjectFactoryF.h +0 -66
  705. data/ext/ice/cpp/include/Ice/Outgoing.h +0 -225
  706. data/ext/ice/cpp/include/Ice/Plugin.h +0 -125
  707. data/ext/ice/cpp/include/Ice/Process.h +0 -574
  708. data/ext/ice/cpp/include/Ice/PropertiesAdmin.h +0 -830
  709. data/ext/ice/cpp/include/Ice/RemoteLogger.h +0 -1500
  710. data/ext/ice/cpp/include/Ice/Router.h +0 -1159
  711. data/ext/ice/cpp/include/Ice/Stream.h +0 -447
  712. data/ext/ice/cpp/include/Ice/StreamF.h +0 -30
  713. data/ext/ice/cpp/include/Ice/Version.h +0 -262
  714. data/ext/ice/cpp/include/IceSSL/ConnectionInfo.h +0 -158
  715. data/ext/ice/cpp/include/IceSSL/EndpointInfo.h +0 -142
  716. data/ext/ice/cpp/include/IceUtil/AbstractMutex.h +0 -119
  717. data/ext/ice/cpp/include/IceUtil/Cache.h +0 -362
  718. data/ext/ice/cpp/include/Slice/CPlusPlusUtil.h +0 -65
  719. data/ext/ice/cpp/include/Slice/CsUtil.h +0 -92
  720. data/ext/ice/cpp/include/Slice/DotNetNames.h +0 -34
  721. data/ext/ice/cpp/include/Slice/ObjCUtil.h +0 -127
  722. data/ext/ice/cpp/include/Slice/Util.h +0 -56
  723. data/ext/ice/cpp/src/Ice/BasicStream.cpp +0 -3428
  724. data/ext/ice/cpp/src/Ice/DeprecatedStringConverter.cpp +0 -62
  725. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.cpp +0 -139
  726. data/ext/ice/cpp/src/Ice/ObjectFactoryManager.h +0 -43
  727. data/ext/ice/cpp/src/Ice/Outgoing.cpp +0 -694
  728. data/ext/ice/cpp/src/Ice/Stream.cpp +0 -53
  729. data/ext/ice/cpp/src/Ice/StreamI.cpp +0 -832
  730. data/ext/ice/cpp/src/Ice/StreamI.h +0 -198
  731. data/ext/ice/cpp/src/IceSSL/Certificate.cpp +0 -1336
  732. data/ext/ice/cpp/src/IceUtil/Exception.cpp +0 -792
  733. data/ext/ice/cpp/src/IceUtil/FileUtil.h +0 -185
  734. data/ext/ice/cpp/src/Slice/CsUtil.cpp +0 -2660
  735. data/ext/ice/cpp/src/Slice/DotNetNames.cpp +0 -146
  736. data/ext/ice/cpp/src/Slice/ObjCUtil.cpp +0 -1310
  737. data/lib/IceGrid/Locator.rb +0 -106
  738. data/lib/IceGrid/Observer.rb +0 -572
  739. data/lib/IceGrid/Query.rb +0 -169
  740. data/slice/Freeze/BackgroundSaveEvictor.ice +0 -111
  741. data/slice/Freeze/CatalogData.ice +0 -49
  742. data/slice/Freeze/Connection.ice +0 -121
  743. data/slice/Freeze/DB.ice +0 -37
  744. data/slice/Freeze/Evictor.ice +0 -346
  745. data/slice/Freeze/EvictorF.ice +0 -22
  746. data/slice/Freeze/EvictorStorage.ice +0 -72
  747. data/slice/Freeze/Exception.ice +0 -100
  748. data/slice/Freeze/Transaction.ice +0 -58
  749. data/slice/Freeze/TransactionalEvictor.ice +0 -50
  750. data/slice/IceGrid/Locator.ice +0 -57
  751. data/slice/IceGrid/Observer.ice +0 -395
  752. data/slice/IceGrid/Query.ice +0 -131
@@ -1,6 +1,6 @@
1
1
  // **********************************************************************
2
2
  //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
3
+ // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
4
4
  //
5
5
  // This copy of Ice is licensed to you under the terms described in the
6
6
  // ICE_LICENSE file included in this distribution.
@@ -1,6 +1,6 @@
1
1
  // **********************************************************************
2
2
  //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
3
+ // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
4
4
  //
5
5
  // This copy of Ice is licensed to you under the terms described in the
6
6
  // ICE_LICENSE file included in this distribution.
@@ -1,6 +1,6 @@
1
1
  // **********************************************************************
2
2
  //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
3
+ // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
4
4
  //
5
5
  // This copy of Ice is licensed to you under the terms described in the
6
6
  // ICE_LICENSE file included in this distribution.
@@ -16,20 +16,20 @@ using namespace std;
16
16
  using namespace IceUtil;
17
17
 
18
18
  IceUtilInternal::APIException::APIException(const char* file, int line, const string& r)
19
- : IceUtil::Exception(file, line), reason(r)
19
+ : IceUtil::ExceptionHelper<APIException>(file, line), reason(r)
20
20
  {
21
21
  }
22
22
 
23
+ #ifndef ICE_CPP11_COMPILER
23
24
  IceUtilInternal::APIException::~APIException() throw()
24
25
  {
25
26
  }
26
-
27
- const char* IceUtilInternal::APIException::_name = "IceUtilInternal::APIException";
27
+ #endif
28
28
 
29
29
  string
30
- IceUtilInternal::APIException::ice_name() const
30
+ IceUtilInternal::APIException::ice_id() const
31
31
  {
32
- return _name;
32
+ return "::IceUtilInternal::APIException";
33
33
  }
34
34
 
35
35
  void
@@ -42,17 +42,13 @@ IceUtilInternal::APIException::ice_print(ostream& out) const
42
42
  }
43
43
  }
44
44
 
45
+ #ifndef ICE_CPP11_MAPPING
45
46
  IceUtilInternal::APIException*
46
47
  IceUtilInternal::APIException::ice_clone() const
47
48
  {
48
49
  return new APIException(*this);
49
50
  }
50
-
51
- void
52
- IceUtilInternal::APIException::ice_throw() const
53
- {
54
- throw *this;
55
- }
51
+ #endif
56
52
 
57
53
  ostream&
58
54
  IceUtilInternal::operator<<(ostream& out, const IceUtilInternal::APIException& ex)
@@ -62,20 +58,20 @@ IceUtilInternal::operator<<(ostream& out, const IceUtilInternal::APIException& e
62
58
  }
63
59
 
64
60
  IceUtilInternal::BadOptException::BadOptException(const char* file, int line, const string& r)
65
- : IceUtil::Exception(file, line), reason(r)
61
+ : IceUtil::ExceptionHelper<BadOptException>(file, line), reason(r)
66
62
  {
67
63
  }
68
64
 
65
+ #ifndef ICE_CPP11_COMPILER
69
66
  IceUtilInternal::BadOptException::~BadOptException() throw()
70
67
  {
71
68
  }
72
-
73
- const char* IceUtilInternal::BadOptException::_name = "IceUtilInternal::BadOptException";
69
+ #endif
74
70
 
75
71
  string
76
- IceUtilInternal::BadOptException::ice_name() const
72
+ IceUtilInternal::BadOptException::ice_id() const
77
73
  {
78
- return _name;
74
+ return "::IceUtilInternal::BadOptException";
79
75
  }
80
76
 
81
77
  void
@@ -88,17 +84,13 @@ IceUtilInternal::BadOptException::ice_print(ostream& out) const
88
84
  }
89
85
  }
90
86
 
87
+ #ifndef ICE_CPP11_MAPPING
91
88
  IceUtilInternal::BadOptException*
92
89
  IceUtilInternal::BadOptException::ice_clone() const
93
90
  {
94
91
  return new BadOptException(*this);
95
92
  }
96
-
97
- void
98
- IceUtilInternal::BadOptException::ice_throw() const
99
- {
100
- throw *this;
101
- }
93
+ #endif
102
94
 
103
95
  ostream&
104
96
  IceUtilInternal::operator<<(ostream& out, const IceUtilInternal::BadOptException& ex)
@@ -174,7 +166,7 @@ void
174
166
  IceUtilInternal::Options::addOpt(const string& shortOpt, const string& longOpt, ArgType at, string dflt, RepeatType rt)
175
167
  {
176
168
  RecMutex::Lock sync(_m);
177
-
169
+
178
170
  if(parseCalled)
179
171
  {
180
172
  throw APIException(__FILE__, __LINE__, "cannot add options after parse() was called");
@@ -465,7 +457,7 @@ IceUtilInternal::Options::split(const string& line)
465
457
 
466
458
  Int64 ull = 0;
467
459
  string::size_type j;
468
- for(j = i + 1; j < i + 3 && j < l.size() &&
460
+ for(j = i + 1; j < i + 3 && j < l.size() &&
469
461
  isxdigit(static_cast<unsigned char>(c = l[j])); ++j)
470
462
  {
471
463
  ull *= 16;
@@ -654,20 +646,13 @@ IceUtilInternal::Options::parse(const StringVector& args)
654
646
 
655
647
  if(p != string::npos)
656
648
  {
657
- if(pos->second->arg == NoArg)
649
+ if(pos->second->arg == NoArg && p != args[i].size() - 1)
658
650
  {
659
651
  string err = "`";
660
- err += opt;
652
+ err += args[i];
661
653
  err += "': option does not take an argument";
662
654
  throw BadOptException(__FILE__, __LINE__, err);
663
655
  }
664
- else if(pos->second->arg == NeedArg && p == args[i].size() - 1)
665
- {
666
- string err = "`";
667
- err += opt;
668
- err += "': option requires an argument";
669
- throw BadOptException(__FILE__, __LINE__, err);
670
- }
671
656
  setOpt(opt, "", args[i].substr(p + 1), pos->second->repeat);
672
657
  argDone = true;
673
658
  }
@@ -700,20 +685,12 @@ IceUtilInternal::Options::parse(const StringVector& args)
700
685
  }
701
686
  }
702
687
 
703
- if(pos->second->arg == NeedArg)
704
- {
705
- if(p != args[i].size() - 1)
706
- {
707
- string optArg = args[i].substr(p + 1);
708
- setOpt(opt, "", optArg, pos->second->repeat);
709
- argDone = true;
710
- break;
711
- }
712
- }
713
- else
688
+ if(pos->second->arg == NeedArg && p != args[i].size() - 1)
714
689
  {
715
- setOpt(opt, "", "1", pos->second->repeat);
690
+ string optArg = args[i].substr(p + 1);
691
+ setOpt(opt, "", optArg, pos->second->repeat);
716
692
  argDone = true;
693
+ break;
717
694
  }
718
695
  }
719
696
  }
@@ -1,6 +1,6 @@
1
1
  // **********************************************************************
2
2
  //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
3
+ // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
4
4
  //
5
5
  // This copy of Ice is licensed to you under the terms described in the
6
6
  // ICE_LICENSE file included in this distribution.
@@ -23,6 +23,8 @@ StartBlock sb;
23
23
  EndBlock eb;
24
24
  StartPar spar;
25
25
  EndPar epar;
26
+ StartAbrk sabrk;
27
+ EndAbrk eabrk;
26
28
  Separator sp;
27
29
  EndElement ee;
28
30
  StartEscapes startEscapes;
@@ -69,7 +71,6 @@ IceUtilInternal::OutputBase::OutputBase(ostream& os) :
69
71
  {
70
72
  }
71
73
 
72
-
73
74
  IceUtilInternal::OutputBase::OutputBase(const string& s) :
74
75
  _out(_fout),
75
76
  _pos(0),
@@ -302,17 +303,17 @@ IceUtilInternal::Output::eb()
302
303
  }
303
304
 
304
305
  void
305
- IceUtilInternal::Output::spar()
306
+ IceUtilInternal::Output::spar(char c)
306
307
  {
307
- _out << '(';
308
+ _out << c;
308
309
  _par = 0;
309
310
  }
310
311
 
311
312
  void
312
- IceUtilInternal::Output::epar()
313
+ IceUtilInternal::Output::epar(char c)
313
314
  {
314
315
  _par = -1;
315
- _out << ')';
316
+ _out << c;
316
317
  }
317
318
 
318
319
  Output&
@@ -1,6 +1,6 @@
1
1
  // **********************************************************************
2
2
  //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
3
+ // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
4
4
  //
5
5
  // This copy of Ice is licensed to you under the terms described in the
6
6
  // ICE_LICENSE file included in this distribution.
@@ -38,13 +38,13 @@ namespace
38
38
  // platforms is usually a port from Linux, this problem could be
39
39
  // widespread. Therefore, we serialize access to /dev/urandom using a
40
40
  // static mutex.
41
- //
41
+ //
42
42
  Mutex* staticMutex = 0;
43
43
  int fd = -1;
44
44
 
45
45
  //
46
- // Callback to use with pthread_atfork to reset the "/dev/urandom"
47
- // fd state. We don't need to close the fd here as that is done
46
+ // Callback to use with pthread_atfork to reset the "/dev/urandom"
47
+ // fd state. We don't need to close the fd here as that is done
48
48
  // during static destruction.
49
49
  //
50
50
  extern "C"
@@ -69,12 +69,12 @@ public:
69
69
  staticMutex = new IceUtil::Mutex;
70
70
 
71
71
  //
72
- // Register a callback to reset the "/dev/urandom" fd
72
+ // Register a callback to reset the "/dev/urandom" fd
73
73
  // state after fork.
74
74
  //
75
75
  pthread_atfork(0, 0, &childAtFork);
76
76
  }
77
-
77
+
78
78
  ~Init()
79
79
  {
80
80
  if(fd != -1)
@@ -98,7 +98,7 @@ IceUtilInternal::generateRandom(char* buffer, size_t size)
98
98
  #ifdef _WIN32
99
99
  int i = 0;
100
100
  const size_t randSize = sizeof(unsigned int);
101
-
101
+
102
102
  while(size - i >= randSize)
103
103
  {
104
104
  unsigned int r = 0;
@@ -107,7 +107,7 @@ IceUtilInternal::generateRandom(char* buffer, size_t size)
107
107
  {
108
108
  throw SyscallException(__FILE__, __LINE__, errno);
109
109
  }
110
- memcpy(buffer + i, &r, randSize);
110
+ memcpy(buffer + i, &r, randSize);
111
111
  i += randSize;
112
112
  }
113
113
 
@@ -120,7 +120,7 @@ IceUtilInternal::generateRandom(char* buffer, size_t size)
120
120
  {
121
121
  throw SyscallException(__FILE__, __LINE__, errno);
122
122
  }
123
- memcpy(buffer + i, &r, size - i);
123
+ memcpy(buffer + i, &r, size - i);
124
124
  }
125
125
  #else
126
126
  //
@@ -135,17 +135,17 @@ IceUtilInternal::generateRandom(char* buffer, size_t size)
135
135
  throw SyscallException(__FILE__, __LINE__, errno);
136
136
  }
137
137
  }
138
-
138
+
139
139
  //
140
140
  // Limit the number of attempts to 20 reads to avoid
141
141
  // a potential "for ever" loop
142
142
  //
143
143
  int reads = 0;
144
- size_t index = 0;
144
+ size_t index = 0;
145
145
  while(reads <= 20 && index != size)
146
146
  {
147
147
  ssize_t bytesRead = read(fd, buffer + index, size - index);
148
-
148
+
149
149
  if(bytesRead == -1 && errno != EINTR)
150
150
  {
151
151
  throw SyscallException(__FILE__, __LINE__, errno);
@@ -156,7 +156,7 @@ IceUtilInternal::generateRandom(char* buffer, size_t size)
156
156
  reads++;
157
157
  }
158
158
  }
159
-
159
+
160
160
  if(index != size)
161
161
  {
162
162
  throw SyscallException(__FILE__, __LINE__, 0);
@@ -1,6 +1,6 @@
1
1
  // **********************************************************************
2
2
  //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
3
+ // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
4
4
  //
5
5
  // This copy of Ice is licensed to you under the terms described in the
6
6
  // ICE_LICENSE file included in this distribution.
@@ -10,12 +10,6 @@
10
10
  #include <IceUtil/RecMutex.h>
11
11
  #include <IceUtil/Exception.h>
12
12
 
13
- //
14
- // AbstractMutex isn't used anywhere in IceUtil, we include it here
15
- // to give the compiler a chance to export the class symbols.
16
- //
17
- #include <IceUtil/AbstractMutex.h>
18
-
19
13
  using namespace std;
20
14
 
21
15
  IceUtil::RecMutex::RecMutex() :
@@ -39,7 +33,7 @@ IceUtil::RecMutex::RecMutex(const IceUtil::MutexProtocol protocol) :
39
33
  void
40
34
  IceUtil::RecMutex::init(const MutexProtocol)
41
35
  {
42
- # ifdef ICE_OS_WINRT
36
+ # ifdef ICE_OS_UWP
43
37
  InitializeCriticalSectionEx(&_mutex, 0, 0);
44
38
  # else
45
39
  InitializeCriticalSection(&_mutex);
@@ -208,7 +202,7 @@ IceUtil::RecMutex::tryLock() const
208
202
  {
209
203
  throw ThreadSyscallException(__FILE__, __LINE__, rc);
210
204
  }
211
- }
205
+ }
212
206
  else if(++_count > 1)
213
207
  {
214
208
  rc = pthread_mutex_unlock(&_mutex);
@@ -1,6 +1,6 @@
1
1
  // **********************************************************************
2
2
  //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
3
+ // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
4
4
  //
5
5
  // This copy of Ice is licensed to you under the terms described in the
6
6
  // ICE_LICENSE file included in this distribution.
@@ -29,6 +29,11 @@ IceUtil::SimpleShared::SimpleShared(const SimpleShared&) :
29
29
  {
30
30
  }
31
31
 
32
+ IceUtil::SimpleShared::~SimpleShared()
33
+ {
34
+ // Out of line to avoid weak vtable
35
+ }
36
+
32
37
  IceUtil::Shared::Shared() :
33
38
  _ref(0),
34
39
  _flags(0)
@@ -41,14 +46,14 @@ IceUtil::Shared::Shared(const Shared&) :
41
46
  {
42
47
  }
43
48
 
44
- void
49
+ void
45
50
  IceUtil::Shared::__incRef()
46
51
  {
47
52
  assert(_ref >= 0);
48
53
  ++_ref;
49
54
  }
50
55
 
51
- void
56
+ void
52
57
  IceUtil::Shared::__decRef()
53
58
  {
54
59
  assert(_ref > 0);
@@ -1,6 +1,6 @@
1
1
  // **********************************************************************
2
2
  //
3
- // Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
3
+ // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
4
4
  //
5
5
  // This copy of Ice is licensed to you under the terms described in the
6
6
  // ICE_LICENSE file included in this distribution.
@@ -10,9 +10,14 @@
10
10
  #include <IceUtil/StringConverter.h>
11
11
  #include <IceUtil/MutexPtrLock.h>
12
12
  #include <IceUtil/Mutex.h>
13
- #include <IceUtil/ScopedArray.h>
14
13
  #include <IceUtil/StringUtil.h>
14
+
15
+ #ifdef ICE_HAS_CODECVT_UTF8
16
+ #include <codecvt>
17
+ #include <locale>
18
+ #else
15
19
  #include <IceUtil/Unicode.h>
20
+ #endif
16
21
 
17
22
  using namespace IceUtil;
18
23
  using namespace IceUtilInternal;
@@ -25,268 +30,290 @@ IceUtil::Mutex* processStringConverterMutex = 0;
25
30
  IceUtil::StringConverterPtr processStringConverter;
26
31
  IceUtil::WstringConverterPtr processWstringConverter;
27
32
 
28
- class Init
29
- {
30
- public:
31
-
32
- Init()
33
- {
34
- processStringConverterMutex = new IceUtil::Mutex;
35
- }
33
+ #ifndef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
34
+ IceUtil::WstringConverterPtr unicodeWstringConverter;
35
+ #endif
36
36
 
37
- ~Init()
38
- {
39
- delete processStringConverterMutex;
40
- processStringConverterMutex = 0;
41
- }
42
- };
37
+ #ifdef ICE_HAS_CODECVT_UTF8
43
38
 
44
- Init init;
39
+ template<size_t wcharSize>
40
+ struct SelectCodeCvt;
45
41
 
46
- }
42
+ template<>
43
+ struct SelectCodeCvt<2>
44
+ {
45
+ typedef std::codecvt_utf8_utf16<wchar_t> Type;
46
+ };
47
47
 
48
- namespace
48
+ template<>
49
+ struct SelectCodeCvt<4>
49
50
  {
51
+ typedef std::codecvt_utf8<wchar_t> Type;
52
+ };
50
53
 
51
- class UTF8BufferI : public UTF8Buffer
54
+ class UnicodeWstringConverter : public WstringConverter
52
55
  {
53
56
  public:
54
57
 
55
- UTF8BufferI() :
56
- _buffer(0),
57
- _offset(0)
58
+ #if defined(_MSC_VER) && (_MSC_VER <= 1800)
59
+ //
60
+ // VS 2013 needs a default ctor
61
+ //
62
+ UnicodeWstringConverter()
58
63
  {
59
64
  }
65
+ #endif
60
66
 
61
- ~UTF8BufferI()
67
+ virtual Byte* toUTF8(const wchar_t* sourceStart, const wchar_t* sourceEnd, UTF8Buffer& buffer) const
62
68
  {
63
- free(_buffer);
69
+ //
70
+ // Max bytes for a character encoding in UTF-8 is 4,
71
+ // however MSVC returns 6
72
+ //
73
+ #ifdef _MSC_VER
74
+ assert(_codecvt.max_length() == 4 || _codecvt.max_length() == 6);
75
+ #else
76
+ assert(_codecvt.max_length() == 4);
77
+ #endif
78
+ if(sourceStart == sourceEnd)
79
+ {
80
+ return buffer.getMoreBytes(1, 0);
81
+ }
82
+
83
+ char* targetStart = 0;
84
+ char* targetEnd = 0;
85
+ char* targetNext = 0;
86
+
87
+ mbstate_t state = mbstate_t(); // must be initialized!
88
+ const wchar_t* sourceNext = sourceStart;
89
+
90
+ bool more = false;
91
+
92
+ //
93
+ // The number of bytes we request from buffer for each remaining source character
94
+ //
95
+ size_t factor = 2;
96
+
97
+ do
98
+ {
99
+ assert(factor <= 4);
100
+ const size_t chunkSize = std::max<size_t>((sourceEnd - sourceStart) * factor, 4);
101
+ ++factor; // at the next round, we'll allocate more bytes per remaining source character
102
+
103
+ targetStart = reinterpret_cast<char*>(buffer.getMoreBytes(chunkSize, reinterpret_cast<Byte*>(targetNext)));
104
+ targetEnd = targetStart + chunkSize;
105
+ targetNext = targetStart;
106
+
107
+ codecvt_base::result result =
108
+ _codecvt.out(state, sourceStart, sourceEnd, sourceNext, targetStart, targetEnd, targetNext);
109
+
110
+ switch(result)
111
+ {
112
+ case codecvt_base::ok:
113
+ //
114
+ // MSVC returns ok when target is exhausted
115
+ //
116
+ more = sourceNext < sourceEnd;
117
+ break;
118
+
119
+ case codecvt_base::partial:
120
+ //
121
+ // clang/libc++ and g++5 return partial when target is exhausted
122
+ //
123
+ more = true;
124
+ assert(sourceNext < sourceEnd);
125
+ break;
126
+
127
+ case codecvt_base::noconv:
128
+ //
129
+ // Unexpected
130
+ //
131
+ assert(0);
132
+ throw IllegalConversionException(__FILE__, __LINE__, "codecvt.out noconv");
133
+
134
+ default:
135
+ throw IllegalConversionException(__FILE__, __LINE__, "codecvt.out error");
136
+ }
137
+
138
+ if(targetStart == targetNext)
139
+ {
140
+ // We didn't convert a single character
141
+ throw IllegalConversionException(__FILE__, __LINE__,
142
+ "no character converted by codecvt.out");
143
+ }
144
+
145
+ sourceStart = sourceNext;
146
+ } while (more);
147
+
148
+ return reinterpret_cast<Byte*>(targetNext);
64
149
  }
65
150
 
66
- Byte* getMoreBytes(size_t howMany, Byte* firstUnused)
151
+ virtual void fromUTF8(const Byte* sourceStart, const Byte* sourceEnd, wstring& target) const
67
152
  {
68
- if(_buffer == 0)
153
+ const size_t sourceSize = sourceEnd - sourceStart;
154
+
155
+ if(sourceSize == 0)
69
156
  {
70
- _buffer = static_cast<Byte*>(malloc(howMany));
157
+ target = L"";
71
158
  }
72
159
  else
73
160
  {
74
- assert(firstUnused != 0);
75
- _offset = firstUnused - _buffer;
76
- _buffer = static_cast<Byte*>(realloc(_buffer, _offset + howMany));
77
- }
78
-
79
- if(!_buffer)
80
- {
81
- throw std::bad_alloc();
82
- }
83
- return _buffer + _offset;
84
- }
161
+ target.resize(sourceSize);
162
+ wchar_t* targetStart = const_cast<wchar_t*>(target.data());
163
+ wchar_t* targetEnd = targetStart + sourceSize;
164
+ wchar_t* targetNext = targetStart;
85
165
 
86
- Byte* getBuffer()
87
- {
88
- return _buffer;
89
- }
166
+ const char* sourceNext = reinterpret_cast<const char*>(sourceStart);
90
167
 
91
- void reset()
92
- {
93
- free(_buffer);
94
- _buffer = 0;
95
- _offset = 0;
168
+ mbstate_t state = mbstate_t();
169
+
170
+ codecvt_base::result result = _codecvt.in(state,
171
+ reinterpret_cast<const char*>(sourceStart),
172
+ reinterpret_cast<const char*>(sourceEnd),
173
+ sourceNext,
174
+ targetStart, targetEnd, targetNext);
175
+
176
+ if(result != codecvt_base::ok)
177
+ {
178
+ throw IllegalConversionException(__FILE__, __LINE__, "codecvt.in failure");
179
+ }
180
+
181
+ target.resize(targetNext - targetStart);
182
+ }
96
183
  }
97
-
184
+
98
185
  private:
99
186
 
100
- IceUtil::Byte* _buffer;
101
- size_t _offset;
187
+ typedef SelectCodeCvt<sizeof(wchar_t)>::Type CodeCvt;
188
+ const CodeCvt _codecvt;
102
189
  };
103
190
 
104
- }
191
+ #else
105
192
 
193
+ class UnicodeWstringConverter : public WstringConverter
194
+ {
195
+ public:
106
196
 
197
+ virtual Byte* toUTF8(const wchar_t* sourceStart, const wchar_t* sourceEnd, UTF8Buffer& buffer) const
198
+ {
199
+ if(sourceStart == sourceEnd)
200
+ {
201
+ return buffer.getMoreBytes(1, 0);
202
+ }
107
203
 
108
- UnicodeWstringConverter::UnicodeWstringConverter(ConversionFlags flags) :
109
- _conversionFlags(flags)
110
- {
111
- }
204
+ Byte* targetStart = 0;
205
+ Byte* targetEnd = 0;
112
206
 
113
- Byte*
114
- UnicodeWstringConverter::toUTF8(const wchar_t* sourceStart,
115
- const wchar_t* sourceEnd,
116
- UTF8Buffer& buffer) const
117
- {
118
- //
119
- // The "chunk size" is the maximum of the number of characters in the
120
- // source and 6 (== max bytes necessary to encode one Unicode character).
121
- //
122
- size_t chunkSize = std::max<size_t>(static_cast<size_t>(sourceEnd - sourceStart), 6);
207
+ //
208
+ // The number of bytes we request from buffer for each remaining source character
209
+ //
210
+ size_t factor = 2;
123
211
 
124
- Byte* targetStart = buffer.getMoreBytes(chunkSize, 0);
125
- Byte* targetEnd = targetStart + chunkSize;
212
+ do
213
+ {
214
+ assert(factor <= 4);
215
+ const size_t chunkSize = std::max<size_t>((sourceEnd - sourceStart) * factor, 4);
216
+ ++factor; // at the next round, we'll allocate more bytes per remaining source character
126
217
 
127
- ConversionResult result;
218
+ targetStart = buffer.getMoreBytes(chunkSize, targetStart);
219
+ targetEnd = targetStart + chunkSize;
220
+ }
221
+ while(convertUTFWstringToUTF8(sourceStart, sourceEnd, targetStart, targetEnd) == false);
128
222
 
129
- while((result =
130
- convertUTFWstringToUTF8(sourceStart, sourceEnd,
131
- targetStart, targetEnd, _conversionFlags))
132
- == targetExhausted)
133
- {
134
- targetStart = buffer.getMoreBytes(chunkSize, targetStart);
135
- targetEnd = targetStart + chunkSize;
223
+ return targetStart;
136
224
  }
137
-
138
- switch(result)
225
+
226
+ virtual void fromUTF8(const Byte* sourceStart, const Byte* sourceEnd, wstring& target) const
139
227
  {
140
- case conversionOK:
141
- break;
142
- case sourceExhausted:
143
- throw IceUtil::IllegalConversionException(__FILE__, __LINE__, "wide string source exhausted");
144
- case sourceIllegal:
145
- throw IceUtil::IllegalConversionException(__FILE__, __LINE__, "wide string source illegal");
146
- default:
228
+ if(sourceStart == sourceEnd)
229
+ {
230
+ target = L"";
231
+ }
232
+ else
147
233
  {
148
- assert(0);
149
- throw IceUtil::IllegalConversionException(__FILE__, __LINE__);
234
+ convertUTF8ToUTFWstring(sourceStart, sourceEnd, target);
150
235
  }
151
236
  }
152
- return targetStart;
153
- }
237
+ };
154
238
 
239
+ #endif
155
240
 
156
- void
157
- UnicodeWstringConverter::fromUTF8(const Byte* sourceStart, const Byte* sourceEnd,
158
- wstring& target) const
241
+ class Init
159
242
  {
160
- if(sourceStart == sourceEnd)
243
+ public:
244
+
245
+ Init()
161
246
  {
162
- target = L"";
163
- return;
247
+ processStringConverterMutex = new IceUtil::Mutex;
248
+ #ifndef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
249
+ unicodeWstringConverter = ICE_MAKE_SHARED(UnicodeWstringConverter);
250
+ #endif
164
251
  }
165
252
 
166
- ConversionResult result =
167
- convertUTF8ToUTFWstring(sourceStart, sourceEnd, target, _conversionFlags);
168
-
169
- switch(result)
253
+ ~Init()
170
254
  {
171
- case conversionOK:
172
- break;
173
- case sourceExhausted:
174
- throw IceUtil::IllegalConversionException(__FILE__, __LINE__, "UTF-8 string source exhausted");
175
- case sourceIllegal:
176
- throw IceUtil::IllegalConversionException(__FILE__, __LINE__, "UTF-8 string source illegal");
177
- default:
178
- {
179
- assert(0);
180
- throw IceUtil::IllegalConversionException(__FILE__, __LINE__);
181
- }
255
+ delete processStringConverterMutex;
256
+ processStringConverterMutex = 0;
182
257
  }
183
- }
258
+ };
184
259
 
185
- #ifdef _WIN32
186
- WindowsStringConverter::WindowsStringConverter(unsigned int cp) :
187
- _cp(cp)
260
+ Init init;
261
+
262
+ const WstringConverterPtr&
263
+ getUnicodeWstringConverter()
188
264
  {
265
+ #ifdef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
266
+ static const WstringConverterPtr unicodeWstringConverter = ICE_MAKE_SHARED(UnicodeWstringConverter);
267
+ #endif
268
+ return unicodeWstringConverter;
189
269
  }
190
270
 
191
- Byte*
192
- WindowsStringConverter::toUTF8(const char* sourceStart,
193
- const char* sourceEnd,
194
- UTF8Buffer& buffer) const
271
+ class UTF8BufferI : public UTF8Buffer
195
272
  {
196
- //
197
- // First convert to UTF-16
198
- //
199
- int sourceSize = static_cast<int>(sourceEnd - sourceStart);
200
- if(sourceSize == 0)
201
- {
202
- return buffer.getMoreBytes(1, 0);
203
- }
273
+ public:
204
274
 
205
- int size = 0;
206
- int writtenWchar = 0;
207
- ScopedArray<wchar_t> wbuffer;
208
-
209
275
  //
210
- // The following code pages doesn't support MB_ERR_INVALID_CHARS flag
211
- // see http://msdn.microsoft.com/en-us/library/windows/desktop/dd319072(v=vs.85).aspx
276
+ // Returns the first unused byte in the resized buffer
212
277
  //
213
- DWORD flags =
214
- (_cp == 50220 || _cp == 50221 || _cp == 50222 ||
215
- _cp == 50225 || _cp == 50227 || _cp == 50229 ||
216
- _cp == 65000 || _cp == 42 || (_cp >= 57002 && _cp <= 57011)) ? 0 : MB_ERR_INVALID_CHARS;
217
-
218
- do
219
- {
220
- size = size == 0 ? sourceSize + 2 : 2 * size;
221
- wbuffer.reset(new wchar_t[size]);
222
-
223
- writtenWchar = MultiByteToWideChar(_cp, flags, sourceStart,
224
- sourceSize, wbuffer.get(), size);
225
- } while(writtenWchar == 0 && GetLastError() == ERROR_INSUFFICIENT_BUFFER);
226
-
227
- if(writtenWchar == 0)
278
+ Byte* getMoreBytes(size_t howMany, Byte* firstUnused)
228
279
  {
229
- throw IllegalConversionException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
230
- }
280
+ size_t bytesUsed = 0;
281
+ if(firstUnused != 0)
282
+ {
283
+ bytesUsed = firstUnused - reinterpret_cast<const Byte*>(_buffer.data());
284
+ }
231
285
 
232
- //
233
- // Then convert this UTF-16 wbuffer into UTF-8
234
- //
235
- return _unicodeWstringConverter.toUTF8(wbuffer.get(), wbuffer.get() + writtenWchar, buffer);
236
- }
286
+ if(_buffer.size() < howMany + bytesUsed)
287
+ {
288
+ _buffer.resize(bytesUsed + howMany);
289
+ }
237
290
 
238
- void
239
- WindowsStringConverter::fromUTF8(const Byte* sourceStart, const Byte* sourceEnd,
240
- string& target) const
241
- {
242
- if(sourceStart == sourceEnd)
243
- {
244
- target = "";
245
- return;
291
+ return const_cast<Byte*>(reinterpret_cast<const Byte*>(_buffer.data())) + bytesUsed;
246
292
  }
247
293
 
248
- if(_cp == CP_UTF8)
294
+ void swap(string& other, const Byte* tail)
249
295
  {
250
- string tmp(reinterpret_cast<const char*>(sourceStart), sourceEnd - sourceStart);
251
- tmp.swap(target);
252
- return;
296
+ assert(tail >= reinterpret_cast<const Byte*>(_buffer.data()));
297
+ _buffer.resize(tail - reinterpret_cast<const Byte*>(_buffer.data()));
298
+ other.swap(_buffer);
253
299
  }
254
300
 
255
- //
256
- // First convert to wstring (UTF-16)
257
- //
258
- wstring wtarget;
259
- _unicodeWstringConverter.fromUTF8(sourceStart, sourceEnd, wtarget);
260
-
261
- //
262
- // WC_ERR_INVALID_CHARS conversion flag is only supported with 65001 (UTF-8) and
263
- // 54936 (GB18030 Simplified Chinese)
264
- //
265
- DWORD flags = (_cp == 65001 || _cp == 54936) ? WC_ERR_INVALID_CHARS : 0;
266
- //
267
- // And then to a multi-byte narrow string
268
- //
269
- int size = 0;
270
- int writtenChar = 0;
271
- ScopedArray<char> buffer;
272
- do
273
- {
274
- size = size == 0 ? static_cast<int>(sourceEnd - sourceStart) + 2 : 2 * size;
275
- buffer.reset(new char[size]);
276
- writtenChar = WideCharToMultiByte(_cp, flags, wtarget.data(), static_cast<int>(wtarget.size()),
277
- buffer.get(), size, 0, 0);
278
- } while(writtenChar == 0 && GetLastError() == ERROR_INSUFFICIENT_BUFFER);
279
-
280
- if(writtenChar == 0)
281
- {
282
- throw IllegalConversionException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
283
- }
301
+ private:
302
+ string _buffer;
303
+ };
284
304
 
285
- target.assign(buffer.get(), writtenChar);
286
305
  }
287
306
 
288
- #endif
307
+ IceUtil::UTF8Buffer::~UTF8Buffer()
308
+ {
309
+ // Out of line to avoid weak vtable
310
+ }
289
311
 
312
+ WstringConverterPtr
313
+ IceUtil::createUnicodeWstringConverter()
314
+ {
315
+ return getUnicodeWstringConverter();
316
+ }
290
317
 
291
318
  StringConverterPtr
292
319
  IceUtil::getProcessStringConverter()
@@ -298,75 +325,54 @@ IceUtil::getProcessStringConverter()
298
325
  void
299
326
  IceUtil::setProcessStringConverter(const StringConverterPtr& converter)
300
327
  {
301
- IceUtilInternal::MutexPtrLock<IceUtil::Mutex> lock(processStringConverterMutex);
302
- processStringConverter = converter;
328
+ IceUtilInternal::MutexPtrLock<IceUtil::Mutex> lock(processStringConverterMutex);
329
+ processStringConverter = converter;
303
330
  }
304
331
 
305
332
  WstringConverterPtr
306
333
  IceUtil::getProcessWstringConverter()
307
334
  {
308
335
  IceUtilInternal::MutexPtrLock<IceUtil::Mutex> lock(processStringConverterMutex);
309
- return processWstringConverter;
336
+ if(processWstringConverter)
337
+ {
338
+ return processWstringConverter;
339
+ }
340
+ else
341
+ {
342
+ return getUnicodeWstringConverter();
343
+ }
310
344
  }
311
345
 
312
346
  void
313
347
  IceUtil::setProcessWstringConverter(const WstringConverterPtr& converter)
314
348
  {
315
- IceUtilInternal::MutexPtrLock<IceUtil::Mutex> lock(processStringConverterMutex);
316
- processWstringConverter = converter;
349
+ IceUtilInternal::MutexPtrLock<IceUtil::Mutex> lock(processStringConverterMutex);
350
+ processWstringConverter = converter;
317
351
  }
318
352
 
319
353
  string
320
- IceUtil::wstringToString(const wstring& v, const StringConverterPtr& converter, const WstringConverterPtr& wConverter,
321
- IceUtil::ConversionFlags flags)
354
+ IceUtil::wstringToString(const wstring& v, const StringConverterPtr& converter, const WstringConverterPtr& wConverter)
322
355
  {
323
356
  string target;
324
357
  if(!v.empty())
325
358
  {
359
+ const WstringConverterPtr& wConverterWithDefault = wConverter ? wConverter : getUnicodeWstringConverter();
360
+
326
361
  //
327
- // First convert to UTF8 narrow string.
362
+ // First convert to UTF-8 narrow string.
328
363
  //
329
- if(wConverter)
330
- {
331
- UTF8BufferI buffer;
332
- Byte* last = wConverter->toUTF8(v.data(), v.data() + v.size(), buffer);
333
- target = string(reinterpret_cast<const char*>(buffer.getBuffer()), last - buffer.getBuffer());
334
- }
335
- else
336
- {
337
- size_t size = v.size() * 4 * sizeof(char);
338
-
339
- Byte* outBuf = new Byte[size];
340
- Byte* targetStart = outBuf;
341
- Byte* targetEnd = outBuf + size;
342
-
343
- const wchar_t* sourceStart = v.data();
344
-
345
- ConversionResult cr =
346
- convertUTFWstringToUTF8(
347
- sourceStart, sourceStart + v.size(),
348
- targetStart, targetEnd, flags);
349
-
350
- if(cr != conversionOK)
351
- {
352
- delete[] outBuf;
353
- assert(cr == sourceExhausted || cr == sourceIllegal);
354
- throw IllegalConversionException(__FILE__, __LINE__,
355
- cr == sourceExhausted ? "partial character" : "bad encoding");
356
- }
357
-
358
- target = string(reinterpret_cast<char*>(outBuf), static_cast<size_t>(targetStart - outBuf));
359
- delete[] outBuf;
360
- }
364
+ UTF8BufferI buffer;
365
+ Byte* last = wConverterWithDefault->toUTF8(v.data(), v.data() + v.size(), buffer);
366
+ buffer.swap(target, last);
361
367
 
362
368
  //
363
- // If narrow string converter is present convert to the native narrow string encoding, otherwise
369
+ // If narrow string converter is present convert to the native narrow string encoding, otherwise
364
370
  // native narrow string encoding is UTF8 and we are done.
365
371
  //
366
372
  if(converter)
367
373
  {
368
374
  string tmp;
369
- converter->fromUTF8(reinterpret_cast<const Byte*>(target.data()),
375
+ converter->fromUTF8(reinterpret_cast<const Byte*>(target.data()),
370
376
  reinterpret_cast<const Byte*>(target.data() + target.size()), tmp);
371
377
  tmp.swap(target);
372
378
  }
@@ -375,8 +381,7 @@ IceUtil::wstringToString(const wstring& v, const StringConverterPtr& converter,
375
381
  }
376
382
 
377
383
  wstring
378
- IceUtil::stringToWstring(const string& v, const StringConverterPtr& converter,
379
- const WstringConverterPtr& wConverter, IceUtil::ConversionFlags flags)
384
+ IceUtil::stringToWstring(const string& v, const StringConverterPtr& converter, const WstringConverterPtr& wConverter)
380
385
  {
381
386
  wstring target;
382
387
  if(!v.empty())
@@ -390,36 +395,21 @@ IceUtil::stringToWstring(const string& v, const StringConverterPtr& converter,
390
395
  {
391
396
  UTF8BufferI buffer;
392
397
  Byte* last = converter->toUTF8(v.data(), v.data() + v.size(), buffer);
393
- tmp = string(reinterpret_cast<const char*>(buffer.getBuffer()), last - buffer.getBuffer());
398
+ buffer.swap(tmp, last);
394
399
  }
395
400
  else
396
401
  {
397
402
  tmp = v;
398
403
  }
399
404
 
405
+ const WstringConverterPtr& wConverterWithDefault = wConverter ? wConverter : getUnicodeWstringConverter();
406
+
400
407
  //
401
- // If there is a wide string converter use fromUTF8 to convert to the wide string native encoding.
408
+ // Convert from UTF-8 to the wide string encoding
402
409
  //
403
- if(wConverter)
404
- {
405
- wConverter->fromUTF8(reinterpret_cast<const Byte*>(tmp.data()),
406
- reinterpret_cast<const Byte*>(tmp.data() + tmp.size()), target);
407
- }
408
- else
409
- {
410
- const Byte* sourceStart = reinterpret_cast<const Byte*>(tmp.data());
411
-
412
- ConversionResult cr =
413
- convertUTF8ToUTFWstring(sourceStart, sourceStart + tmp.size(), target, flags);
410
+ wConverterWithDefault->fromUTF8(reinterpret_cast<const Byte*>(tmp.data()),
411
+ reinterpret_cast<const Byte*>(tmp.data() + tmp.size()), target);
414
412
 
415
- if(cr != conversionOK)
416
- {
417
- assert(cr == sourceExhausted || cr == sourceIllegal);
418
-
419
- throw IllegalConversionException(__FILE__, __LINE__,
420
- cr == sourceExhausted ? "partial character" : "bad encoding");
421
- }
422
- }
423
413
  }
424
414
  return target;
425
415
  }
@@ -430,10 +420,12 @@ IceUtil::nativeToUTF8(const string& str, const IceUtil::StringConverterPtr& conv
430
420
  if(!converter || str.empty())
431
421
  {
432
422
  return str;
433
- }
423
+ }
434
424
  UTF8BufferI buffer;
435
425
  Byte* last = converter->toUTF8(str.data(), str.data() + str.size(), buffer);
436
- return string(reinterpret_cast<const char*>(buffer.getBuffer()), last - buffer.getBuffer());
426
+ string result;
427
+ buffer.swap(result, last);
428
+ return result;
437
429
  }
438
430
 
439
431
  string
@@ -448,3 +440,248 @@ IceUtil::UTF8ToNative(const string& str, const IceUtil::StringConverterPtr& conv
448
440
  reinterpret_cast<const Byte*>(str.data() + str.size()), tmp);
449
441
  return tmp;
450
442
  }
443
+
444
+ #ifdef ICE_HAS_CODECVT_UTF8
445
+
446
+ #if defined(_MSC_VER) && (_MSC_VER >= 1900)
447
+ //
448
+ // Workaround for compiler bug - see http://stackoverflow.com/questions/32055357
449
+ //
450
+ typedef unsigned short Char16T;
451
+ typedef unsigned int Char32T;
452
+
453
+ #else
454
+ typedef char16_t Char16T;
455
+ typedef char32_t Char32T;
456
+ #endif
457
+
458
+ #endif
459
+
460
+ vector<unsigned short>
461
+ IceUtilInternal::toUTF16(const vector<Byte>& source)
462
+ {
463
+ vector<unsigned short> result;
464
+ if(!source.empty())
465
+ {
466
+
467
+ #ifdef ICE_HAS_CODECVT_UTF8
468
+ assert(sizeof(Char16T) == sizeof(unsigned short));
469
+
470
+ typedef wstring_convert<codecvt_utf8_utf16<Char16T>, Char16T> Convert;
471
+
472
+ Convert convert;
473
+
474
+ try
475
+ {
476
+ Convert::wide_string ws = convert.from_bytes(reinterpret_cast<const char*>(&source.front()),
477
+ reinterpret_cast<const char*>(&source.front() + source.size()));
478
+
479
+ result = vector<unsigned short>(reinterpret_cast<const unsigned short*>(ws.data()),
480
+ reinterpret_cast<const unsigned short*>(ws.data()) + ws.length());
481
+ }
482
+ catch(const std::range_error& ex)
483
+ {
484
+ throw IllegalConversionException(__FILE__, __LINE__, ex.what());
485
+ }
486
+
487
+ #else
488
+ convertUTF8ToUTF16(source, result);
489
+ #endif
490
+ }
491
+ return result;
492
+ }
493
+
494
+ vector<unsigned int>
495
+ IceUtilInternal::toUTF32(const vector<Byte>& source)
496
+ {
497
+ vector<unsigned int> result;
498
+ if(!source.empty())
499
+ {
500
+
501
+ #ifdef ICE_HAS_CODECVT_UTF8
502
+ assert(sizeof(Char32T) == sizeof(unsigned int));
503
+
504
+ typedef wstring_convert<codecvt_utf8<Char32T>, Char32T> Convert;
505
+ Convert convert;
506
+
507
+ try
508
+ {
509
+ Convert::wide_string ws = convert.from_bytes(reinterpret_cast<const char*>(&source.front()),
510
+ reinterpret_cast<const char*>(&source.front() + source.size()));
511
+
512
+ result = vector<unsigned int>(reinterpret_cast<const unsigned int*>(ws.data()),
513
+ reinterpret_cast<const unsigned int*>(ws.data()) + ws.length());
514
+ }
515
+ catch(const std::range_error& ex)
516
+ {
517
+ throw IllegalConversionException(__FILE__, __LINE__, ex.what());
518
+ }
519
+
520
+ #else
521
+ convertUTF8ToUTF32(source, result);
522
+ #endif
523
+ }
524
+ return result;
525
+ }
526
+
527
+ vector<Byte>
528
+ IceUtilInternal::fromUTF32(const vector<unsigned int>& source)
529
+ {
530
+ vector<Byte> result;
531
+ if(!source.empty())
532
+ {
533
+
534
+ #ifdef ICE_HAS_CODECVT_UTF8
535
+ assert(sizeof(Char32T) == sizeof(unsigned int));
536
+
537
+ typedef wstring_convert<codecvt_utf8<Char32T>, Char32T> Convert;
538
+ Convert convert;
539
+
540
+ try
541
+ {
542
+ Convert::byte_string bs = convert.to_bytes(reinterpret_cast<const Char32T*>(&source.front()),
543
+ reinterpret_cast<const Char32T*>(&source.front() + source.size()));
544
+
545
+ result = vector<Byte>(reinterpret_cast<const Byte*>(bs.data()),
546
+ reinterpret_cast<const Byte*>(bs.data()) + bs.length());
547
+ }
548
+ catch(const std::range_error& ex)
549
+ {
550
+ throw IllegalConversionException(__FILE__, __LINE__, ex.what());
551
+ }
552
+
553
+ #else
554
+ convertUTF32ToUTF8(source, result);
555
+ #endif
556
+ }
557
+ return result;
558
+ }
559
+
560
+ #ifdef _WIN32
561
+
562
+ namespace
563
+ {
564
+ //
565
+ // Converts to/from UTF-8 using MultiByteToWideChar and WideCharToMultiByte
566
+ //
567
+ class WindowsStringConverter : public StringConverter
568
+ {
569
+ public:
570
+
571
+ explicit WindowsStringConverter(unsigned int);
572
+
573
+ virtual Byte* toUTF8(const char*, const char*, UTF8Buffer&) const;
574
+
575
+ virtual void fromUTF8(const Byte*, const Byte*, string& target) const;
576
+
577
+ private:
578
+ unsigned int _cp;
579
+ };
580
+
581
+ WindowsStringConverter::WindowsStringConverter(unsigned int cp) :
582
+ _cp(cp)
583
+ {
584
+ }
585
+
586
+ Byte*
587
+ WindowsStringConverter::toUTF8(const char* sourceStart, const char* sourceEnd, UTF8Buffer& buffer) const
588
+ {
589
+ //
590
+ // First convert to UTF-16
591
+ //
592
+ int sourceSize = static_cast<int>(sourceEnd - sourceStart);
593
+ if(sourceSize == 0)
594
+ {
595
+ return buffer.getMoreBytes(1, 0);
596
+ }
597
+
598
+ int writtenWchar = 0;
599
+ wstring wbuffer;
600
+
601
+ //
602
+ // The following code pages doesn't support MB_ERR_INVALID_CHARS flag
603
+ // see http://msdn.microsoft.com/en-us/library/windows/desktop/dd319072(v=vs.85).aspx
604
+ //
605
+ DWORD flags =
606
+ (_cp == 50220 || _cp == 50221 || _cp == 50222 ||
607
+ _cp == 50225 || _cp == 50227 || _cp == 50229 ||
608
+ _cp == 65000 || _cp == 42 || (_cp >= 57002 && _cp <= 57011)) ? 0 : MB_ERR_INVALID_CHARS;
609
+
610
+ do
611
+ {
612
+ wbuffer.resize(wbuffer.size() == 0 ? sourceSize + 2 : 2 * wbuffer.size());
613
+ writtenWchar = MultiByteToWideChar(_cp, flags, sourceStart, sourceSize,
614
+ const_cast<wchar_t*>(wbuffer.data()), static_cast<int>(wbuffer.size()));
615
+ } while(writtenWchar == 0 && GetLastError() == ERROR_INSUFFICIENT_BUFFER);
616
+
617
+ if(writtenWchar == 0)
618
+ {
619
+ throw IllegalConversionException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
620
+ }
621
+
622
+ wbuffer.resize(static_cast<size_t>(writtenWchar));
623
+
624
+ //
625
+ // Then convert this UTF-16 wbuffer into UTF-8
626
+ //
627
+ return getUnicodeWstringConverter()->toUTF8(wbuffer.data(), wbuffer.data() + wbuffer.size(), buffer);
628
+ }
629
+
630
+ void
631
+ WindowsStringConverter::fromUTF8(const Byte* sourceStart, const Byte* sourceEnd, string& target) const
632
+ {
633
+ if(sourceStart == sourceEnd)
634
+ {
635
+ target = "";
636
+ return;
637
+ }
638
+
639
+ if(_cp == CP_UTF8)
640
+ {
641
+ string tmp(reinterpret_cast<const char*>(sourceStart), sourceEnd - sourceStart);
642
+ tmp.swap(target);
643
+ return;
644
+ }
645
+
646
+ //
647
+ // First convert to wstring (UTF-16)
648
+ //
649
+ wstring wtarget;
650
+ getUnicodeWstringConverter()->fromUTF8(sourceStart, sourceEnd, wtarget);
651
+
652
+ //
653
+ // WC_ERR_INVALID_CHARS conversion flag is only supported with 65001 (UTF-8) and
654
+ // 54936 (GB18030 Simplified Chinese)
655
+ //
656
+ DWORD flags = (_cp == 65001 || _cp == 54936) ? WC_ERR_INVALID_CHARS : 0;
657
+
658
+ //
659
+ // And then to a multi-byte narrow string
660
+ //
661
+ int writtenChar = -1;
662
+ do
663
+ {
664
+ target.resize(writtenChar == -1 ?
665
+ std::max<size_t>(sourceEnd - sourceStart + 2, target.size()) :
666
+ 2 * target.size());
667
+
668
+ writtenChar = WideCharToMultiByte(_cp, flags, wtarget.data(), static_cast<int>(wtarget.size()),
669
+ const_cast<char*>(target.data()), static_cast<int>(target.size()),
670
+ 0, 0);
671
+ } while(writtenChar == 0 && GetLastError() == ERROR_INSUFFICIENT_BUFFER);
672
+
673
+ if(writtenChar == 0)
674
+ {
675
+ throw IllegalConversionException(__FILE__, __LINE__, IceUtilInternal::lastErrorToString());
676
+ }
677
+
678
+ target.resize(static_cast<size_t>(writtenChar));
679
+ }
680
+ }
681
+
682
+ StringConverterPtr
683
+ IceUtil::createWindowsStringConverter(unsigned int cp)
684
+ {
685
+ return ICE_MAKE_SHARED(WindowsStringConverter, cp);
686
+ }
687
+ #endif