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.
@@ -17,9 +17,14 @@ namespace Ice
17
17
  {
18
18
 
19
19
  class Object;
20
+ #ifdef ICE_CPP11_MAPPING
21
+ using ObjectPtr = ::std::shared_ptr<Object>;
22
+ #else
20
23
  ICE_API Object* upCast(Object*);
21
- typedef IceInternal::Handle< Object > ObjectPtr;
22
- ICE_API void __patch(ObjectPtr&, const ObjectPtr&);
24
+ typedef IceInternal::Handle<Object> ObjectPtr;
25
+ typedef ObjectPtr ValuePtr;
26
+ ICE_API void _icePatchObjectPtr(ObjectPtr&, const ObjectPtr&);
27
+ #endif
23
28
 
24
29
  }
25
30
 
@@ -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.
@@ -21,7 +21,11 @@ template<typename T = Ice::Instrumentation::Observer> class ObserverHelperT
21
21
  {
22
22
  public:
23
23
 
24
+ #ifdef ICE_CPP11_MAPPING
25
+ using TPtr = ::std::shared_ptr<T>;
26
+ #else
24
27
  typedef IceInternal::Handle<T> TPtr;
28
+ #endif
25
29
 
26
30
  ObserverHelperT()
27
31
  {
@@ -37,7 +41,7 @@ public:
37
41
 
38
42
  operator bool() const
39
43
  {
40
- return _observer;
44
+ return _observer != ICE_NULLPTR;
41
45
  }
42
46
 
43
47
  T* operator->() const
@@ -63,11 +67,17 @@ public:
63
67
  }
64
68
  }
65
69
 
70
+ #ifdef ICE_CPP11_MAPPING
71
+ TPtr get() const
72
+ {
73
+ return _observer;
74
+ }
75
+ #else
66
76
  T* get() const
67
77
  {
68
78
  return _observer.get();
69
79
  }
70
-
80
+ #endif
71
81
  void adopt(ObserverHelperT& other)
