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.
- checksums.yaml +4 -4
- data/BZIP2_LICENSE +42 -0
- data/ICE_LICENSE +17 -17
- data/LICENSE +12 -12
- data/bin/slice2rb +1 -1
- data/ext/Communicator.cpp +150 -53
- data/ext/Communicator.h +1 -1
- data/ext/Config.h +2 -12
- data/ext/Connection.cpp +89 -68
- data/ext/Connection.h +1 -1
- data/ext/Endpoint.cpp +16 -45
- data/ext/Endpoint.h +1 -1
- data/ext/ImplicitContext.cpp +1 -5
- data/ext/ImplicitContext.h +1 -1
- data/ext/Init.cpp +4 -1
- data/ext/Logger.cpp +1 -1
- data/ext/Logger.h +1 -1
- data/ext/Operation.cpp +33 -44
- data/ext/Operation.h +1 -1
- data/ext/Properties.cpp +1 -1
- data/ext/Properties.h +1 -1
- data/ext/Proxy.cpp +22 -57
- data/ext/Proxy.h +1 -1
- data/ext/Slice.cpp +5 -5
- data/ext/Slice.h +1 -1
- data/ext/Types.cpp +244 -171
- data/ext/Types.h +118 -66
- data/ext/Util.cpp +13 -9
- data/ext/Util.h +10 -10
- data/ext/ValueFactoryManager.cpp +445 -0
- data/ext/ValueFactoryManager.h +100 -0
- data/ext/extconf.rb +47 -45
- data/ext/ice/bzip2/blocksort.c +1094 -0
- data/ext/ice/bzip2/bzlib.c +1572 -0
- data/ext/ice/bzip2/bzlib.h +282 -0
- data/ext/ice/bzip2/bzlib_private.h +509 -0
- data/ext/ice/bzip2/compress.c +672 -0
- data/ext/ice/bzip2/crctable.c +104 -0
- data/ext/ice/bzip2/decompress.c +646 -0
- data/ext/ice/bzip2/huffman.c +205 -0
- data/ext/ice/bzip2/randtable.c +84 -0
- data/ext/ice/cpp/include/Ice/Application.h +77 -60
- data/ext/ice/cpp/include/Ice/AsyncResult.h +34 -318
- data/ext/ice/cpp/include/Ice/AsyncResultF.h +4 -2
- data/ext/ice/cpp/include/Ice/BatchRequestInterceptor.h +5 -10
- data/ext/ice/cpp/include/Ice/BatchRequestQueueF.h +1 -1
- data/ext/ice/cpp/include/Ice/Buffer.h +10 -10
- data/ext/ice/cpp/include/Ice/CommunicatorAsync.h +14 -12
- data/ext/ice/cpp/include/Ice/Comparable.h +130 -0
- data/ext/ice/cpp/include/Ice/Config.h +7 -36
- data/ext/ice/cpp/include/Ice/ConnectionAsync.h +107 -11
- data/ext/ice/cpp/include/Ice/ConnectionIF.h +5 -1
- data/ext/ice/cpp/include/Ice/ConsoleUtil.h +28 -0
- data/ext/ice/cpp/include/Ice/{DefaultObjectFactory.h → DefaultValueFactory.h} +28 -14
- data/ext/ice/cpp/include/Ice/DispatchInterceptor.h +4 -6
- data/ext/ice/cpp/include/Ice/Dispatcher.h +14 -13
- data/ext/ice/cpp/include/Ice/DynamicLibrary.h +7 -5
- data/ext/ice/cpp/include/Ice/DynamicLibraryF.h +1 -1
- data/ext/ice/cpp/include/Ice/Exception.h +66 -56
- data/ext/ice/cpp/include/Ice/ExceptionHelpers.h +69 -0
- data/ext/ice/cpp/include/Ice/FactoryTable.h +11 -12
- data/ext/ice/cpp/include/Ice/FactoryTableInit.h +27 -25
- data/ext/ice/cpp/include/Ice/Format.h +6 -1
- data/ext/ice/cpp/include/Ice/Functional.h +33 -33
- data/ext/ice/cpp/include/Ice/GCObject.h +9 -5
- data/ext/ice/cpp/include/Ice/Handle.h +6 -11
- data/ext/ice/cpp/include/Ice/Ice.h +9 -5
- data/ext/ice/cpp/include/{IceUtil → Ice}/IconvStringConverter.h +108 -62
- data/ext/ice/cpp/include/Ice/Incoming.h +109 -33
- data/ext/ice/cpp/include/Ice/IncomingAsync.h +63 -23
- data/ext/ice/cpp/include/Ice/IncomingAsyncF.h +7 -1
- data/ext/ice/cpp/include/Ice/Initialize.h +178 -38
- data/ext/ice/cpp/include/Ice/InputStream.h +994 -0
- data/ext/ice/cpp/include/Ice/InstanceF.h +1 -2
- data/ext/ice/cpp/include/Ice/InterfaceByValue.h +46 -0
- data/ext/ice/cpp/include/Ice/LocalObject.h +9 -9
- data/ext/ice/cpp/include/Ice/LocalObjectF.h +1 -1
- data/ext/ice/cpp/include/Ice/LoggerUtil.h +20 -14
- data/ext/ice/cpp/include/Ice/MetricsAdminI.h +114 -65
- data/ext/ice/cpp/include/Ice/MetricsFunctional.h +23 -5
- data/ext/ice/cpp/include/Ice/MetricsObserverI.h +99 -26
- data/ext/ice/cpp/include/Ice/NativePropertiesAdmin.h +17 -4
- data/ext/ice/cpp/include/Ice/Object.h +105 -56
- data/ext/ice/cpp/include/Ice/ObjectF.h +8 -3
- data/ext/ice/cpp/include/Ice/ObserverHelper.h +18 -8
- data/ext/ice/cpp/include/Ice/Optional.h +1084 -0
- data/ext/ice/cpp/include/Ice/OutgoingAsync.h +655 -84
- data/ext/ice/cpp/include/Ice/OutgoingAsyncF.h +12 -6
- data/ext/ice/cpp/include/Ice/OutputStream.h +753 -0
- data/ext/ice/cpp/include/Ice/Protocol.h +19 -12
- data/ext/ice/cpp/include/Ice/Proxy.h +1329 -717
- data/ext/ice/cpp/include/Ice/ProxyF.h +11 -33
- data/ext/ice/cpp/include/Ice/ProxyFactoryF.h +1 -1
- data/ext/ice/cpp/include/Ice/ProxyHandle.h +34 -50
- data/ext/ice/cpp/include/Ice/ReferenceF.h +1 -1
- data/ext/ice/cpp/include/Ice/RegisterPlugins.h +22 -3
- data/ext/ice/cpp/include/Ice/RequestHandlerF.h +10 -4
- data/ext/ice/cpp/include/Ice/ResponseHandlerF.h +6 -1
- data/ext/ice/cpp/include/{IceUtil → Ice}/SHA1.h +16 -16
- data/ext/ice/cpp/include/Ice/ServantManagerF.h +1 -1
- data/ext/ice/cpp/include/Ice/Service.h +13 -18
- data/ext/ice/cpp/include/Ice/SliceChecksums.h +1 -1
- data/ext/ice/cpp/include/Ice/SlicedData.h +46 -20
- data/ext/ice/cpp/include/Ice/SlicedDataF.h +14 -6
- data/ext/ice/cpp/include/Ice/StreamHelpers.h +159 -49
- data/ext/ice/cpp/include/Ice/StringConverter.h +52 -0
- data/ext/ice/cpp/include/Ice/ThreadPoolF.h +1 -1
- data/{slice/Ice/ObjectFactoryF.ice → ext/ice/cpp/include/Ice/UUID.h} +9 -7
- data/ext/ice/cpp/include/{IceUtil → Ice}/UniquePtr.h +21 -22
- data/ext/ice/cpp/include/Ice/UniqueRef.h +98 -0
- data/ext/ice/cpp/include/Ice/UserExceptionFactory.h +40 -8
- data/ext/ice/cpp/include/Ice/Value.h +104 -0
- data/{slice/Freeze/ConnectionF.ice → ext/ice/cpp/include/Ice/ValueF.h} +11 -7
- data/ext/ice/cpp/include/IceSSL/Config.h +8 -23
- data/ext/ice/cpp/include/IceSSL/IceSSL.h +17 -6
- data/ext/ice/cpp/include/IceSSL/OpenSSL.h +130 -0
- data/ext/ice/cpp/include/IceSSL/Plugin.h +172 -259
- data/ext/ice/cpp/include/IceSSL/SChannel.h +66 -0
- data/ext/ice/cpp/include/IceSSL/SecureTransport.h +66 -0
- data/ext/ice/cpp/include/IceSSL/UWP.h +58 -0
- data/ext/ice/cpp/include/IceUtil/Atomic.h +8 -10
- data/ext/ice/cpp/include/IceUtil/Cond.h +17 -18
- data/ext/ice/cpp/include/IceUtil/Config.h +138 -39
- data/ext/ice/cpp/include/IceUtil/ConsoleUtil.h +97 -0
- data/ext/ice/cpp/include/IceUtil/CountDownLatch.h +5 -5
- data/ext/ice/cpp/include/IceUtil/CtrlCHandler.h +23 -17
- data/ext/ice/cpp/include/IceUtil/DisableWarnings.h +1 -3
- data/ext/ice/cpp/include/IceUtil/Exception.h +157 -67
- data/ext/ice/cpp/include/IceUtil/FileUtil.h +148 -0
- data/ext/ice/cpp/include/IceUtil/Functional.h +1 -2
- data/ext/ice/cpp/include/IceUtil/Handle.h +11 -11
- data/ext/ice/cpp/include/IceUtil/IceUtil.h +4 -10
- data/ext/ice/cpp/include/IceUtil/InputUtil.h +3 -3
- data/ext/ice/cpp/include/IceUtil/Iterator.h +2 -2
- data/ext/ice/cpp/include/IceUtil/Lock.h +8 -10
- data/ext/ice/cpp/include/IceUtil/Monitor.h +1 -2
- data/ext/ice/cpp/include/IceUtil/Mutex.h +17 -11
- data/ext/ice/cpp/include/IceUtil/MutexProtocol.h +2 -2
- data/ext/ice/cpp/include/IceUtil/MutexPtrLock.h +4 -4
- data/ext/ice/cpp/include/IceUtil/MutexPtrTryLock.h +4 -4
- data/ext/ice/cpp/include/IceUtil/Optional.h +32 -18
- data/ext/ice/cpp/include/IceUtil/Options.h +17 -18
- data/ext/ice/cpp/include/IceUtil/OutputUtil.h +55 -29
- data/ext/ice/cpp/include/IceUtil/PopDisableWarnings.h +6 -6
- data/ext/ice/cpp/include/IceUtil/PushDisableWarnings.h +11 -10
- data/ext/ice/cpp/include/IceUtil/Random.h +3 -3
- data/ext/ice/cpp/include/IceUtil/RecMutex.h +7 -8
- data/ext/ice/cpp/include/IceUtil/ResourceConfig.h +58 -0
- data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +1 -9
- data/ext/ice/cpp/include/IceUtil/ScopedArray.h +8 -2
- data/ext/ice/cpp/include/IceUtil/Shared.h +5 -7
- data/ext/ice/cpp/{src → include}/IceUtil/StopWatch.h +2 -2
- data/ext/ice/cpp/include/IceUtil/StringConverter.h +77 -72
- data/ext/ice/cpp/include/IceUtil/StringUtil.h +32 -21
- data/ext/ice/cpp/include/IceUtil/Thread.h +10 -12
- data/ext/ice/cpp/include/IceUtil/ThreadException.h +33 -42
- data/ext/ice/cpp/include/IceUtil/Time.h +3 -3
- data/ext/ice/cpp/include/IceUtil/Timer.h +14 -13
- data/ext/ice/cpp/include/IceUtil/UUID.h +2 -2
- data/ext/ice/cpp/include/IceUtil/UndefSysMacros.h +1 -1
- data/ext/ice/cpp/include/{Ice → generated/Ice}/BuiltinSequences.h +41 -8
- data/ext/ice/cpp/include/generated/Ice/Communicator.h +364 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/CommunicatorF.h +40 -8
- data/ext/ice/cpp/include/generated/Ice/Connection.h +872 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ConnectionF.h +46 -8
- data/ext/ice/cpp/include/{Ice → generated/Ice}/Current.h +71 -8
- data/ext/ice/cpp/include/generated/Ice/Endpoint.h +582 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/EndpointF.h +62 -8
- data/ext/ice/cpp/include/{Ice → generated/Ice}/EndpointTypes.h +31 -16
- data/ext/ice/cpp/include/{Ice → generated/Ice}/FacetMap.h +23 -8
- data/ext/ice/cpp/include/generated/Ice/Identity.h +221 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ImplicitContext.h +72 -13
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ImplicitContextF.h +40 -8
- data/ext/ice/cpp/include/generated/Ice/Instrumentation.h +602 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/InstrumentationF.h +54 -8
- data/ext/ice/cpp/include/generated/Ice/LocalException.h +2802 -0
- data/ext/ice/cpp/include/generated/Ice/Locator.h +2036 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/LocatorF.h +53 -12
- data/ext/ice/cpp/include/{Ice → generated/Ice}/Logger.h +71 -13
- data/ext/ice/cpp/include/{Ice → generated/Ice}/LoggerF.h +40 -8
- data/ext/ice/cpp/include/generated/Ice/Metrics.h +2649 -0
- data/ext/ice/cpp/include/generated/Ice/ObjectAdapter.h +302 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ObjectAdapterF.h +40 -8
- data/ext/ice/cpp/include/generated/Ice/ObjectFactory.h +142 -0
- data/ext/ice/cpp/include/generated/Ice/Plugin.h +197 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/PluginF.h +43 -8
- data/ext/ice/cpp/include/generated/Ice/Process.h +536 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ProcessF.h +45 -10
- data/ext/ice/cpp/include/{Ice → generated/Ice}/Properties.h +88 -21
- data/ext/ice/cpp/include/generated/Ice/PropertiesAdmin.h +749 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/PropertiesF.h +48 -10
- data/ext/ice/cpp/include/generated/Ice/RemoteLogger.h +1449 -0
- data/ext/ice/cpp/include/generated/Ice/Router.h +1032 -0
- data/ext/ice/cpp/include/{Ice → generated/Ice}/RouterF.h +45 -10
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ServantLocator.h +65 -13
- data/ext/ice/cpp/include/{Ice → generated/Ice}/ServantLocatorF.h +40 -8
- data/ext/ice/cpp/include/{Ice → generated/Ice}/SliceChecksumDict.h +23 -8
- data/ext/ice/cpp/include/generated/Ice/ValueFactory.h +169 -0
- data/ext/ice/cpp/include/generated/Ice/Version.h +334 -0
- data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +172 -0
- data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +98 -0
- data/ext/ice/cpp/include/generated/IceSSL/EndpointInfo.h +156 -0
- data/ext/ice/cpp/src/Ice/ACM.cpp +18 -14
- data/ext/ice/cpp/src/Ice/ACM.h +9 -2
- data/ext/ice/cpp/{include → src}/Ice/ACMF.h +10 -5
- data/ext/ice/cpp/src/Ice/Acceptor.cpp +6 -1
- data/ext/ice/cpp/src/Ice/Acceptor.h +4 -3
- data/ext/ice/cpp/src/Ice/AcceptorF.h +1 -1
- data/ext/ice/cpp/src/{IceUtil → Ice}/ArgVector.cpp +9 -9
- data/ext/ice/cpp/src/{IceUtil → Ice}/ArgVector.h +7 -7
- data/ext/ice/cpp/src/Ice/AsyncResult.cpp +15 -538
- data/ext/ice/cpp/src/Ice/Base64.cpp +11 -11
- data/ext/ice/cpp/src/Ice/Base64.h +1 -1
- data/ext/ice/cpp/src/Ice/BatchRequestQueue.cpp +40 -12
- data/ext/ice/cpp/src/Ice/BatchRequestQueue.h +15 -10
- data/ext/ice/cpp/src/Ice/Buffer.cpp +74 -12
- data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +20 -6
- data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.cpp +85 -190
- data/ext/ice/cpp/src/Ice/CollocatedRequestHandler.h +17 -18
- data/ext/ice/cpp/src/Ice/Communicator.cpp +39 -8
- data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +271 -104
- data/ext/ice/cpp/src/Ice/CommunicatorI.h +84 -28
- data/ext/ice/cpp/src/{IceUtil → Ice}/Cond.cpp +3 -3
- data/ext/ice/cpp/src/Ice/ConnectRequestHandler.cpp +58 -125
- data/ext/ice/cpp/src/Ice/ConnectRequestHandler.h +11 -22
- data/ext/ice/cpp/src/Ice/ConnectRequestHandlerF.h +6 -2
- data/ext/ice/cpp/src/Ice/Connection.cpp +88 -8
- data/ext/ice/cpp/src/Ice/ConnectionF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/ConnectionFactory.cpp +158 -80
- data/ext/ice/cpp/src/Ice/ConnectionFactory.h +41 -23
- data/ext/ice/cpp/{include → src}/Ice/ConnectionFactoryF.h +8 -3
- data/ext/ice/cpp/src/Ice/ConnectionI.cpp +707 -653
- data/ext/ice/cpp/src/Ice/ConnectionI.h +97 -69
- data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.cpp +2 -15
- data/ext/ice/cpp/src/Ice/ConnectionRequestHandler.h +4 -3
- data/ext/ice/cpp/src/Ice/Connector.cpp +6 -1
- data/ext/ice/cpp/src/Ice/Connector.h +4 -3
- data/ext/ice/cpp/src/Ice/ConnectorF.h +1 -1
- data/ext/ice/cpp/src/{IceUtil → Ice}/CountDownLatch.cpp +4 -4
- data/ext/ice/cpp/src/Ice/Current.cpp +29 -6
- data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.cpp +6 -5
- data/ext/ice/cpp/src/Ice/DefaultsAndOverrides.h +1 -1
- data/ext/ice/cpp/src/Ice/DefaultsAndOverridesF.h +1 -1
- data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +5 -25
- data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +29 -19
- data/ext/ice/cpp/src/Ice/Endpoint.cpp +85 -6
- data/ext/ice/cpp/src/Ice/EndpointF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/EndpointFactory.cpp +152 -1
- data/ext/ice/cpp/src/Ice/EndpointFactory.h +72 -6
- data/ext/ice/cpp/src/Ice/EndpointFactoryF.h +1 -1
- data/ext/ice/cpp/src/Ice/EndpointFactoryManager.cpp +35 -19
- data/ext/ice/cpp/src/Ice/EndpointFactoryManager.h +10 -4
- data/ext/ice/cpp/src/Ice/EndpointFactoryManagerF.h +1 -1
- data/ext/ice/cpp/src/Ice/EndpointI.cpp +17 -1
- data/ext/ice/cpp/src/Ice/EndpointI.h +35 -9
- data/ext/ice/cpp/src/Ice/EndpointIF.h +18 -5
- data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +18 -6
- data/ext/ice/cpp/src/Ice/EventHandler.cpp +6 -4
- data/ext/ice/cpp/src/Ice/EventHandler.h +13 -8
- data/ext/ice/cpp/src/Ice/EventHandlerF.h +5 -2
- data/ext/ice/cpp/src/Ice/Exception.cpp +95 -86
- data/ext/ice/cpp/src/Ice/FacetMap.cpp +20 -6
- data/ext/ice/cpp/src/Ice/FactoryTable.cpp +37 -28
- data/ext/ice/cpp/src/Ice/FactoryTableInit.cpp +2 -4
- data/ext/ice/cpp/src/Ice/GCObject.cpp +28 -25
- data/ext/ice/cpp/src/Ice/HashUtil.h +2 -3
- data/ext/ice/cpp/src/Ice/HttpParser.cpp +1 -2
- data/ext/ice/cpp/src/Ice/HttpParser.h +1 -1
- data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +92 -53
- data/ext/ice/cpp/src/Ice/IPEndpointI.h +19 -10
- data/ext/ice/cpp/src/Ice/IPEndpointIF.h +6 -2
- data/ext/ice/cpp/src/Ice/IconvStringConverter.cpp +56 -0
- data/ext/ice/cpp/src/Ice/Identity.cpp +24 -10
- data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +37 -6
- data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/ImplicitContextI.cpp +14 -14
- data/ext/ice/cpp/src/Ice/ImplicitContextI.h +7 -5
- data/ext/ice/cpp/src/Ice/Incoming.cpp +276 -245
- data/ext/ice/cpp/src/Ice/IncomingAsync.cpp +104 -209
- data/ext/ice/cpp/src/Ice/IncomingRequest.h +5 -4
- data/ext/ice/cpp/src/Ice/Initialize.cpp +299 -172
- data/ext/ice/cpp/src/Ice/InputStream.cpp +2773 -0
- data/ext/ice/cpp/src/Ice/Instance.cpp +191 -231
- data/ext/ice/cpp/src/Ice/Instance.h +30 -18
- data/ext/ice/cpp/src/Ice/Instrumentation.cpp +106 -7
- data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/InstrumentationI.cpp +117 -99
- data/ext/ice/cpp/src/Ice/InstrumentationI.h +30 -31
- data/ext/ice/cpp/src/Ice/LocalException.cpp +1190 -416
- data/ext/ice/cpp/src/Ice/LocalObject.cpp +1 -2
- data/ext/ice/cpp/src/Ice/Locator.cpp +1167 -1215
- data/ext/ice/cpp/src/Ice/LocatorF.cpp +29 -6
- data/ext/ice/cpp/src/Ice/LocatorInfo.cpp +129 -163
- data/ext/ice/cpp/src/Ice/LocatorInfo.h +29 -29
- data/ext/ice/cpp/src/Ice/LocatorInfoF.h +1 -1
- data/ext/ice/cpp/src/Ice/Logger.cpp +35 -5
- data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +178 -73
- data/ext/ice/cpp/src/Ice/LoggerAdminI.h +4 -4
- data/ext/ice/cpp/src/Ice/LoggerF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/LoggerI.cpp +14 -44
- data/ext/ice/cpp/src/Ice/LoggerI.h +7 -13
- data/ext/ice/cpp/src/Ice/LoggerUtil.cpp +10 -12
- data/ext/ice/cpp/src/Ice/Metrics.cpp +1059 -1069
- data/ext/ice/cpp/src/Ice/MetricsAdminI.cpp +49 -19
- data/ext/ice/cpp/src/Ice/MetricsObserverI.cpp +1 -2
- data/ext/ice/cpp/src/Ice/Network.cpp +534 -170
- data/ext/ice/cpp/src/Ice/Network.h +100 -23
- data/ext/ice/cpp/src/Ice/NetworkF.h +2 -2
- data/ext/ice/cpp/src/Ice/NetworkProxy.cpp +21 -14
- data/ext/ice/cpp/src/Ice/NetworkProxy.h +5 -2
- data/ext/ice/cpp/src/Ice/NetworkProxyF.h +1 -1
- data/ext/ice/cpp/src/Ice/Object.cpp +217 -221
- data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +41 -6
- data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.cpp +35 -14
- data/ext/ice/cpp/src/Ice/ObjectAdapterFactory.h +13 -7
- data/ext/ice/cpp/{include → src}/Ice/ObjectAdapterFactoryF.h +5 -1
- data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +184 -58
- data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +32 -26
- data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +37 -6
- data/ext/ice/cpp/src/Ice/ObserverHelper.cpp +9 -32
- data/ext/ice/cpp/src/Ice/OpaqueEndpointI.cpp +40 -18
- data/ext/ice/cpp/src/Ice/OpaqueEndpointI.h +14 -5
- data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +803 -365
- data/ext/ice/cpp/src/Ice/OutputStream.cpp +1399 -0
- data/ext/ice/cpp/src/Ice/Plugin.cpp +45 -6
- data/ext/ice/cpp/src/Ice/PluginF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/PluginManagerI.cpp +13 -13
- data/ext/ice/cpp/src/Ice/PluginManagerI.h +5 -6
- data/ext/ice/cpp/src/Ice/Process.cpp +256 -114
- data/ext/ice/cpp/src/Ice/ProcessF.cpp +29 -6
- data/ext/ice/cpp/src/Ice/Properties.cpp +38 -8
- data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +340 -328
- data/ext/ice/cpp/src/Ice/PropertiesAdminI.cpp +81 -17
- data/ext/ice/cpp/src/Ice/PropertiesAdminI.h +29 -5
- data/ext/ice/cpp/src/Ice/PropertiesF.cpp +29 -6
- data/ext/ice/cpp/src/Ice/PropertiesI.cpp +25 -26
- data/ext/ice/cpp/src/Ice/PropertiesI.h +8 -11
- data/ext/ice/cpp/src/Ice/PropertyNames.cpp +107 -50
- data/ext/ice/cpp/src/Ice/PropertyNames.h +4 -2
- data/ext/ice/cpp/src/Ice/Protocol.cpp +2 -2
- data/ext/ice/cpp/src/Ice/ProtocolInstance.cpp +37 -2
- data/ext/ice/cpp/src/Ice/ProtocolInstance.h +9 -20
- data/ext/ice/cpp/src/Ice/ProtocolInstanceF.h +1 -1
- data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.cpp +6 -1
- data/ext/ice/cpp/src/Ice/ProtocolPluginFacade.h +3 -1
- data/ext/ice/cpp/src/Ice/ProtocolPluginFacadeF.h +1 -1
- data/ext/ice/cpp/src/Ice/Proxy.cpp +690 -964
- data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +23 -32
- data/ext/ice/cpp/src/Ice/ProxyFactory.h +16 -11
- data/ext/ice/cpp/src/Ice/Reference.cpp +75 -69
- data/ext/ice/cpp/src/Ice/Reference.h +27 -22
- data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +18 -21
- data/ext/ice/cpp/src/Ice/ReferenceFactory.h +12 -12
- data/ext/ice/cpp/src/Ice/ReferenceFactoryF.h +1 -1
- data/ext/ice/cpp/src/Ice/RegisterPluginsInit.cpp +18 -4
- data/ext/ice/cpp/src/Ice/RegisterPluginsInit.h +1 -1
- data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +672 -552
- data/ext/ice/cpp/src/Ice/ReplyStatus.h +1 -1
- data/ext/ice/cpp/src/Ice/RequestHandler.cpp +5 -3
- data/ext/ice/cpp/src/Ice/RequestHandler.h +10 -13
- data/ext/ice/cpp/src/Ice/RequestHandlerFactory.cpp +10 -6
- data/ext/ice/cpp/src/Ice/RequestHandlerFactory.h +2 -2
- data/ext/ice/cpp/src/Ice/ResponseHandler.cpp +3 -6
- data/ext/ice/cpp/src/Ice/ResponseHandler.h +16 -7
- data/ext/ice/cpp/src/Ice/RetryQueue.cpp +6 -12
- data/ext/ice/cpp/src/Ice/RetryQueue.h +7 -6
- data/ext/ice/cpp/src/Ice/RetryQueueF.h +1 -1
- data/ext/ice/cpp/src/Ice/Router.cpp +523 -474
- data/ext/ice/cpp/src/Ice/RouterF.cpp +29 -6
- data/ext/ice/cpp/src/Ice/RouterInfo.cpp +91 -70
- data/ext/ice/cpp/src/Ice/RouterInfo.h +43 -32
- data/ext/ice/cpp/src/Ice/RouterInfoF.h +1 -1
- data/ext/ice/cpp/src/{IceUtil → Ice}/SHA1.cpp +21 -21
- data/ext/ice/cpp/src/Ice/Selector.cpp +989 -923
- data/ext/ice/cpp/src/Ice/Selector.h +100 -147
- data/ext/ice/cpp/src/Ice/ServantLocator.cpp +37 -6
- data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +27 -5
- data/ext/ice/cpp/src/Ice/ServantManager.cpp +9 -9
- data/ext/ice/cpp/src/Ice/ServantManager.h +1 -1
- data/ext/ice/cpp/src/Ice/SharedContext.h +2 -2
- data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +20 -6
- data/ext/ice/cpp/src/Ice/SliceChecksums.cpp +2 -2
- data/ext/ice/cpp/src/Ice/SlicedData.cpp +72 -20
- data/ext/ice/cpp/src/Ice/StreamSocket.cpp +173 -18
- data/ext/ice/cpp/src/Ice/StreamSocket.h +13 -4
- data/ext/ice/cpp/src/Ice/StringConverterPlugin.cpp +48 -17
- data/ext/ice/cpp/src/Ice/StringUtil.h +35 -0
- data/ext/ice/cpp/src/Ice/SysLoggerI.cpp +8 -4
- data/ext/ice/cpp/src/Ice/SysLoggerI.h +2 -3
- data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +158 -32
- data/ext/ice/cpp/src/Ice/TcpAcceptor.h +12 -5
- data/ext/ice/cpp/src/Ice/TcpConnector.cpp +1 -7
- data/ext/ice/cpp/src/Ice/TcpConnector.h +1 -2
- data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +40 -32
- data/ext/ice/cpp/src/Ice/TcpEndpointI.h +11 -8
- data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +12 -27
- data/ext/ice/cpp/src/Ice/TcpTransceiver.h +7 -10
- data/ext/ice/cpp/src/{IceUtil → Ice}/Thread.cpp +24 -41
- data/ext/ice/cpp/src/Ice/ThreadPool.cpp +175 -267
- data/ext/ice/cpp/src/Ice/ThreadPool.h +38 -43
- data/ext/ice/cpp/src/{IceUtil → Ice}/Timer.cpp +28 -21
- data/ext/ice/cpp/src/Ice/TraceLevels.cpp +2 -2
- data/ext/ice/cpp/src/Ice/TraceLevels.h +1 -1
- data/ext/ice/cpp/src/Ice/TraceLevelsF.h +2 -2
- data/ext/ice/cpp/src/Ice/TraceUtil.cpp +53 -31
- data/ext/ice/cpp/src/Ice/TraceUtil.h +13 -6
- data/ext/ice/cpp/src/Ice/Transceiver.cpp +1 -2
- data/ext/ice/cpp/src/Ice/Transceiver.h +8 -7
- data/ext/ice/cpp/src/Ice/TransceiverF.h +1 -1
- data/ext/ice/cpp/src/Ice/UdpConnector.cpp +2 -8
- data/ext/ice/cpp/src/Ice/UdpConnector.h +1 -2
- data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +92 -31
- data/ext/ice/cpp/src/Ice/UdpEndpointI.h +12 -4
- data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +150 -179
- data/ext/ice/cpp/src/Ice/UdpTransceiver.h +15 -17
- data/ext/ice/cpp/src/Ice/Value.cpp +81 -0
- data/ext/ice/cpp/src/Ice/ValueFactory.cpp +84 -0
- data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.cpp +70 -0
- data/ext/ice/cpp/src/Ice/ValueFactoryManagerI.h +42 -0
- data/ext/ice/cpp/src/Ice/Version.cpp +24 -14
- data/ext/ice/cpp/src/Ice/VirtualShared.h +43 -0
- data/ext/ice/cpp/src/Ice/WSAcceptor.cpp +3 -9
- data/ext/ice/cpp/src/Ice/WSAcceptor.h +3 -7
- data/ext/ice/cpp/src/Ice/WSConnector.cpp +5 -11
- data/ext/ice/cpp/src/Ice/WSConnector.h +3 -6
- data/ext/ice/cpp/src/Ice/WSEndpoint.cpp +185 -80
- data/ext/ice/cpp/src/Ice/WSEndpoint.h +21 -31
- data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +41 -37
- data/ext/ice/cpp/src/Ice/WSTransceiver.h +7 -21
- data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +526 -264
- data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +341 -455
- data/ext/ice/cpp/src/IceDiscovery/LocatorI.cpp +86 -26
- data/ext/ice/cpp/src/IceDiscovery/LocatorI.h +59 -23
- data/ext/ice/cpp/src/IceDiscovery/LookupI.cpp +315 -61
- data/ext/ice/cpp/src/IceDiscovery/LookupI.h +83 -36
- data/ext/ice/cpp/src/IceDiscovery/PluginI.cpp +57 -59
- data/ext/ice/cpp/src/IceDiscovery/PluginI.h +3 -3
- data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.cpp +396 -159
- data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.h +251 -355
- data/ext/ice/cpp/src/IceLocatorDiscovery/Plugin.h +52 -0
- data/ext/ice/cpp/src/IceLocatorDiscovery/PluginI.cpp +526 -131
- data/ext/ice/cpp/src/IceSSL/AcceptorI.cpp +19 -165
- data/ext/ice/cpp/src/IceSSL/AcceptorI.h +8 -17
- data/ext/ice/cpp/src/IceSSL/CertificateI.cpp +284 -0
- data/ext/ice/cpp/src/IceSSL/CertificateI.h +69 -0
- data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +39 -11
- data/ext/ice/cpp/src/{Ice/ObjectFactoryF.cpp → IceSSL/ConnectionInfoF.cpp} +31 -9
- data/ext/ice/cpp/src/IceSSL/ConnectorI.cpp +14 -56
- data/ext/ice/cpp/src/IceSSL/ConnectorI.h +6 -13
- data/ext/ice/cpp/src/IceSSL/EndpointI.cpp +205 -197
- data/ext/ice/cpp/src/IceSSL/EndpointI.h +41 -33
- data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +39 -10
- data/ext/ice/cpp/src/IceSSL/Instance.cpp +1 -6
- data/ext/ice/cpp/src/IceSSL/Instance.h +7 -7
- data/ext/ice/cpp/src/IceSSL/InstanceF.h +11 -7
- data/ext/ice/cpp/src/IceSSL/OpenSSLCertificateI.cpp +588 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +117 -152
- data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.h +64 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLEngineF.h +32 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLPluginI.cpp +132 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +400 -89
- data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.h +36 -21
- data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.cpp +291 -0
- data/ext/ice/cpp/src/IceSSL/OpenSSLUtil.h +63 -0
- data/ext/ice/cpp/src/IceSSL/PluginI.cpp +71 -41
- data/ext/ice/cpp/src/IceSSL/PluginI.h +13 -18
- data/ext/ice/cpp/src/IceSSL/RFC2253.cpp +9 -54
- data/ext/ice/cpp/src/IceSSL/RFC2253.h +7 -7
- data/ext/ice/cpp/src/IceSSL/SChannelCertificateI.cpp +585 -0
- data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +491 -75
- data/ext/ice/cpp/src/IceSSL/SChannelEngine.h +126 -0
- data/ext/ice/cpp/src/IceSSL/SChannelEngineF.h +32 -0
- data/ext/ice/cpp/src/IceSSL/SChannelPluginI.cpp +78 -0
- data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +126 -169
- data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.h +19 -22
- data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +79 -74
- data/ext/ice/cpp/src/IceSSL/SSLEngine.h +24 -187
- data/ext/ice/cpp/src/IceSSL/SSLEngineF.h +4 -19
- data/ext/ice/cpp/src/IceSSL/SecureTransportCertificateI.cpp +862 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.cpp +56 -214
- data/ext/ice/cpp/src/IceSSL/SecureTransportEngine.h +60 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportEngineF.h +31 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportPluginI.cpp +80 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +137 -144
- data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.h +25 -28
- data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +857 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.h +46 -0
- data/ext/ice/cpp/src/IceSSL/TrustManager.cpp +9 -13
- data/ext/ice/cpp/src/IceSSL/TrustManager.h +4 -4
- data/ext/ice/cpp/src/IceSSL/TrustManagerF.h +3 -3
- data/ext/ice/cpp/src/IceSSL/UWPCertificateI.cpp +271 -0
- data/ext/ice/cpp/src/IceSSL/UWPEngine.cpp +343 -0
- data/ext/ice/cpp/src/IceSSL/UWPEngine.h +46 -0
- data/ext/ice/cpp/{include/Ice/ObjectFactoryManagerF.h → src/IceSSL/UWPEngineF.h} +13 -8
- data/ext/ice/cpp/src/IceSSL/UWPPluginI.cpp +94 -0
- data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.cpp +388 -0
- data/ext/ice/cpp/src/IceSSL/UWPTransceiverI.h +76 -0
- data/ext/ice/cpp/src/IceSSL/Util.cpp +66 -1256
- data/ext/ice/cpp/src/IceSSL/Util.h +48 -137
- data/ext/ice/cpp/src/IceUtil/ConsoleUtil.cpp +162 -0
- data/ext/ice/cpp/src/IceUtil/ConvertUTF.cpp +22 -22
- data/ext/ice/cpp/src/IceUtil/ConvertUTF.h +34 -26
- data/ext/ice/cpp/src/IceUtil/CtrlCHandler.cpp +20 -31
- data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +25 -116
- data/ext/ice/cpp/src/IceUtil/InputUtil.cpp +1 -1
- data/ext/ice/cpp/src/IceUtil/MutexProtocol.cpp +1 -1
- data/ext/ice/cpp/src/IceUtil/Options.cpp +23 -46
- data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +7 -6
- data/ext/ice/cpp/src/IceUtil/Random.cpp +13 -13
- data/ext/ice/cpp/src/IceUtil/RecMutex.cpp +3 -9
- data/ext/ice/cpp/src/IceUtil/Shared.cpp +8 -3
- data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +501 -264
- data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +540 -235
- data/ext/ice/cpp/src/IceUtil/ThreadException.cpp +37 -74
- data/ext/ice/cpp/src/IceUtil/Time.cpp +1 -1
- data/ext/ice/cpp/src/IceUtil/UUID.cpp +10 -10
- data/ext/ice/cpp/src/IceUtil/Unicode.cpp +98 -97
- data/ext/ice/cpp/src/IceUtil/Unicode.h +21 -35
- data/ext/ice/cpp/src/IceUtil/UtilException.cpp +838 -0
- data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +815 -163
- data/ext/ice/cpp/src/Slice/CPlusPlusUtil.h +76 -0
- data/ext/ice/cpp/src/Slice/Checksum.cpp +2 -2
- data/ext/ice/cpp/{include → src}/Slice/Checksum.h +2 -2
- data/ext/ice/cpp/src/Slice/FileTracker.cpp +25 -78
- data/ext/ice/cpp/{include → src}/Slice/FileTracker.h +9 -9
- data/ext/ice/cpp/src/Slice/Grammar.cpp +1994 -1943
- data/ext/ice/cpp/src/Slice/Grammar.h +44 -24
- data/ext/ice/cpp/src/Slice/GrammarUtil.h +14 -14
- data/ext/ice/cpp/src/Slice/JavaUtil.cpp +2658 -1927
- data/ext/ice/cpp/{include → src}/Slice/JavaUtil.h +178 -59
- data/ext/ice/cpp/src/Slice/MD5.cpp +1 -1
- data/ext/ice/cpp/src/Slice/MD5.h +1 -1
- data/ext/ice/cpp/src/Slice/MD5I.cpp +0 -1
- data/ext/ice/cpp/src/Slice/MD5I.h +1 -1
- data/ext/ice/cpp/src/Slice/PHPUtil.cpp +12 -15
- data/ext/ice/cpp/{include → src}/Slice/PHPUtil.h +6 -15
- data/ext/ice/cpp/src/Slice/Parser.cpp +802 -307
- data/ext/ice/cpp/{include → src}/Slice/Parser.h +76 -84
- data/ext/ice/cpp/src/Slice/Preprocessor.cpp +43 -21
- data/ext/ice/cpp/{include → src}/Slice/Preprocessor.h +7 -12
- data/ext/ice/cpp/src/Slice/Python.cpp +207 -86
- data/ext/ice/cpp/src/Slice/PythonUtil.cpp +683 -679
- data/ext/ice/cpp/{include → src}/Slice/PythonUtil.h +19 -8
- data/ext/ice/cpp/src/Slice/Ruby.cpp +38 -34
- data/ext/ice/cpp/src/Slice/RubyUtil.cpp +177 -445
- data/ext/ice/cpp/{include → src}/Slice/RubyUtil.h +6 -6
- data/ext/ice/cpp/src/Slice/Scanner.cpp +218 -306
- data/ext/ice/cpp/src/Slice/{Util.cpp → SliceUtil.cpp} +37 -64
- data/ext/ice/cpp/src/Slice/StringLiteralUtil.cpp +374 -0
- data/ext/ice/cpp/src/Slice/Util.h +54 -0
- data/ext/ice/mcpp/Makefile +5 -2
- data/ice.gemspec +2 -7
- data/lib/Glacier2.rb +1 -1
- data/lib/Glacier2/Metrics.rb +7 -46
- data/lib/Glacier2/PermissionsVerifier.rb +24 -95
- data/lib/Glacier2/PermissionsVerifierF.rb +3 -3
- data/lib/Glacier2/Router.rb +32 -74
- data/lib/Glacier2/RouterF.rb +3 -3
- data/lib/Glacier2/SSLInfo.rb +4 -7
- data/lib/Glacier2/Session.rb +88 -307
- data/lib/Ice.rb +83 -52
- data/lib/Ice/BuiltinSequences.rb +4 -4
- data/lib/Ice/Communicator.rb +56 -58
- data/lib/Ice/CommunicatorF.rb +3 -3
- data/lib/Ice/Connection.rb +153 -162
- data/lib/Ice/ConnectionF.rb +3 -3
- data/lib/Ice/Current.rb +4 -11
- data/lib/Ice/Endpoint.rb +57 -133
- data/lib/Ice/EndpointF.rb +3 -3
- data/lib/Ice/EndpointTypes.rb +3 -7
- data/lib/Ice/FacetMap.rb +4 -4
- data/lib/Ice/Identity.rb +5 -8
- data/lib/Ice/ImplicitContext.rb +5 -34
- data/lib/Ice/ImplicitContextF.rb +3 -3
- data/lib/Ice/Instrumentation.rb +23 -275
- data/lib/Ice/InstrumentationF.rb +3 -3
- data/lib/Ice/LocalException.rb +95 -141
- data/lib/Ice/Locator.rb +51 -165
- data/lib/Ice/LocatorF.rb +3 -3
- data/lib/Ice/Logger.rb +5 -34
- data/lib/Ice/LoggerF.rb +3 -3
- data/lib/Ice/Metrics.rb +61 -416
- data/lib/Ice/ObjectAdapter.rb +34 -0
- data/lib/Ice/ObjectAdapterF.rb +3 -3
- data/lib/Ice/ObjectFactory.rb +5 -30
- data/lib/Ice/Plugin.rb +7 -60
- data/lib/Ice/PluginF.rb +3 -3
- data/lib/Ice/Process.rb +16 -52
- data/lib/Ice/ProcessF.rb +3 -3
- data/lib/Ice/Properties.rb +5 -41
- data/lib/Ice/PropertiesAdmin.rb +19 -56
- data/lib/Ice/PropertiesF.rb +3 -3
- data/lib/Ice/RemoteLogger.rb +34 -115
- data/lib/Ice/Router.rb +29 -101
- data/lib/Ice/RouterF.rb +3 -3
- data/lib/Ice/ServantLocator.rb +31 -0
- data/lib/Ice/{ObjectFactoryF.rb → ServantLocatorF.rb} +6 -6
- data/lib/Ice/SliceChecksumDict.rb +3 -3
- data/lib/Ice/ValueFactory.rb +33 -0
- data/lib/Ice/Version.rb +5 -11
- data/lib/IceBox.rb +1 -1
- data/lib/IceBox/IceBox.rb +44 -148
- data/lib/IceGrid.rb +1 -4
- data/lib/IceGrid/Admin.rb +551 -427
- data/lib/IceGrid/Descriptor.rb +62 -529
- data/lib/IceGrid/Exception.rb +24 -45
- data/lib/IceGrid/FileParser.rb +14 -50
- data/lib/IceGrid/PluginFacade.rb +40 -0
- data/lib/IceGrid/Registry.rb +151 -58
- data/lib/IceGrid/Session.rb +25 -64
- data/lib/IceGrid/UserAccountMapper.rb +14 -50
- data/lib/IcePatch2.rb +1 -1
- data/lib/IcePatch2/FileInfo.rb +5 -11
- data/lib/IcePatch2/FileServer.rb +33 -76
- data/lib/IceStorm.rb +1 -1
- data/lib/IceStorm/IceStorm.rb +79 -206
- data/lib/IceStorm/Metrics.rb +11 -89
- data/slice/Glacier2/Metrics.ice +8 -4
- data/slice/Glacier2/PermissionsVerifier.ice +10 -7
- data/slice/Glacier2/PermissionsVerifierF.ice +7 -4
- data/slice/Glacier2/Router.ice +10 -8
- data/slice/Glacier2/RouterF.ice +7 -4
- data/slice/Glacier2/SSLInfo.ice +8 -5
- data/slice/Glacier2/Session.ice +15 -13
- data/slice/Ice/BuiltinSequences.ice +7 -4
- data/slice/Ice/Communicator.ice +141 -66
- data/slice/Ice/CommunicatorF.ice +7 -4
- data/slice/Ice/Connection.ice +183 -86
- data/slice/Ice/ConnectionF.ice +7 -4
- data/slice/Ice/Current.ice +13 -9
- data/slice/Ice/Endpoint.ice +63 -14
- data/slice/Ice/EndpointF.ice +7 -4
- data/slice/Ice/EndpointTypes.ice +8 -6
- data/slice/Ice/FacetMap.ice +7 -4
- data/slice/Ice/Identity.ice +13 -5
- data/slice/Ice/ImplicitContext.ice +20 -18
- data/slice/Ice/ImplicitContextF.ice +7 -4
- data/slice/Ice/Instrumentation.ice +20 -19
- data/slice/Ice/InstrumentationF.ice +8 -5
- data/slice/Ice/LocalException.ice +87 -87
- data/slice/Ice/Locator.ice +19 -18
- data/slice/Ice/LocatorF.ice +7 -4
- data/slice/Ice/Logger.ice +9 -7
- data/slice/Ice/LoggerF.ice +7 -4
- data/slice/Ice/Metrics.ice +18 -14
- data/slice/Ice/ObjectAdapter.ice +30 -13
- data/slice/Ice/ObjectAdapterF.ice +7 -4
- data/slice/Ice/ObjectFactory.ice +15 -12
- data/slice/Ice/Plugin.ice +9 -6
- data/slice/Ice/PluginF.ice +8 -5
- data/slice/Ice/Process.ice +9 -6
- data/slice/Ice/ProcessF.ice +7 -4
- data/slice/Ice/Properties.ice +15 -12
- data/slice/Ice/PropertiesAdmin.ice +9 -5
- data/slice/Ice/PropertiesF.ice +7 -4
- data/slice/Ice/RemoteLogger.ice +33 -24
- data/slice/Ice/Router.ice +16 -7
- data/slice/Ice/RouterF.ice +7 -4
- data/slice/Ice/ServantLocator.ice +13 -10
- data/slice/Ice/ServantLocatorF.ice +7 -4
- data/slice/Ice/SliceChecksumDict.ice +7 -4
- data/slice/Ice/ValueFactory.ice +127 -0
- data/slice/Ice/Version.ice +9 -5
- data/slice/IceBT/ConnectionInfo.ice +53 -0
- data/slice/IceBT/EndpointInfo.ice +51 -0
- data/slice/IceBT/Types.ice +39 -0
- data/slice/IceBox/IceBox.ice +20 -21
- data/slice/IceDiscovery/IceDiscovery.ice +9 -5
- data/slice/IceGrid/Admin.ice +390 -30
- data/slice/IceGrid/Descriptor.ice +37 -29
- data/slice/IceGrid/Exception.ice +33 -27
- data/slice/IceGrid/FileParser.ice +9 -6
- data/slice/IceGrid/PluginFacade.ice +11 -9
- data/slice/IceGrid/Registry.ice +139 -16
- data/slice/IceGrid/Session.ice +10 -8
- data/slice/IceGrid/UserAccountMapper.ice +9 -6
- data/slice/IceIAP/ConnectionInfo.ice +70 -0
- data/slice/IceIAP/EndpointInfo.ice +64 -0
- data/slice/IceLocatorDiscovery/IceLocatorDiscovery.ice +9 -7
- data/slice/IcePatch2/FileInfo.ice +9 -8
- data/slice/IcePatch2/FileServer.ice +17 -13
- data/slice/IceSSL/ConnectionInfo.ice +14 -17
- data/slice/IceSSL/ConnectionInfoF.ice +24 -0
- data/slice/IceSSL/EndpointInfo.ice +9 -30
- data/slice/IceStorm/IceStorm.ice +22 -18
- data/slice/IceStorm/Metrics.ice +9 -5
- metadata +154 -120
- data/ext/ObjectFactory.cpp +0 -140
- data/ext/ObjectFactory.h +0 -50
- data/ext/ice/cpp/include/Ice/BasicStream.h +0 -1335
- data/ext/ice/cpp/include/Ice/Communicator.h +0 -200
- data/ext/ice/cpp/include/Ice/Connection.h +0 -497
- data/ext/ice/cpp/include/Ice/DeprecatedStringConverter.h +0 -62
- data/ext/ice/cpp/include/Ice/Endpoint.h +0 -341
- data/ext/ice/cpp/include/Ice/Identity.h +0 -168
- data/ext/ice/cpp/include/Ice/Instrumentation.h +0 -365
- data/ext/ice/cpp/include/Ice/LocalException.h +0 -1030
- data/ext/ice/cpp/include/Ice/Locator.h +0 -2193
- data/ext/ice/cpp/include/Ice/Metrics.h +0 -2974
- data/ext/ice/cpp/include/Ice/ObjectAdapter.h +0 -168
- data/ext/ice/cpp/include/Ice/ObjectFactory.h +0 -92
- data/ext/ice/cpp/include/Ice/ObjectFactoryF.h +0 -66
- data/ext/ice/cpp/include/Ice/Outgoing.h +0 -225
- data/ext/ice/cpp/include/Ice/Plugin.h +0 -125
- data/ext/ice/cpp/include/Ice/Process.h +0 -574
- data/ext/ice/cpp/include/Ice/PropertiesAdmin.h +0 -830
- data/ext/ice/cpp/include/Ice/RemoteLogger.h +0 -1500
- data/ext/ice/cpp/include/Ice/Router.h +0 -1159
- data/ext/ice/cpp/include/Ice/Stream.h +0 -447
- data/ext/ice/cpp/include/Ice/StreamF.h +0 -30
- data/ext/ice/cpp/include/Ice/Version.h +0 -262
- data/ext/ice/cpp/include/IceSSL/ConnectionInfo.h +0 -158
- data/ext/ice/cpp/include/IceSSL/EndpointInfo.h +0 -142
- data/ext/ice/cpp/include/IceUtil/AbstractMutex.h +0 -119
- data/ext/ice/cpp/include/IceUtil/Cache.h +0 -362
- data/ext/ice/cpp/include/Slice/CPlusPlusUtil.h +0 -65
- data/ext/ice/cpp/include/Slice/CsUtil.h +0 -92
- data/ext/ice/cpp/include/Slice/DotNetNames.h +0 -34
- data/ext/ice/cpp/include/Slice/ObjCUtil.h +0 -127
- data/ext/ice/cpp/include/Slice/Util.h +0 -56
- data/ext/ice/cpp/src/Ice/BasicStream.cpp +0 -3428
- data/ext/ice/cpp/src/Ice/DeprecatedStringConverter.cpp +0 -62
- data/ext/ice/cpp/src/Ice/ObjectFactoryManager.cpp +0 -139
- data/ext/ice/cpp/src/Ice/ObjectFactoryManager.h +0 -43
- data/ext/ice/cpp/src/Ice/Outgoing.cpp +0 -694
- data/ext/ice/cpp/src/Ice/Stream.cpp +0 -53
- data/ext/ice/cpp/src/Ice/StreamI.cpp +0 -832
- data/ext/ice/cpp/src/Ice/StreamI.h +0 -198
- data/ext/ice/cpp/src/IceSSL/Certificate.cpp +0 -1336
- data/ext/ice/cpp/src/IceUtil/Exception.cpp +0 -792
- data/ext/ice/cpp/src/IceUtil/FileUtil.h +0 -185
- data/ext/ice/cpp/src/Slice/CsUtil.cpp +0 -2660
- data/ext/ice/cpp/src/Slice/DotNetNames.cpp +0 -146
- data/ext/ice/cpp/src/Slice/ObjCUtil.cpp +0 -1310
- data/lib/IceGrid/Locator.rb +0 -106
- data/lib/IceGrid/Observer.rb +0 -572
- data/lib/IceGrid/Query.rb +0 -169
- data/slice/Freeze/BackgroundSaveEvictor.ice +0 -111
- data/slice/Freeze/CatalogData.ice +0 -49
- data/slice/Freeze/Connection.ice +0 -121
- data/slice/Freeze/DB.ice +0 -37
- data/slice/Freeze/Evictor.ice +0 -346
- data/slice/Freeze/EvictorF.ice +0 -22
- data/slice/Freeze/EvictorStorage.ice +0 -72
- data/slice/Freeze/Exception.ice +0 -100
- data/slice/Freeze/Transaction.ice +0 -58
- data/slice/Freeze/TransactionalEvictor.ice +0 -50
- data/slice/IceGrid/Locator.ice +0 -57
- data/slice/IceGrid/Observer.ice +0 -395
- data/slice/IceGrid/Query.ice +0 -131
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// **********************************************************************
|
|
2
2
|
//
|
|
3
|
-
// Copyright (c) 2003-
|
|
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-
|
|
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-
|
|
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::
|
|
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::
|
|
30
|
+
IceUtilInternal::APIException::ice_id() const
|
|
31
31
|
{
|
|
32
|
-
return
|
|
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::
|
|
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::
|
|
72
|
+
IceUtilInternal::BadOptException::ice_id() const
|
|
77
73
|
{
|
|
78
|
-
return
|
|
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 +=
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
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-
|
|
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-
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
38
|
-
{
|
|
39
|
-
delete processStringConverterMutex;
|
|
40
|
-
processStringConverterMutex = 0;
|
|
41
|
-
}
|
|
42
|
-
};
|
|
37
|
+
#ifdef ICE_HAS_CODECVT_UTF8
|
|
43
38
|
|
|
44
|
-
|
|
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
|
-
|
|
48
|
+
template<>
|
|
49
|
+
struct SelectCodeCvt<4>
|
|
49
50
|
{
|
|
51
|
+
typedef std::codecvt_utf8<wchar_t> Type;
|
|
52
|
+
};
|
|
50
53
|
|
|
51
|
-
class
|
|
54
|
+
class UnicodeWstringConverter : public WstringConverter
|
|
52
55
|
{
|
|
53
56
|
public:
|
|
54
57
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
67
|
+
virtual Byte* toUTF8(const wchar_t* sourceStart, const wchar_t* sourceEnd, UTF8Buffer& buffer) const
|
|
62
68
|
{
|
|
63
|
-
|
|
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*
|
|
151
|
+
virtual void fromUTF8(const Byte* sourceStart, const Byte* sourceEnd, wstring& target) const
|
|
67
152
|
{
|
|
68
|
-
|
|
153
|
+
const size_t sourceSize = sourceEnd - sourceStart;
|
|
154
|
+
|
|
155
|
+
if(sourceSize == 0)
|
|
69
156
|
{
|
|
70
|
-
|
|
157
|
+
target = L"";
|
|
71
158
|
}
|
|
72
159
|
else
|
|
73
160
|
{
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
-
|
|
87
|
-
{
|
|
88
|
-
return _buffer;
|
|
89
|
-
}
|
|
166
|
+
const char* sourceNext = reinterpret_cast<const char*>(sourceStart);
|
|
90
167
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
-
|
|
101
|
-
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
{
|
|
111
|
-
}
|
|
204
|
+
Byte* targetStart = 0;
|
|
205
|
+
Byte* targetEnd = 0;
|
|
112
206
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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
|
-
|
|
125
|
-
|
|
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
|
-
|
|
218
|
+
targetStart = buffer.getMoreBytes(chunkSize, targetStart);
|
|
219
|
+
targetEnd = targetStart + chunkSize;
|
|
220
|
+
}
|
|
221
|
+
while(convertUTFWstringToUTF8(sourceStart, sourceEnd, targetStart, targetEnd) == false);
|
|
128
222
|
|
|
129
|
-
|
|
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
|
-
|
|
225
|
+
|
|
226
|
+
virtual void fromUTF8(const Byte* sourceStart, const Byte* sourceEnd, wstring& target) const
|
|
139
227
|
{
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
-
|
|
149
|
-
throw IceUtil::IllegalConversionException(__FILE__, __LINE__);
|
|
234
|
+
convertUTF8ToUTFWstring(sourceStart, sourceEnd, target);
|
|
150
235
|
}
|
|
151
236
|
}
|
|
152
|
-
|
|
153
|
-
}
|
|
237
|
+
};
|
|
154
238
|
|
|
239
|
+
#endif
|
|
155
240
|
|
|
156
|
-
|
|
157
|
-
UnicodeWstringConverter::fromUTF8(const Byte* sourceStart, const Byte* sourceEnd,
|
|
158
|
-
wstring& target) const
|
|
241
|
+
class Init
|
|
159
242
|
{
|
|
160
|
-
|
|
243
|
+
public:
|
|
244
|
+
|
|
245
|
+
Init()
|
|
161
246
|
{
|
|
162
|
-
|
|
163
|
-
|
|
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
|
-
|
|
167
|
-
convertUTF8ToUTFWstring(sourceStart, sourceEnd, target, _conversionFlags);
|
|
168
|
-
|
|
169
|
-
switch(result)
|
|
253
|
+
~Init()
|
|
170
254
|
{
|
|
171
|
-
|
|
172
|
-
|
|
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
|
-
|
|
186
|
-
|
|
187
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
}
|
|
286
|
+
if(_buffer.size() < howMany + bytesUsed)
|
|
287
|
+
{
|
|
288
|
+
_buffer.resize(bytesUsed + howMany);
|
|
289
|
+
}
|
|
237
290
|
|
|
238
|
-
|
|
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
|
-
|
|
294
|
+
void swap(string& other, const Byte* tail)
|
|
249
295
|
{
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
302
|
-
|
|
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
|
-
|
|
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
|
-
|
|
316
|
-
|
|
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
|
|
362
|
+
// First convert to UTF-8 narrow string.
|
|
328
363
|
//
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
408
|
+
// Convert from UTF-8 to the wide string encoding
|
|
402
409
|
//
|
|
403
|
-
|
|
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
|
-
|
|
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
|