72
82
  {
73
83
  _observer = other._observer;
@@ -99,7 +109,7 @@ protected:
99
109
  class ICE_API DispatchObserver : public ObserverHelperT<Ice::Instrumentation::DispatchObserver>
100
110
  {
101
111
  public:
102
-
112
+
103
113
  void userException()
104
114
  {
105
115
  if(_observer)
@@ -121,13 +131,13 @@ class ICE_API InvocationObserver : public ObserverHelperT<Ice::Instrumentation::
121
131
  {
122
132
  public:
123
133
 
124
- InvocationObserver(IceProxy::Ice::Object*, const std::string&, const Ice::Context*);
134
+ InvocationObserver(const Ice::ObjectPrxPtr&, const std::string&, const Ice::Context&);
125
135
  InvocationObserver(Instance*, const std::string&);
126
136
  InvocationObserver()
127
137
  {
128
138
  }
129
139
 
130
- void attach(IceProxy::Ice::Object*, const std::string&, const Ice::Context*);
140
+ void attach(const Ice::ObjectPrxPtr&, const std::string&, const Ice::Context&);
131
141
  void attach(Instance*, const std::string&);
132
142
 
133
143
  void retried()
@@ -145,7 +155,7 @@ public:
145
155
  {
146
156
  return _observer->getRemoteObserver(con, endpt, requestId, size);
147
157
  }
148
- return 0;
158
+ return ICE_NULLPTR;
149
159
  }
150
160
 
151
161
  ::Ice::Instrumentation::ChildInvocationObserverPtr
@@ -155,7 +165,7 @@ public:
155
165
  {
156
166
  return _observer->getCollocatedObserver(adapter, requestId, size);
157
167
  }
158
- return 0;
168
+ return ICE_NULLPTR;
159
169
  }
160
170
 
161
171
  void
@@ -0,0 +1,1084 @@
1
+ // **********************************************************************
2
+ //
3
+ // Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
4
+ //
5
+ // This copy of Ice is licensed to you under the terms described in the
6
+ // ICE_LICENSE file included in this distribution.
7
+ //
8
+ // **********************************************************************
9
+
10
+ //
11
+ // Ice::optional is a placeholder for std::optional:
12
+ // http://en.cppreference.com/w/cpp/utility/optional/optional
13
+ //
14
+ // This implementation is a slighly modified version of Optional.hpp,
15
+ // published at https://github.com/akrzemi1/Optional
16
+ // commit 25713110f55813b2c5619ec1230edf8d3b00bdde
17
+
18
+ // Copyright (C) 2011-2016 Andrzej Krzemienski
19
+ //
20
+ // Distributed under the Boost Software License, Version 1.0
21
+ // (see accompanying file LICENSE_1_0.txt or a copy at
22
+ // http://www.boost.org/LICENSE_1_0.txt)
23
+ //
24
+ // The idea and interface is based on Boost.Optional library
25
+ // authored by Fernando Luis Cacciola Carballal
26
+
27
+ #ifndef ICE_OPTIONAL_H
28
+ #define ICE_OPTIONAL_H
29
+
30
+ #ifdef ICE_CPP11_MAPPING
31
+
32
+ # include <utility>
33
+ # include <type_traits>
34
+ # include <initializer_list>
35
+ # include <cassert>
36
+ # include <functional>
37
+ # include <string>
38
+ # include <stdexcept>
39
+
40
+ # define TR2_OPTIONAL_REQUIRES(...) typename enable_if<__VA_ARGS__::value, bool>::type = false
41
+
42
+ # if defined __GNUC__ // NOTE: GNUC is also defined for Clang
43
+ # if (__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)
44
+ # define TR2_OPTIONAL_GCC_4_8_AND_HIGHER___
45
+ # elif (__GNUC__ > 4)
46
+ # define TR2_OPTIONAL_GCC_4_8_AND_HIGHER___
47
+ # endif
48
+ #
49
+ # if (__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)
50
+ # define TR2_OPTIONAL_GCC_4_7_AND_HIGHER___
51
+ # elif (__GNUC__ > 4)
52
+ # define TR2_OPTIONAL_GCC_4_7_AND_HIGHER___
53
+ # endif
54
+ #
55
+ # if (__GNUC__ == 4) && (__GNUC_MINOR__ == 8) && (__GNUC_PATCHLEVEL__ >= 1)
56
+ # define TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___
57
+ # elif (__GNUC__ == 4) && (__GNUC_MINOR__ >= 9)
58
+ # define TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___
59
+ # elif (__GNUC__ > 4)
60
+ # define TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___
61
+ # endif
62
+ # endif
63
+ #
64
+ # if defined __clang_major__
65
+ # if (__clang_major__ == 3 && __clang_minor__ >= 5)
66
+ # define TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_
67
+ # elif (__clang_major__ > 3)
68
+ # define TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_
69
+ # endif
70
+ # if defined TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_
71
+ # define TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_
72
+ # elif (__clang_major__ == 3 && __clang_minor__ == 4 && __clang_patchlevel__ >= 2)
73
+ # define TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_
74
+ # endif
75
+ # endif
76
+ #
77
+ # if defined _MSC_VER
78
+ # if (_MSC_VER >= 1900)
79
+ # define TR2_OPTIONAL_MSVC_2015_AND_HIGHER___
80
+ # endif
81
+ # endif
82
+
83
+ # if defined __clang__
84
+ # if (__clang_major__ > 2) || (__clang_major__ == 2) && (__clang_minor__ >= 9)
85
+ # define OPTIONAL_HAS_THIS_RVALUE_REFS 1
86
+ # else
87
+ # define OPTIONAL_HAS_THIS_RVALUE_REFS 0
88
+ # endif
89
+ # elif defined TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___
90
+ # define OPTIONAL_HAS_THIS_RVALUE_REFS 1
91
+ # elif defined TR2_OPTIONAL_MSVC_2015_AND_HIGHER___
92
+ # define OPTIONAL_HAS_THIS_RVALUE_REFS 1
93
+ # else
94
+ # define OPTIONAL_HAS_THIS_RVALUE_REFS 0
95
+ # endif
96
+
97
+ # if defined TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___
98
+ # define OPTIONAL_HAS_CONSTEXPR_INIT_LIST 1
99
+ # define OPTIONAL_CONSTEXPR_INIT_LIST constexpr
100
+ # else
101
+ # define OPTIONAL_HAS_CONSTEXPR_INIT_LIST 0
102
+ # define OPTIONAL_CONSTEXPR_INIT_LIST
103
+ # endif
104
+
105
+ # if defined TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_ && (defined __cplusplus) && (__cplusplus != 201103L)
106
+ # define OPTIONAL_HAS_MOVE_ACCESSORS 1
107
+ # else
108
+ # define OPTIONAL_HAS_MOVE_ACCESSORS 0
109
+ # endif
110
+
111
+ # // In C++11 constexpr implies const, so we need to make non-const members also non-constexpr
112
+ # if (defined __cplusplus) && (__cplusplus == 201103L)
113
+ # define OPTIONAL_MUTABLE_CONSTEXPR
114
+ # else
115
+ # define OPTIONAL_MUTABLE_CONSTEXPR constexpr
116
+ # endif
117
+
118
+ namespace std{
119
+
120
+ namespace experimental{
121
+
122
+ //
123
+ // Add namespace Ice to avoid conflict with other std::experimental::optional
124
+ // implementation
125
+ //
126
+ namespace Ice{
127
+
128
+ // BEGIN workaround for missing is_trivially_destructible
129
+ # if defined TR2_OPTIONAL_GCC_4_8_AND_HIGHER___
130
+ // leave it: it is already there
131
+ # elif defined TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_
132
+ // leave it: it is already there
133
+ # elif defined TR2_OPTIONAL_MSVC_2015_AND_HIGHER___
134
+ // leave it: it is already there
135
+ # elif defined TR2_OPTIONAL_DISABLE_EMULATION_OF_TYPE_TRAITS
136
+ // leave it: the user doesn't want it
137
+ # else
138
+ template <typename T>
139
+ using is_trivially_destructible = std::has_trivial_destructor<T>;
140
+ # endif
141
+ // END workaround for missing is_trivially_destructible
142
+
143
+ # if (defined TR2_OPTIONAL_GCC_4_7_AND_HIGHER___)
144
+ // leave it; our metafunctions are already defined.
145
+ # elif defined TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_
146
+ // leave it; our metafunctions are already defined.
147
+ # elif defined TR2_OPTIONAL_MSVC_2015_AND_HIGHER___
148
+ // leave it: it is already there
149
+ # elif defined TR2_OPTIONAL_DISABLE_EMULATION_OF_TYPE_TRAITS
150
+ // leave it: the user doesn't want it
151
+ # else
152
+
153
+ // workaround for missing traits in GCC and CLANG
154
+ template <class T>
155
+ struct is_nothrow_move_constructible
156
+ {
157
+ constexpr static bool value = std::is_nothrow_constructible<T, T&&>::value;
158
+ };
159
+
160
+ template <class T, class U>
161
+ struct is_assignable
162
+ {
163
+ template <class X, class Y>
164
+ constexpr static bool has_assign(...) { return false; }
165
+
166
+ template <class X, class Y, size_t S = sizeof((std::declval<X>() = std::declval<Y>(), true)) >
167
+ // the comma operator is necessary for the cases where operator= returns void
168
+ constexpr static bool has_assign(bool) { return true; }
169
+
170
+ constexpr static bool value = has_assign<T, U>(true);
171
+ };
172
+
173
+ template <class T>
174
+ struct is_nothrow_move_assignable
175
+ {
176
+ template <class X, bool has_any_move_assign>
177
+ struct has_nothrow_move_assign {
178
+ constexpr static bool value = false;
179
+ };
180
+
181
+ template <class X>
182
+ struct has_nothrow_move_assign<X, true> {
183
+ constexpr static bool value = noexcept( std::declval<X&>() = std::declval<X&&>() );
184
+ };
185
+
186
+ constexpr static bool value = has_nothrow_move_assign<T, is_assignable<T&, T&&>::value>::value;
187
+ };
188
+ // end workaround
189
+
190
+ # endif
191
+
192
+ // 20.5.4, optional for object types
193
+ template <class T> class optional;
194
+
195
+ // 20.5.5, optional for lvalue reference types
196
+ template <class T> class optional<T&>;
197
+
198
+ // workaround: std utility functions aren't constexpr yet
199
+ template <class T> inline constexpr T&& constexpr_forward(typename std::remove_reference<T>::type& t) noexcept
200
+ {
201
+ return static_cast<T&&>(t);
202
+ }
203
+
204
+ template <class T> inline constexpr T&& constexpr_forward(typename std::remove_reference<T>::type&& t) noexcept
205
+ {
206
+ static_assert(!std::is_lvalue_reference<T>::value, "!!");
207
+ return static_cast<T&&>(t);
208
+ }
209
+
210
+ template <class T> inline constexpr typename std::remove_reference<T>::type&& constexpr_move(T&& t) noexcept
211
+ {
212
+ return static_cast<typename std::remove_reference<T>::type&&>(t);
213
+ }
214
+
215
+ #if defined NDEBUG
216
+ # define TR2_OPTIONAL_ASSERTED_EXPRESSION(CHECK, EXPR) (EXPR)
217
+ #else
218
+ # define TR2_OPTIONAL_ASSERTED_EXPRESSION(CHECK, EXPR) ((CHECK) ? (EXPR) : ([]{assert(!#CHECK);}(), (EXPR)))
219
+ #endif
220
+
221
+ namespace detail_
222
+ {
223
+
224
+ // static_addressof: a constexpr version of addressof
225
+ template <typename T>
226
+ struct has_overloaded_addressof
227
+ {
228
+ template <class X>
229
+ constexpr static bool has_overload(...) { return false; }
230
+
231
+ template <class X, size_t S = sizeof(std::declval<X&>().operator&()) >
232
+ constexpr static bool has_overload(bool) { return true; }
233
+
234
+ constexpr static bool value = has_overload<T>(true);
235
+ };
236
+
237
+ template <typename T, TR2_OPTIONAL_REQUIRES(!has_overloaded_addressof<T>)>
238
+ constexpr T* static_addressof(T& ref)
239
+ {
240
+ return &ref;
241
+ }
242
+
243
+ template <typename T, TR2_OPTIONAL_REQUIRES(has_overloaded_addressof<T>)>
244
+ T* static_addressof(T& ref)
245
+ {
246
+ return std::addressof(ref);
247
+ }
248
+
249
+ // the call to convert<A>(b) has return type A and converts b to type A iff b decltype(b) is implicitly convertible to A
250
+ template <class U>
251
+ constexpr U convert(U v) { return v; }
252
+
253
+ } // namespace detail
254
+
255
+ constexpr struct trivial_init_t{} trivial_init{};
256
+
257
+ // 20.5.6, In-place construction
258
+ constexpr struct in_place_t{} in_place{};
259
+
260
+ // 20.5.7, Disengaged state indicator
261
+ struct nullopt_t
262
+ {
263
+ struct init{};
264
+ constexpr explicit nullopt_t(init){}
265
+ };
266
+ constexpr nullopt_t nullopt{nullopt_t::init()};
267
+
268
+ // 20.5.8, class bad_optional_access
269
+ class bad_optional_access : public logic_error {
270
+ public:
271
+ explicit bad_optional_access(const string& what_arg) : logic_error{what_arg} {}
272
+ explicit bad_optional_access(const char* what_arg) : logic_error{what_arg} {}
273
+ };
274
+
275
+ template <class T>
276
+ union storage_t
277
+ {
278
+ unsigned char dummy_;
279
+ T value_;
280
+
281
+ constexpr storage_t( trivial_init_t ) noexcept : dummy_() {}
282
+
283
+ template <class... Args>
284
+ constexpr storage_t( Args&&... args ) : value_(constexpr_forward<Args>(args)...) {}
285
+
286
+ ~storage_t(){}
287
+ };
288
+
289
+ template <class T>
290
+ union constexpr_storage_t
291
+ {
292
+ unsigned char dummy_;
293
+ T value_;
294
+
295
+ constexpr constexpr_storage_t( trivial_init_t ) noexcept : dummy_() {}
296
+
297
+ template <class... Args>
298
+ constexpr constexpr_storage_t( Args&&... args ) : value_(constexpr_forward<Args>(args)...) {}
299
+
300
+ ~constexpr_storage_t() = default;
301
+ };
302
+
303
+ template <class T>
304
+ struct optional_base
305
+ {
306
+ bool init_;
307
+ storage_t<T> storage_;
308
+
309
+ constexpr optional_base() noexcept : init_(false), storage_(trivial_init) {}
310
+
311
+ explicit constexpr optional_base(const T& v) : init_(true), storage_(v) {}
312
+
313
+ explicit constexpr optional_base(T&& v) : init_(true), storage_(constexpr_move(v)) {}
314
+
315
+ template <class... Args> explicit optional_base(in_place_t, Args&&... args)
316
+ : init_(true), storage_(constexpr_forward<Args>(args)...) {}
317
+
318
+ template <class U, class... Args, TR2_OPTIONAL_REQUIRES(is_constructible<T, std::initializer_list<U>>)>
319
+ explicit optional_base(in_place_t, std::initializer_list<U> il, Args&&... args)
320
+ : init_(true), storage_(il, std::forward<Args>(args)...) {}
321
+
322
+ ~optional_base() { if (init_) storage_.value_.T::~T(); }
323
+ };
324
+
325
+ template <class T>
326
+ struct constexpr_optional_base
327
+ {
328
+ bool init_;
329
+ constexpr_storage_t<T> storage_;
330
+
331
+ constexpr constexpr_optional_base() noexcept : init_(false), storage_(trivial_init) {}
332
+
333
+ explicit constexpr constexpr_optional_base(const T& v) : init_(true), storage_(v) {}
334
+
335
+ explicit constexpr constexpr_optional_base(T&& v) : init_(true), storage_(constexpr_move(v)) {}
336
+
337
+ template <class... Args> explicit constexpr constexpr_optional_base(in_place_t, Args&&... args)
338
+ : init_(true), storage_(constexpr_forward<Args>(args)...) {}
339
+
340
+ template <class U, class... Args, TR2_OPTIONAL_REQUIRES(is_constructible<T, std::initializer_list<U>>)>
341
+ OPTIONAL_CONSTEXPR_INIT_LIST explicit constexpr_optional_base(in_place_t, std::initializer_list<U> il, Args&&... args)
342
+ : init_(true), storage_(il, std::forward<Args>(args)...) {}
343
+
344
+ ~constexpr_optional_base() = default;
345
+ };
346
+
347
+ template <class T>
348
+ using OptionalBase = typename std::conditional<
349
+ is_trivially_destructible<T>::value, // if possible
350
+ constexpr_optional_base<typename std::remove_const<T>::type>, // use base with trivial destructor
351
+ optional_base<typename std::remove_const<T>::type>
352
+ >::type;
353
+
354
+ template <class T>
355
+ class optional : private OptionalBase<T>
356
+ {
357
+ static_assert( !std::is_same<typename std::decay<T>::type, nullopt_t>::value, "bad T" );
358
+ static_assert( !std::is_same<typename std::decay<T>::type, in_place_t>::value, "bad T" );
359
+
360
+ constexpr bool initialized() const noexcept { return OptionalBase<T>::init_; }
361
+ typename std::remove_const<T>::type* dataptr() { return std::addressof(OptionalBase<T>::storage_.value_); }
362
+ constexpr const T* dataptr() const { return detail_::static_addressof(OptionalBase<T>::storage_.value_); }
363
+
364
+ # if OPTIONAL_HAS_THIS_RVALUE_REFS == 1
365
+ constexpr const T& contained_val() const& { return OptionalBase<T>::storage_.value_; }
366
+ # if OPTIONAL_HAS_MOVE_ACCESSORS == 1
367
+ OPTIONAL_MUTABLE_CONSTEXPR T&& contained_val() && { return std::move(OptionalBase<T>::storage_.value_); }
368
+ OPTIONAL_MUTABLE_CONSTEXPR T& contained_val() & { return OptionalBase<T>::storage_.value_; }
369
+ # else
370
+ T& contained_val() & { return OptionalBase<T>::storage_.value_; }
371
+ T&& contained_val() && { return std::move(OptionalBase<T>::storage_.value_); }
372
+ # endif
373
+ # else
374
+ constexpr const T& contained_val() const { return OptionalBase<T>::storage_.value_; }
375
+ T& contained_val() { return OptionalBase<T>::storage_.value_; }
376
+ # endif
377
+
378
+ void clear() noexcept {
379
+ if (initialized()) dataptr()->T::~T();
380
+ OptionalBase<T>::init_ = false;
381
+ }
382
+
383
+ template <class... Args>
384
+ void initialize(Args&&... args) noexcept(noexcept(T(std::forward<Args>(args)...)))
385
+ {
386
+ assert(!OptionalBase<T>::init_);
387
+ ::new (static_cast<void*>(dataptr())) T(std::forward<Args>(args)...);
388
+ OptionalBase<T>::init_ = true;
389
+ }
390
+
391
+ template <class U, class... Args>
392
+ void initialize(std::initializer_list<U> il, Args&&... args) noexcept(noexcept(T(il, std::forward<Args>(args)...)))
393
+ {
394
+ assert(!OptionalBase<T>::init_);
395
+ ::new (static_cast<void*>(dataptr())) T(il, std::forward<Args>(args)...);
396
+ OptionalBase<T>::init_ = true;
397
+ }
398
+
399
+ public:
400
+ typedef T value_type;
401
+
402
+ // 20.5.5.1, constructors
403
+ constexpr optional() noexcept : OptionalBase<T>() {}
404
+ constexpr optional(nullopt_t) noexcept : OptionalBase<T>() {}
405
+
406
+ optional(const optional& rhs)
407
+ : OptionalBase<T>()
408
+ {
409
+ if (rhs.initialized()) {
410
+ ::new (static_cast<void*>(dataptr())) T(*rhs);
411
+ OptionalBase<T>::init_ = true;
412
+ }
413
+ }
414
+
415
+ optional(optional&& rhs) noexcept(is_nothrow_move_constructible<T>::value)
416
+ : OptionalBase<T>()
417
+ {
418
+ if (rhs.initialized()) {
419
+ ::new (static_cast<void*>(dataptr())) T(std::move(*rhs));
420
+ OptionalBase<T>::init_ = true;
421
+ }
422
+ }
423
+
424
+ constexpr optional(const T& v) : OptionalBase<T>(v) {}
425
+
426
+ constexpr optional(T&& v) : OptionalBase<T>(constexpr_move(v)) {}
427
+
428
+ template <class... Args>
429
+ explicit constexpr optional(in_place_t, Args&&... args)
430
+ : OptionalBase<T>(in_place_t{}, constexpr_forward<Args>(args)...) {}
431
+
432
+ template <class U, class... Args, TR2_OPTIONAL_REQUIRES(is_constructible<T, std::initializer_list<U>>)>
433
+ OPTIONAL_CONSTEXPR_INIT_LIST explicit optional(in_place_t, std::initializer_list<U> il, Args&&... args)
434
+ : OptionalBase<T>(in_place_t{}, il, constexpr_forward<Args>(args)...) {}
435
+
436
+ // 20.5.4.2, Destructor
437
+ ~optional() = default;
438
+
439
+ // 20.5.4.3, assignment
440
+ optional& operator=(nullopt_t) noexcept
441
+ {
442
+ clear();
443
+ return *this;
444
+ }
445
+
446
+ optional& operator=(const optional& rhs)
447
+ {
448
+ if (initialized() == true && rhs.initialized() == false) clear();
449
+ else if (initialized() == false && rhs.initialized() == true) initialize(*rhs);
450
+ else if (initialized() == true && rhs.initialized() == true) contained_val() = *rhs;
451
+ return *this;
452
+ }
453
+
454
+ optional& operator=(optional&& rhs)
455
+ noexcept(is_nothrow_move_assignable<T>::value && is_nothrow_move_constructible<T>::value)
456
+ {
457
+ if (initialized() == true && rhs.initialized() == false) clear();
458
+ else if (initialized() == false && rhs.initialized() == true) initialize(std::move(*rhs));
459
+ else if (initialized() == true && rhs.initialized() == true) contained_val() = std::move(*rhs);
460
+ return *this;
461
+ }
462
+
463
+ template <class U>
464
+ auto operator=(U&& v)
465
+ -> typename enable_if
466
+ <
467
+ is_same<typename decay<U>::type, T>::value,
468
+ optional&
469
+ >::type
470
+ {
471
+ if (initialized()) { contained_val() = std::forward<U>(v); }
472
+ else { initialize(std::forward<U>(v)); }
473
+ return *this;
474
+ }
475
+
476
+ template <class... Args>
477
+ void emplace(Args&&... args)
478
+ {
479
+ clear();
480
+ initialize(std::forward<Args>(args)...);
481
+ }
482
+
483
+ template <class U, class... Args>
484
+ void emplace(initializer_list<U> il, Args&&... args)
485
+ {
486
+ clear();
487
+ initialize<U, Args...>(il, std::forward<Args>(args)...);
488
+ }
489
+
490
+ // 20.5.4.4, Swap
491
+ void swap(optional<T>& rhs) noexcept(is_nothrow_move_constructible<T>::value && noexcept(swap(declval<T&>(), declval<T&>())))
492
+ {
493
+ if (initialized() == true && rhs.initialized() == false) { rhs.initialize(std::move(**this)); clear(); }
494
+ else if (initialized() == false && rhs.initialized() == true) { initialize(std::move(*rhs)); rhs.clear(); }
495
+ else if (initialized() == true && rhs.initialized() == true) { using std::swap; swap(**this, *rhs); }
496
+ }
497
+
498
+ // 20.5.4.5, Observers
499
+
500
+ explicit constexpr operator bool() const noexcept { return initialized(); }
501
+ constexpr bool has_value() const noexcept { return initialized(); }
502
+
503
+ constexpr T const* operator ->() const {
504
+ return TR2_OPTIONAL_ASSERTED_EXPRESSION(initialized(), dataptr());
505
+ }
506
+
507
+ # if OPTIONAL_HAS_MOVE_ACCESSORS == 1
508
+
509
+ OPTIONAL_MUTABLE_CONSTEXPR T* operator ->() {
510
+ assert (initialized());
511
+ return dataptr();
512
+ }
513
+
514
+ constexpr T const& operator *() const& {
515
+ return TR2_OPTIONAL_ASSERTED_EXPRESSION(initialized(), contained_val());
516
+ }
517
+
518
+ OPTIONAL_MUTABLE_CONSTEXPR T& operator *() & {
519
+ assert (initialized());
520
+ return contained_val();
521
+ }
522
+
523
+ OPTIONAL_MUTABLE_CONSTEXPR T&& operator *() && {
524
+ assert (initialized());
525
+ return constexpr_move(contained_val());
526
+ }
527
+
528
+ constexpr T const& value() const& {
529
+ return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val());
530
+ }
531
+
532
+ OPTIONAL_MUTABLE_CONSTEXPR T& value() & {
533
+ return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val());
534
+ }
535
+
536
+ OPTIONAL_MUTABLE_CONSTEXPR T&& value() && {
537
+ if (!initialized()) throw bad_optional_access("bad optional access");
538
+ return std::move(contained_val());
539
+ }
540
+
541
+ # else
542
+
543
+ T* operator ->() {
544
+ assert (initialized());
545
+ return dataptr();
546
+ }
547
+
548
+ constexpr T const& operator *() const {
549
+ return TR2_OPTIONAL_ASSERTED_EXPRESSION(initialized(), contained_val());
550
+ }
551
+
552
+ T& operator *() {
553
+ assert (initialized());
554
+ return contained_val();
555
+ }
556
+
557
+ constexpr T const& value() const {
558
+ return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val());
559
+ }
560
+
561
+ T& value() {
562
+ return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val());
563
+ }
564
+
565
+ # endif
566
+
567
+ # if OPTIONAL_HAS_THIS_RVALUE_REFS == 1
568
+
569
+ template <class V>
570
+ constexpr T value_or(V&& v) const&
571
+ {
572
+ return *this ? **this : detail_::convert<T>(constexpr_forward<V>(v));
573
+ }
574
+
575
+ # if OPTIONAL_HAS_MOVE_ACCESSORS == 1
576
+
577
+ template <class V>
578
+ OPTIONAL_MUTABLE_CONSTEXPR T value_or(V&& v) &&
579
+ {
580
+ return *this ? constexpr_move(const_cast<optional<T>&>(*this).contained_val()) : detail_::convert<T>(constexpr_forward<V>(v));
581
+ }
582
+
583
+ # else
584
+
585
+ template <class V>
586
+ T value_or(V&& v) &&
587
+ {
588
+ return *this ? constexpr_move(const_cast<optional<T>&>(*this).contained_val()) : detail_::convert<T>(constexpr_forward<V>(v));
589
+ }
590
+
591
+ # endif
592
+
593
+ # else
594
+
595
+ template <class V>
596
+ constexpr T value_or(V&& v) const
597
+ {
598
+ return *this ? **this : detail_::convert<T>(constexpr_forward<V>(v));
599
+ }
600
+
601
+ # endif
602
+
603
+ // 20.6.3.6, modifiers
604
+ void reset() noexcept { clear(); }
605
+ };
606
+
607
+ template <class T>
608
+ class optional<T&>
609
+ {
610
+ static_assert( !std::is_same<T, nullopt_t>::value, "bad T" );
611
+ static_assert( !std::is_same<T, in_place_t>::value, "bad T" );
612
+ T* ref;
613
+
614
+ public:
615
+
616
+ // 20.5.5.1, construction/destruction
617
+ constexpr optional() noexcept : ref(nullptr) {}
618
+
619
+ constexpr optional(nullopt_t) noexcept : ref(nullptr) {}
620
+
621
+ constexpr optional(T& v) noexcept : ref(detail_::static_addressof(v)) {}
622
+
623
+ optional(T&&) = delete;
624
+
625
+ constexpr optional(const optional& rhs) noexcept : ref(rhs.ref) {}
626
+
627
+ explicit constexpr optional(in_place_t, T& v) noexcept : ref(detail_::static_addressof(v)) {}
628
+
629
+ explicit optional(in_place_t, T&&) = delete;
630
+
631
+ ~optional() = default;
632
+
633
+ // 20.5.5.2, mutation
634
+ optional& operator=(nullopt_t) noexcept {
635
+ ref = nullptr;
636
+ return *this;
637
+ }
638
+
639
+ // optional& operator=(const optional& rhs) noexcept {
640
+ // ref = rhs.ref;
641
+ // return *this;
642
+ // }
643
+
644
+ // optional& operator=(optional&& rhs) noexcept {
645
+ // ref = rhs.ref;
646
+ // return *this;
647
+ // }
648
+
649
+ template <typename U>
650
+ auto operator=(U&& rhs) noexcept
651
+ -> typename enable_if
652
+ <
653
+ is_same<typename decay<U>::type, optional<T&>>::value,
654
+ optional&
655
+ >::type
656
+ {
657
+ ref = rhs.ref;
658
+ return *this;
659
+ }
660
+
661
+ template <typename U>
662
+ auto operator=(U&& rhs) noexcept
663
+ -> typename enable_if
664
+ <
665
+ !is_same<typename decay<U>::type, optional<T&>>::value,
666
+ optional&
667
+ >::type
668
+ = delete;
669
+
670
+ void emplace(T& v) noexcept {
671
+ ref = detail_::static_addressof(v);
672
+ }
673
+
674
+ void emplace(T&&) = delete;
675
+
676
+ void swap(optional<T&>& rhs) noexcept
677
+ {
678
+ std::swap(ref, rhs.ref);
679
+ }
680
+
681
+ // 20.5.5.3, observers
682
+ constexpr T* operator->() const {
683
+ return TR2_OPTIONAL_ASSERTED_EXPRESSION(ref, ref);
684
+ }
685
+
686
+ constexpr T& operator*() const {
687
+ return TR2_OPTIONAL_ASSERTED_EXPRESSION(ref, *ref);
688
+ }
689
+
690
+ constexpr T& value() const {
691
+ return ref ? *ref : (throw bad_optional_access("bad optional access"), *ref);
692
+ }
693
+
694
+ explicit constexpr operator bool() const noexcept {
695
+ return ref != nullptr;
696
+ }
697
+
698
+ constexpr bool has_value() const noexcept {
699
+ return ref != nullptr;
700
+ }
701
+
702
+ template <class V>
703
+ constexpr typename decay<T>::type value_or(V&& v) const
704
+ {
705
+ return *this ? **this : detail_::convert<typename decay<T>::type>(constexpr_forward<V>(v));
706
+ }
707
+
708
+ // x.x.x.x, modifiers
709
+ void reset() noexcept { ref = nullptr; }
710
+ };
711
+
712
+ template <class T>
713
+ class optional<T&&>
714
+ {
715
+ static_assert( sizeof(T) == 0, "optional rvalue references disallowed" );
716
+ };
717
+
718
+ // 20.5.8, Relational operators
719
+ template <class T> constexpr bool operator==(const optional<T>& x, const optional<T>& y)
720
+ {
721
+ return bool(x) != bool(y) ? false : bool(x) == false ? true : *x == *y;
722
+ }
723
+
724
+ template <class T> constexpr bool operator!=(const optional<T>& x, const optional<T>& y)
725
+ {
726
+ return !(x == y);
727
+ }
728
+
729
+ template <class T> constexpr bool operator<(const optional<T>& x, const optional<T>& y)
730
+ {
731
+ return (!y) ? false : (!x) ? true : *x < *y;
732
+ }
733
+
734
+ template <class T> constexpr bool operator>(const optional<T>& x, const optional<T>& y)
735
+ {
736
+ return (y < x);
737
+ }
738
+
739
+ template <class T> constexpr bool operator<=(const optional<T>& x, const optional<T>& y)
740
+ {
741
+ return !(y < x);
742
+ }
743
+
744
+ template <class T> constexpr bool operator>=(const optional<T>& x, const optional<T>& y)
745
+ {
746
+ return !(x < y);
747
+ }
748
+
749
+ // 20.5.9, Comparison with nullopt
750
+ template <class T> constexpr bool operator==(const optional<T>& x, nullopt_t) noexcept
751
+ {
752
+ return (!x);
753
+ }
754
+
755
+ template <class T> constexpr bool operator==(nullopt_t, const optional<T>& x) noexcept
756
+ {
757
+ return (!x);
758
+ }
759
+
760
+ template <class T> constexpr bool operator!=(const optional<T>& x, nullopt_t) noexcept
761
+ {
762
+ return bool(x);
763
+ }
764
+
765
+ template <class T> constexpr bool operator!=(nullopt_t, const optional<T>& x) noexcept
766
+ {
767
+ return bool(x);
768
+ }
769
+
770
+ template <class T> constexpr bool operator<(const optional<T>&, nullopt_t) noexcept
771
+ {
772
+ return false;
773
+ }
774
+
775
+ template <class T> constexpr bool operator<(nullopt_t, const optional<T>& x) noexcept
776
+ {
777
+ return bool(x);
778
+ }
779
+
780
+ template <class T> constexpr bool operator<=(const optional<T>& x, nullopt_t) noexcept
781
+ {
782
+ return (!x);
783
+ }
784
+
785
+ template <class T> constexpr bool operator<=(nullopt_t, const optional<T>&) noexcept
786
+ {
787
+ return true;
788
+ }
789
+
790
+ template <class T> constexpr bool operator>(const optional<T>& x, nullopt_t) noexcept
791
+ {
792
+ return bool(x);
793
+ }
794
+
795
+ template <class T> constexpr bool operator>(nullopt_t, const optional<T>&) noexcept
796
+ {
797
+ return false;
798
+ }
799
+
800
+ template <class T> constexpr bool operator>=(const optional<T>&, nullopt_t) noexcept
801
+ {
802
+ return true;
803
+ }
804
+
805
+ template <class T> constexpr bool operator>=(nullopt_t, const optional<T>& x) noexcept
806
+ {
807
+ return (!x);
808
+ }
809
+
810
+ // 20.5.10, Comparison with T
811
+ template <class T> constexpr bool operator==(const optional<T>& x, const T& v)
812
+ {
813
+ return bool(x) ? *x == v : false;
814
+ }
815
+
816
+ template <class T> constexpr bool operator==(const T& v, const optional<T>& x)
817
+ {
818
+ return bool(x) ? v == *x : false;
819
+ }
820
+
821
+ template <class T> constexpr bool operator!=(const optional<T>& x, const T& v)
822
+ {
823
+ return bool(x) ? *x != v : true;
824
+ }
825
+
826
+ template <class T> constexpr bool operator!=(const T& v, const optional<T>& x)
827
+ {
828
+ return bool(x) ? v != *x : true;
829
+ }
830
+
831
+ template <class T> constexpr bool operator<(const optional<T>& x, const T& v)
832
+ {
833
+ return bool(x) ? *x < v : true;
834
+ }
835
+
836
+ template <class T> constexpr bool operator>(const T& v, const optional<T>& x)
837
+ {
838
+ return bool(x) ? v > *x : true;
839
+ }
840
+
841
+ template <class T> constexpr bool operator>(const optional<T>& x, const T& v)
842
+ {
843
+ return bool(x) ? *x > v : false;
844
+ }
845
+
846
+ template <class T> constexpr bool operator<(const T& v, const optional<T>& x)
847
+ {
848
+ return bool(x) ? v < *x : false;
849
+ }
850
+
851
+ template <class T> constexpr bool operator>=(const optional<T>& x, const T& v)
852
+ {
853
+ return bool(x) ? *x >= v : false;
854
+ }
855
+
856
+ template <class T> constexpr bool operator<=(const T& v, const optional<T>& x)
857
+ {
858
+ return bool(x) ? v <= *x : false;
859
+ }
860
+
861
+ template <class T> constexpr bool operator<=(const optional<T>& x, const T& v)
862
+ {
863
+ return bool(x) ? *x <= v : true;
864
+ }
865
+
866
+ template <class T> constexpr bool operator>=(const T& v, const optional<T>& x)
867
+ {
868
+ return bool(x) ? v >= *x : true;
869
+ }
870
+
871
+ // Comparison of optional<T&> with T
872
+ template <class T> constexpr bool operator==(const optional<T&>& x, const T& v)
873
+ {
874
+ return bool(x) ? *x == v : false;
875
+ }
876
+
877
+ template <class T> constexpr bool operator==(const T& v, const optional<T&>& x)
878
+ {
879
+ return bool(x) ? v == *x : false;
880
+ }
881
+
882
+ template <class T> constexpr bool operator!=(const optional<T&>& x, const T& v)
883
+ {
884
+ return bool(x) ? *x != v : true;
885
+ }
886
+
887
+ template <class T> constexpr bool operator!=(const T& v, const optional<T&>& x)
888
+ {
889
+ return bool(x) ? v != *x : true;
890
+ }
891
+
892
+ template <class T> constexpr bool operator<(const optional<T&>& x, const T& v)
893
+ {
894
+ return bool(x) ? *x < v : true;
895
+ }
896
+
897
+ template <class T> constexpr bool operator>(const T& v, const optional<T&>& x)
898
+ {
899
+ return bool(x) ? v > *x : true;
900
+ }
901
+
902
+ template <class T> constexpr bool operator>(const optional<T&>& x, const T& v)
903
+ {
904
+ return bool(x) ? *x > v : false;
905
+ }
906
+
907
+ template <class T> constexpr bool operator<(const T& v, const optional<T&>& x)
908
+ {
909
+ return bool(x) ? v < *x : false;
910
+ }
911
+
912
+ template <class T> constexpr bool operator>=(const optional<T&>& x, const T& v)
913
+ {
914
+ return bool(x) ? *x >= v : false;
915
+ }
916
+
917
+ template <class T> constexpr bool operator<=(const T& v, const optional<T&>& x)
918
+ {
919
+ return bool(x) ? v <= *x : false;
920
+ }
921
+
922
+ template <class T> constexpr bool operator<=(const optional<T&>& x, const T& v)
923
+ {
924
+ return bool(x) ? *x <= v : true;
925
+ }
926
+
927
+ template <class T> constexpr bool operator>=(const T& v, const optional<T&>& x)
928
+ {
929
+ return bool(x) ? v >= *x : true;
930
+ }
931
+
932
+ // Comparison of optional<T const&> with T
933
+ template <class T> constexpr bool operator==(const optional<const T&>& x, const T& v)
934
+ {
935
+ return bool(x) ? *x == v : false;
936
+ }
937
+
938
+ template <class T> constexpr bool operator==(const T& v, const optional<const T&>& x)
939
+ {
940
+ return bool(x) ? v == *x : false;
941
+ }
942
+
943
+ template <class T> constexpr bool operator!=(const optional<const T&>& x, const T& v)
944
+ {
945
+ return bool(x) ? *x != v : true;
946
+ }
947
+
948
+ template <class T> constexpr bool operator!=(const T& v, const optional<const T&>& x)
949
+ {
950
+ return bool(x) ? v != *x : true;
951
+ }
952
+
953
+ template <class T> constexpr bool operator<(const optional<const T&>& x, const T& v)
954
+ {
955
+ return bool(x) ? *x < v : true;
956
+ }
957
+
958
+ template <class T> constexpr bool operator>(const T& v, const optional<const T&>& x)
959
+ {
960
+ return bool(x) ? v > *x : true;
961
+ }
962
+
963
+ template <class T> constexpr bool operator>(const optional<const T&>& x, const T& v)
964
+ {
965
+ return bool(x) ? *x > v : false;
966
+ }
967
+
968
+ template <class T> constexpr bool operator<(const T& v, const optional<const T&>& x)
969
+ {
970
+ return bool(x) ? v < *x : false;
971
+ }
972
+
973
+ template <class T> constexpr bool operator>=(const optional<const T&>& x, const T& v)
974
+ {
975
+ return bool(x) ? *x >= v : false;
976
+ }
977
+
978
+ template <class T> constexpr bool operator<=(const T& v, const optional<const T&>& x)
979
+ {
980
+ return bool(x) ? v <= *x : false;
981
+ }
982
+
983
+ template <class T> constexpr bool operator<=(const optional<const T&>& x, const T& v)
984
+ {
985
+ return bool(x) ? *x <= v : true;
986
+ }
987
+
988
+ template <class T> constexpr bool operator>=(const T& v, const optional<const T&>& x)
989
+ {
990
+ return bool(x) ? v >= *x : true;
991
+ }
992
+
993
+ // 20.5.12, Specialized algorithms
994
+ template <class T>
995
+ void swap(optional<T>& x, optional<T>& y) noexcept(noexcept(x.swap(y)))
996
+ {
997
+ x.swap(y);
998
+ }
999
+
1000
+ template <class T>
1001
+ constexpr optional<typename decay<T>::type> make_optional(T&& v)
1002
+ {
1003
+ return optional<typename decay<T>::type>(constexpr_forward<T>(v));
1004
+ }
1005
+
1006
+ template <class X>
1007
+ constexpr optional<X&> make_optional(reference_wrapper<X> v)
1008
+ {
1009
+ return optional<X&>(v.get());
1010
+ }
1011
+
1012
+ } // namespace Ice
1013
+ } // namespace experimental
1014
+ } // namespace std
1015
+
1016
+ namespace std
1017
+ {
1018
+ template <typename T>
1019
+ struct hash<std::experimental::Ice::optional<T>>
1020
+ {
1021
+ typedef typename hash<T>::result_type result_type;
1022
+ typedef std::experimental::Ice::optional<T> argument_type;
1023
+
1024
+ constexpr result_type operator()(argument_type const& arg) const {
1025
+ return arg ? std::hash<T>{}(*arg) : result_type{};
1026
+ }
1027
+ };
1028
+
1029
+ template <typename T>
1030
+ struct hash<std::experimental::Ice::optional<T&>>
1031
+ {
1032
+ typedef typename hash<T>::result_type result_type;
1033
+ typedef std::experimental::Ice::optional<T&> argument_type;
1034
+
1035
+ constexpr result_type operator()(argument_type const& arg) const {
1036
+ return arg ? std::hash<T>{}(*arg) : result_type{};
1037
+ }
1038
+ };
1039
+ }
1040
+
1041
+ # undef TR2_OPTIONAL_REQUIRES
1042
+ # undef TR2_OPTIONAL_ASSERTED_EXPRESSION
1043
+
1044
+ namespace Ice{
1045
+
1046
+ template<class T> using optional = std::experimental::Ice::optional<T>;
1047
+
1048
+ using std::experimental::Ice::operator==;
1049
+ using std::experimental::Ice::operator!=;
1050
+ using std::experimental::Ice::operator<;
1051
+ using std::experimental::Ice::operator<=;
1052
+ using std::experimental::Ice::operator>;
1053
+ using std::experimental::Ice::operator>=;
1054
+
1055
+ using std::experimental::Ice::make_optional;
1056
+ using std::experimental::Ice::swap;
1057
+
1058
+ using nullopt_t = std::experimental::Ice::nullopt_t;
1059
+ using std::experimental::Ice::nullopt;
1060
+
1061
+ using bad_optional_access = std::experimental::Ice::bad_optional_access;
1062
+
1063
+ using in_place_t = std::experimental::Ice::in_place_t;
1064
+ using std::experimental::Ice::in_place;
1065
+
1066
+ }
1067
+
1068
+ //
1069
+ // For compatibility with the Ice C++98 mapping, do not use in new code:
1070
+ //
1071
+ namespace IceUtil{
1072
+
1073
+ template<class T> using Optional = std::experimental::Ice::optional<T>;
1074
+ constexpr std::experimental::Ice::nullopt_t None{std::experimental::Ice::nullopt_t::init()};
1075
+
1076
+ }
1077
+
1078
+ #else // C++98 mapping
1079
+
1080
+ # include <IceUtil/Optional.h>
1081
+
1082
+ #endif
1083
+
1084
+ #endif